正文

单片机与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

阅读(2565) | 评论(0)


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

评论

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