中国人的z893要与德国人的CAN一较高低之六 51所使用的[软猫] 点击:1131 | 回复:0



米d.

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:8帖 | 61回
  • 年度积分:0
  • 历史总积分:99
  • 注册:2003年8月30日
发表于:2003-09-06 09:40:00
楼主
中国人的z893要与德国人的CAN一较高低之六 51所使用的[软猫] CAN 与z893尽管同属[局部网], 但是两者具有根本的差别,这种差别就在于: 前者为通讯协议, 后者为服务器。 就如同两个原始部落, 前者发明了用绳节记数, 后者已开始使用上了甲骨文, 两者已具有了质的分别。 CAN 的协议里不含有任何直接面向I/O控制的指令, 当它挂接在一个系统之上时,仅仅只能是一个传声筒, z893就不一样了,当它挂接在一个系统之上时, 那怕是win98me这样的巨人,它也只能称之为工作站。 CAN 采用2总线,使用专用芯片上网,俗称[硬猫]。 z893采用3总线,使用软件协议上网,俗称[软猫]。 两者之间存在着的明显的差别: [硬猫]协议透明度差,自我保护性强,系统商利益大,配套厂家成本高,升级难. [软猫]协议透明度高,自我保护性差,系统商利益小,配套厂家成本低,升级容易. z893之所以采用后者是基于我们是发展中国家, 企业起步晚,家底薄, 不可能一刀一枪地与那些超级企业相拼, 只有最便宜的总线才能为配套厂家所采用, 说白了, z893必须与中国的小公司,小企业同生同死,共求发展, 也才有一线生存的希望, 这是非常重要的。 下面将[51系列的软猫]转贴给大家, 如果理解有困难,没关系, 你只要照本宣科地搬进你的程序就行, 用多了,自然就会会的, 说不定还能搞出几个功能更强的[新猫]。 关于win98me的[软猫], 我也将会在以后的贴子中与同行们相见, 不过我弄不懂,贴上来的贴子[指源程序]怎么书写的格式变了??难看了?? 只有请大家原谅。 ;[注][em_z893.工作站.汇编源程序清单] ; [24倍速服务器下][时钟晶体] 分频系数 14.7456MHz/ 4 =115.2KbP/S ; [ 8倍速服务器下][时钟晶体] 分频系数 14.7456MHz/16 = 28.8KbP/S ; P0:=0100 [数据库]0100 置 [P0口] ; P2:=0101 [数据库]0101 置 [P2口] ORG 0000H em0000: LJMP em0400 ; 复位 RESET 入口 ORG 0003H em0003: LJMP emT01 ; INT0 外部中断 入口[em-z893.工作站系统使用] ORG 000BH em000B: LJMP em1000 ; T0 溢出 入口 ORG 0013H em0013: LJMP em2000 ; INT1 外部中断 入口 ORG 001BH em001B: LJMP em3000 ; T1 溢出 入口 ORG 0023H em0023: LJMP emT05 ; 串口IN/OUT 入口[em-z893.工作站系统使用] ORG 002BH em002B: ; T2 OR P1.1 入口 em0033: ; ADUC812_A/D 转换结束 入口 em003B: ; ADUC812_T2CI ISPI串行 入口 em0043: ; ADUC812_PSMI 电源监视器 入口 ;******************** .软猫.含扩展LJMP em0300 ******************** ; [z893.工作站.振铃服务程序] T=21-47 ;18/21 [INT0 中断服务程序入口] ORG 0050H emT01: PUSH 0D0H ;2[PSW] [PSW]标志进栈 PUSH 0E0H ;2[ACC] [ACC]标志进栈 MOV 68H, #01H ;2[68] [串IN 标志=01]00关01开 MOV 69H, #00H ;2[69] [串OUT标志=00]00关01开 MOV 60H, #61H ;2[60] [读指针=61]复位 MOV 70H, #71H ;2[70] [写指针=71]复位 MOV A, 7AH ;1[A ][7A] [交换标志]00空闲01启动02正在运行 CJNE A, #01H,emT03 ;2[A ] [不等01]去[交换标志]复位 emT02: POP 0E0H ;2[ACC] [ACC]标志出栈 POP 0D0H ;2[PSW] [PSW]标志出栈 RETI ;2[--] [中断返回]:[7A等于01]!!! emT03: XRL 7AH, A ;1[7A][A ] [交换标志置00]:[00空闲][01启动][02运行] LJMP em0300 ;2[--] 去[用户的自动交换程序入口]_!!! ; [z893.工作站.IN/OUT串行中断服务程序] T=19-43 ;8/10 [串行中断服务程序入口] emT05: PUSH 0D0H ;2[PSW] [PSW]标志进栈 PUSH 0E0H ;2[ACC] [ACC]标志进栈 PUSH 00H ;2[R0] [R0] 标志进栈 JBC 98H, emT06 ;2[RI] RI等于1去[读程序OK!]清RI JBC 99H, emT12 ;2[TI] TI等于1去[写程序OK!]清TI ;8+3+8=19 [读专用分配程序]/RI=1 emT06: MOV A, 68H ;1[A ][68] 取[串IN标志]00关01开 JZ emRETI ;2[--] [等于00]去[中断返回] ;8+3+24+8=43 [置显示IR/D程序]/D=#63H emT07: MOV A, 60H ;1[A ][60] 取[读指令]指针 CJNE A, #63H,emT08 ;2[A ] 不等于[#63]去[启动交换] MOV 63H, 99H ;2[63][SBUF] 取[IRD]数据=[SBUF] INC 60H ;1[60] [读指令]指针+1 PUSH 83H ;2[DPH] 标志进栈[DPH] PUSH 82H ;2[DPL] 标志进栈[DPL] MOV DPTR, #0200H ;2[DPTR] 置[ROM]初值[#0200H] MOV A, 62H ;1[A ][62] 变址量A=62H MOVC A, @A+DPTR ;2[A ][DP


热门招聘
相关主题

官方公众号

智造工程师