中国人的z893要与德国人的CAN一较高低之七 98me所使用的[软猫]篇之1[白猫] 点击:1286 | 回复:0



米d.

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:8帖 | 61回
  • 年度积分:0
  • 历史总积分:99
  • 注册:2003年8月30日
发表于:2003-09-08 08:41:00
楼主
中国人的z893要与德国人的CAN一较高低之七 98me所使用的[软猫]篇之1[白猫] 在第六贴的[软猫]篇中, 我们给大家介绍了51所使用的[软猫], 它采用中断方式, 程序又短, 功能又强, 值得猫迷爱好者好好读读! 下面该轮到介绍win所使用的软猫了, 在此之前我们有必要对win的现状加以简单回顾。 win95的推出, 是PC桌面操作系统发展史上的一个里程碑, 怎么高估它都不为过。 我是这样认为的: 翻开PC的发展史, 它之所以有这样的普及,这样的强大, 不仅是靠IBM,微软,英特尔这些超级巨人, 中间还有千千万万的计算机工作者, 默默无闻地推广和创造, 编写了数不清的应用软件, 才形成了今日的产业。 我们对这个现状必须要有一个清晰的认识, 用任何一个新系统来取代PC, 时间会证明是困难的,错误的。 我们应该把PC看成是全世界人类的共同财富, 来完善它,发展它和呵护它。 不能因为WIN里面存在着这样或者是那样的错误, 甚至是很严重的错误, 就全盘攻击它,否定它, 甚至要创造一个新的系统来将取代它, 从财力、人力、物力及时间上都是得不偿失的。 我不想为微软唱赞歌,我只是想告戒朋友, 勿伦你做什么, 都要做到一是兼容,二是开放。 所谓兼容就是要在硬件与软件上兼容PC; 所谓开放就是要让你的想法, 乐于让更多的科技开发者参入。 WIN的推出, 标志着操作系统由单任务向多任务的演变, 这是一种进步, 但是这种演变, 或许是来得太快了, 或许是微软一时疏胡, 或许是有说不出的苦衷, 在过程控制这块领域里, WIN对实时应用软件的支持, 表现出十分有限, 才造成了今天多种总线一争天下的春秋战国时代, 谈不出是好还是坏, 时间与市场会作出回应。 多任务的核心是主轴定时器, 用来将多线程分段。 在95-98me,采用的是可屏蔽中断; 在2000-XP,采用的是非屏蔽中断, 因此在前者, 还存有兼容实时任务的可行性, 后者就困难大了。 z893就是本着前者, 开发了几个软猫, 基本上解决了PC操作系统不能直接编写控制单片机[含PLC]的软件问题。 下面先介绍98me所使用的[软猫]篇之[白猫]: 供z893_emdos指令使用,详见各贴例程。 [用Delphi语言编写 [兼容Delphi2.0、3.0、4.0、5.0、7.0] [不兼容6.0] var d100a: Td100a; d1000:array[0..254] of byte; //数据库使用 z893_em d1100:array[0..254] of byte; //数据库保留 IR字节 d1200:array[0..254] of byte; //数据库使用 pc处理指令 d1300:array[0..254] of byte; //数据库使用 as用户指令 d1400:array[0..254] of byte; //数据库使用 读/RAM d1500:array[0..254] of byte; //数据库使用 写/RAM d2000:byte; //数据库使用 报警标志 01:ok FF: 错 d2001:byte; //数据库使用 读标志 00:ok FF:结束 d2002:byte; //数据库使用 写标志 00:ok FF:结束 d2003:byte; //数据库使用 设备号 d2004:dword; //数据库使用 1000 IN 读指令指针 d2005:dword; //数据库使用 1200 OUT 写指令指针 d2006:dword; //数据库使用 动态显示[高速通道1-4] d2007:dword; //数据库使用 d=0 允许采样 1关闭 d2008:dword; //数据库使用 d=0 允许显示 1关闭 procedure a100; //emdos入口1 [可程控方式] procedure a300; //读 [a100的子程序] procedure a700; //写 [a100的子程序] {$R *.DFM} ;******************** .软猫1. ******************** //子程序 procedure a100; begin asm @@100: cli //初始化 push eax push ebx push ecx push edx push ebp push edi mov d2000,255 //报警标志 01:ok FF: 错 lea ebp,d1300 //as用户指令 mov al,d2003 mov [ebp],al //设备码 mov al,[ebp+5] //in:长度 mov [ebp+9],al //**in:长度 mov al,[ebp+6] //out:长度 mov [ebp+10],al //**out:长度 mov al,0 mov [ebp+7],al //in:指针 mov [ebp+8],al //out:指针 mov [ebp+11],al //报警 mov [ebp+12],al //交换 mov ecx,8ffffh //看门狗2ffff=1s/500MHz //DCD检测 @@101: mov dx,3feh in al,dx and al,80h jnz @@102 //DCD检测↓ loop @@101 //看门狗循环 jmp @@rm @@102: mov dx,3feh //DCD检测↑ in al,dx and al,80h jz @@103 //dcd ok! loop @@102 //看门狗循环 jmp @@rm //测检设备号 @@103: mov dx,3fdh in al,dx and al,1 jnz @@104 //232口已有字符 loop @@103 //看门狗循环 jmp @@rm @@104: lea ebp,d1300 //as用户指令 mov dx,3f8h in al,dx //取设备号 cmp al,[ebp] jz @@105 loop @@101 //重新返回dcd检测 jmp @@rm //设备号选中 @@105: mov d2001,0 //读标志 00:启动 FF:结束 mov d2002,0 //写标志 00:启动 FF:结束 mov d2004,1 //IN 读指令指针=1 mov d2005,0 //OUT 写指令指针=0 lea ebx,d1000 //z893_em 输入指令 mov [ebx],al //设备号存 //预置参数 @@106: lea ebx,d1200 //pc处理指令 lea ebp,d1300 //as用户指令 not al mov [ebx],al mov eax,[e


热门招聘
相关主题

官方公众号

智造工程师