⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机汇编.txt

📁 PC机与51单片机之间的串口通讯,VB编的,分PC和单片机两部分
💻 TXT
字号:
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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -