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

📄 rs232.asm

📁 用89S52进行DS1820温度读取程序
💻 ASM
字号:
;这是一个使用单片机串行通信口通过RS232总线与PC进行通信的测试程序,无需扩展.
;可将DB9的第2和第3脚短路,进行自收自发测试.
;采用串行中断接收,速率:9600,通信方式3,晶振使用:osc=11.0592MHz
;使用SW1-SW6键盘发送文本数字1-6,数码管显示接收的ASCII数据

         BUFF_KEY  EQU 21H      ;键盘键
         BUFF_LED1 EQU 22H     ;数码管显示缓存
         BUFF_LED2 EQU 23H
         BUFF_LED3 EQU 24H
         BUFF_LED4 EQU 25H
         BUFF_LED5 EQU 26H
         BUFF_LED6 EQU 27H
         BUFF_LED_LP  EQU 2BH      ;T0键盘显示扫描缓存      
         F_BEEP    BIT   01H

        LED_PORT   EQU   P0
        DIG_PORT   EQU   P2
        KEY_PORT   EQU   P2
        SW1        BIT   P2.7
        SW2        BIT   P2.6
        SW3        BIT   P2.5
        SW4        BIT   P2.4
        SW5        BIT   P2.3
        SW6        BIT   P2.2
        KEY        BIT   P3.3
        BEEP       BIT   P2.0
        org   000h
        JMP   main
        ORG   00BH
        JMP   T0_INT
        org   0023h
        ljmp  rx_int
        ORG   100H
   main:MOV   SP ,#40H
        MOV   R0,#7FH
CLR_RAM:MOV   A,#00H
        MOV   @R0,A
        DJNZ  R0,CLR_RAM
        mov   sp,#40h
        MOV   IE,#00H
        mov   tmod,#21h
        mov   scon,#50h
        mov   TH1,#0FDH    ;sn=9600b/s-n-1
        MOV   TL1,#0FDH
        MOV   TH0,#244     ;T0=3MS
        MOV   TL0,#72
        SETB   TR1
        SETB   ES
        SETB   TR0
        SETB   ET0
        SETB   EA
        MOV    P1,0FFH      ;INIT
        MOV    P2,0FFH
        MOV    P0,0FFH
        MOV    P3,0FFH

WAIT_KEY:JB    KEY,$       ;等候按键!
         JNB   SW1,SW1_OK
         JNB   SW2,SW2_OK
         JNB   SW3,SW3_OK
         JNB   SW4,SW4_OK
         JNB   SW5,SW5_OK
         JNB   SW6,SW6_OK
         JMP   WAIT_KEY
SW1_OK:  MOV   SBUF,#'1'   ;通常使用加单引号,表示文本,'A'
         JNB   TI,$
         CLR   TI
         LCALL  DEL
         JMP   WAIT_KEY
SW2_OK:  MOV   SBUF,#'2'
         JNB   TI,$
         CLR   TI
         LCALL  DEL
         JMP   WAIT_KEY
SW3_OK:  MOV   SBUF,#'3'
         JNB   TI,$
         CLR   TI
         LCALL  DEL
         JMP   WAIT_KEY
SW4_OK:  MOV   SBUF,#'4'
         JNB   TI,$
         CLR   TI
         LCALL  DEL
         JMP   WAIT_KEY
SW5_OK:  MOV   SBUF,#'5'
         JNB   TI,$
         CLR   TI
         LCALL  DEL
         JMP   WAIT_KEY
SW6_OK:  MOV   SBUF,#'6'
         JNB   TI,$
         CLR   TI
         LCALL  DEL
         JMP   WAIT_KEY

DEL:     SETB  F_BEEP      ;起动蜂鸣器
         MOV   R5,#02      ;为演示方便,人为插入的延时
DEL01:   MOV   R6,#200
DEL02:   MOV   R7,#200
         DJNZ  R7,$
         DJNZ  R6,DEL02
         DJNZ  R5,DEL01
         CLR   F_BEEP
         RET

;----------- SERIAL COMMUNICATION INTRRUPT 串行接收中断--------------------
RX_INT: PUSH  ACC
        PUSH  PSW
        JNB   RI,END_RX
        CLR   RI
        MOV   A,SBUF               ;读接收字节
        CLR   C
        SUBB  A,#30H               ;转换文本ASCii为数字
        MOV   BUFF_LED1,BUFF_LED2  ;循环移动显示
        MOV   BUFF_LED2,BUFF_LED3
        MOV   BUFF_LED3,BUFF_LED4
        MOV   BUFF_LED4,BUFF_LED5
        MOV   BUFF_LED5,BUFF_LED6
        MOV   BUFF_LED6,A

END_RX: POP   PSW
        POP   ACC
        RETI

;-------------  T0 INTRRUPT 数码管扫描定时中断---------------------------
T0_INT:  PUSH   ACC
         PUSH   PSW
         MOV    TH0,#244     ;T0=3MS
         MOV    TL0,#72
         INC    BUFF_LED_LP
         MOV    A,BUFF_LED_LP
         CJNE   A,#07,CONT_SCAN
         MOV    BUFF_LED_LP,#01H
CONT_SCAN:MOV   A,BUFF_LED_LP
          DEC   A
          RL    A
          MOV   DPTR,#TAB_SCAN
          JMP   @A+DPTR
TAB_SCAN: AJMP  SCAN_L1
          AJMP  SCAN_L2
          AJMP  SCAN_L3
          AJMP  SCAN_L4
          AJMP  SCAN_L5
          AJMP  SCAN_L6
SCAN_L1:  MOV   DIG_PORT,#01111111B
          MOV   A,BUFF_LED1
          JMP   END_SCAN
SCAN_L2:  MOV   DIG_PORT,#10111111B
          MOV   A,BUFF_LED2
          JMP   END_SCAN
SCAN_L3:  MOV   DIG_PORT,#11011111B
          MOV   A,BUFF_LED3
          JMP   END_SCAN
SCAN_L4:  MOV   DIG_PORT,#11101111B
          MOV   A,BUFF_LED4
          JMP   END_SCAN
SCAN_L5:  MOV   DIG_PORT,#11110111B
          MOV   A,BUFF_LED5
          JMP   END_SCAN
SCAN_L6:  MOV   DIG_PORT,#11111011B
          MOV   A,BUFF_LED6
END_SCAN: MOV   DPTR,#TAB_LED
          MOVC  A,@A+DPTR
          MOV   LED_PORT,A
          JNB   F_BEEP,EXIT_T0
          CLR   BEEP
EXIT_T0:  POP   PSW
          POP   ACC
          RETI


TAB_LED:	DB 0C0H,0F9H,0A4H,0B0H,99H,92H   ;数码管显示字型表
		DB 82H,0F8H,80H,90H,88H,83H,0A7H
		DB 0A1H,86H,8EH

      END


⌨️ 快捷键说明

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