正文

单片机与PC机串行通讯之VB篇(2)2005-09-30 13:23:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/5472.html

分享到:

单片机与PC机串行通讯之VB篇(2)Ryan 发表于 2005-6-7 14:38:16 下面是单片机里面的汇编程序:                        ORG 0000H         AJMP MAIN         ORG 0023H                       ;串行中断入口地址        JMP COM_INT                     ;串行中断服务程序 ;***********  主程序开始    *******************         ORG 0030H  MAIN:   MOV SP,#30H            ;设置堆栈          CALL REST             ;初始化          CALL COMM             ;串口初始化          JMP $                  ;原地等待 ;  *************   初始化   *********************   REST:      MOV P0,#0FFH              ;禁止数码管显示              MOV P2,#255              RET                      ;返回 ; **************  串口初始化   *****************;设置串行口工作方式1,定时器1作为波特率发生器;波特率设置为   4800  ; COMM:          MOV TMOD,#20H          ;设置定时器t1工作方式2               MOV TL1,#0F4H          ;定时器计数初值,波特率 2400                MOV TH1,#0F4H          ;定时器重装值               SETB EA                ;允许总的中断               SETB ES                ;允许串行中断               MOV PCON,#80H          ;波特率倍增               MOV SCON,#50H          ;设置串口工作方式1,ren = 1 允许接收               SETB TR1               ;定时器开始工作               RET                    ;返回;***************  串口中断服务程序   ***********;  如果接收  "A"  表示上位机需要联机信号,单片机发送 "Y"作为;  应答信号,如果接收到 数字 1~ N,表示相应的功能;;  这里,如果收到 1 ,则单片机向计算机发送字符  'A';;  如果收到 2 ,则单片机向计算机发送字符  'B';;  如果收到其他的数据,则发送    'C';COM_INT:   CLR ES                  ;禁止串行中断                CLR RI                  ;清除接收标志位                MOV A,SBUF              ;从缓冲区取出数据                MOV P1,A                MOV DPTR,#TAB                CJNE A,#041H,IN_1       ;检查数据                MOV SBUF,#59H           ;收到联机信号"A",发送联机信号"Y"                JNB TI,$                ;等待发送完毕                CLR TI                  ;清除发送标志                SETB ES                 ;允许串行中断                RETI                    ;中断返回IN_1:   JNE A,#01h, IN_2            ;如果收到1                MOVC A,@A+DPTR                MOV SBUF,A              ;发送 'A'                JNB TI,$                ;等待发送完毕                CLR  TI                 ;清除发送中断标志                SETB ES                 ;允许串行中断                RETI                    ;中断返回IN_2:   CJNE A,#02,IN_3              ;接收到  2                 MOVC A,@A+DPTR                MOV SBUF,A              ;发送 'B'                JNB TI,$                ;等待发送完毕                CLR  TI                 ;清除发送中断                SETB ES                 ;允许串行中断                RETI                    ;中断返回IN_3:      MOV A,#03H                MOVC A,@A+DPTR                MOV SBUF,A              ;发送 'C'                JNB TI,$                ;等待发送完毕                CLR TI                  ;清除发送中断标志                SETB ES                 ;允许串行中断                RETI                    ;返回;查表数据区TAB:     DB 'X','A','B','C'    END

阅读(2650) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册