首页 论坛 博客
 
查看文章
 
标题:黄石科威PLC芯片组开发(11)
2008-09-03 14:48:46
实战攻坚!
 
本节,给大家讲解针对EASY-M0806R这款PLC的SCAN用户驱动子程序该完成的功能。
 
通过前面的讲解,大家应该知道,SCAN是在梯形图完成一次扫描以后被系统调用的程序,在这个程序里面,我们需要更新输入输出口的状态以及LED的状态。
 
SCAN
SCAN:                  LCALL       USER_SCAN_O                     ;输出端口和LED更新
                            LCALL       USER_SCAN_I                ;输入端口和LED更新
                            RET
 
USER_SCAN_O:  
;刷新输出端口
MOV   DPTR,#RAM_PY+1      ;Y00--Y05
                            MOVX       A,@DPTR
                            CPL        A
                            MOV       SFRPAGE,#0FH
                            ANL       A,#3FH                              
                            MOV       B,A
                            MOV       A,P1
                            ANL       A,#0C0H                            
                            ORL       A,B                                     ;使P1.6,P1.7保持原来的状态
                            MOV       P1,A                                   ;刷新输出
;刷新输出LED
                           SWAP     A
                            MOV       C,ACC.4              
                            MOV       P0.4,C
                            MOV       C,ACC.5
                            MOV       P0.5,C
                            MOV       C,ACC.6
                            MOV       P0.6,C
                            MOV       C,ACC.7
                            MOV       P0.7,C
                            MOV       C,ACC.0
                            MOV       P4.1,C
                            MOV       C,ACC.1
                            MOV       P4.0,C
                            RET
 
                                         
USER_SCAN_I: MOV       A,INPUT_CNT
                            JZ           USER_SCAN_I1
                            RET
                                                                                                               
USER_SCAN_I1:       LCALL       USER_SCAN_IS       ;判断8次采样值是否相同      
                            JB           F0,USER_SCAN_I2
                            MOV       C,ACC.7               ;调整输入口
                            MOV       F0,C
                            MOV       C,ACC.0
                            MOV       ACC.7,C
                            MOV       C,F0
                            MOV       ACC.0,C
                            MOV       C,ACC.6
                            MOV       F0,C
                            MOV       C,ACC.1
                            MOV       ACC.6,C
                            MOV       C,F0
                            MOV       ACC.1,C
                            MOV       C,ACC.5
                            MOV       F0,C
                            MOV       C,ACC.2
                            MOV       ACC.5,C
                            MOV       C,F0
                            MOV       ACC.2,C
                            MOV       C,ACC.4
                            MOV       F0,C
                            MOV       C,ACC.3
                            MOV       ACC.4,C
                            MOV       C,F0
                            MOV       ACC.3,C
                            MOV       INPUT_PORTA,A            ;相同则更新输入数据寄存器
                            MOV       DPTR,#RAM_PX+1       ;X00--X07
                            MOV       A,INPUT_PORTA
                            MOVX       @DPTR,A                     ;更新X00--X07
;刷新输入LED
MOV   A, INPUT_PORTA
CPL      A
                            MOV       P2,A
USER_SCAN_I2:       MOV       INPUT_CNT,#08H
                            RET
 
;判断8个采样数据是否相同,相同则F0=0
USER_SCAN_IS:    MOV       DPTR,#XINPUT
                            MOVX       A,@DPTR
                            MOV       M0,A
                            MOV       R7,#7
 
USER_SCAN_IS1:   INC        DPTR
                            MOVX       A,@DPTR
                            CJNE       A,M0,USER_SCAN_IS2
                            DJNZ       R7,USER_SCAN_IS1
                            CLR        F0
                            RET
 
USER_SCAN_IS2:   SETB       F0
                            RET
 
关于本段代码的详细说明,笔者将改变一下方式,在下面的回帖为大家讲解。当然笔者在关键处已经做了注释,大家可以先看看并结合之前的程序研究一下,发帖提出问题,看看笔者的回答与自己的理解有何偏差。
 
如果没有人发帖,笔者自然是希望看文章的朋友们都理解了笔者的代码,就小小的懒惰一回吧,嘿嘿~!
 
当然如果大家的问题很多,那么笔者就写“科威PLC芯片组开发实例(十二)”,详细给大家说明SCAN中代码的含义。

本文引用通告地址:http://182225590.spaces.eaw.com.cn/articles/trackback/item/1268
类别:PLC | 浏览(117) 引用(0)
 
网友评论:
发表评论:
姓 名: [ 登陆 ]
内 容:
验证码: