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

📄 withpc.asm

📁 单片机与PC机通讯
💻 ASM
字号:
     ORG 0000H
     AJMP MAIN
     ORG 0023H
     AJMP RECE
     ORG 0040H
MAIN:MOV SP,#60H
     MOV SCON,#50H     ;串口初始化
     MOV TMOD,#20H
     MOV TH1,#0F3H
     MOV TL1,#0F3H
     MOV PCON,#00H     ;设置波特率
     SETB TR1          ;启动定时器1
     SETB EA           ;开放中断
     SETB ES           ;开放串行中断
L3:  CLR 00H
     CLR 01H
     CLR 02H
     CLR 03H
     MOV R6,#00H
     MOV DPTR,#1000H
L2:  JB 03H,L1
     SJMP L2
L1:  ACALL SEND
     AJMP L3
SEND:MOV A,#3FH
      MOV SBUF,A
      JNB TI,$
      CLR TI         ;发‘?’号,即3FH
      JNB RI,$
      CLR RI
      MOV A,SBUF
      CJNE A,#2EH,SEND  ;应答信号是‘.’,即2EH,则发字节数
      MOV A,R7
      MOV R3,A          ;暂存总字节数
      MOV SBUF,A
      JNB TI,$
      CLR TI
      MOV R6,#00H
      MOV DPTR,#1000H
SEND1:MOVX A,@DPTR
      MOV SBUF,A        ;发送一个字符
      JNB TI,$
      CLR TI
      ADD A,R6          ;计算校验和
      MOV R6,A
      INC DPTR
      DJNZ R7,SEND1     ;计数器(R7)不为零则转SEND1
      MOV A,R6
      MOV SBUF,A
      JNB TI,$
      CLR TI            ;发送校验和
      JNB RI,$
      CLR RI
      MOV A,SBUF
      CJNE A,#46H,SEND2 ;如收到应答是‘F’,即46H,则重发数据
      RET
SEND2:MOV DPTR,#1000H
      MOV R6,#00H
      MOV A,R3
      MOV R7,A
      AJMP SEND1
RECE:    CLR ES
         CLR RI
         JB 00H,RECE1
         MOV A,SBUF
         CJNE A,#3FH,RECE2   ;收的不是‘?’号则退出
         MOV A,#2EH
         MOV SBUF,A
         JNB TI,$
         CLR TI              ;发送应答信号‘.’,即2EH
         SETB 00H
         SETB ES
         RETI
RECE2:   MOV A,#24H
         MOV SBUF,A
         JNB TI,$
         CLR TI              ;发送应答信号‘$’,即24H
         SETB ES
         RETI
RECE1:   JB 01H,RECE4
         MOV A,SBUF          ;接收字节数
         MOV R7,A
         MOV R3,A            ;暂存总字节数
         SETB 01H
         SETB ES
         RETI
RECE4:   JB 02H,RECE5
         MOV A,SBUF          ;接收一字符
         MOVX @DPTR,A        ;存入外RAM中
         ADD A,R6
         MOV R6,A
         INC DPTR
         DJNZ R7,RECE7
         SETB 02H
RECE7:   SETB ES
         RETI
RECE5:   MOV A,SBUF
         CJNE A,06H,RECE8    ;06H为R6的字节地址
         MOV A,#4FH          ;校验和不正确,重发数据
         MOV SBUF,A
         JNB TI,$
         CLR TI              ;校验正确发‘0’,即4FH
         SETB 03H
         SETB ES
         RETI
RECE8:   MOV DPTR,#1000H
         MOV R6,#00H
         MOV A,R3
         MOV R7,A
         MOV A,#46H
         MOV SBUF,A
         JNB TI,$
         CLR TI              ;校验不正确,发‘F’,即46H
         CLR 02H
         SETB ES
         RETI

⌨️ 快捷键说明

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