?? rs232.asm
字號:
;這是一個使用單片機(jī)串行通信口通過RS232總線與PC進(jìn)行通信的測試程序,無需擴(kuò)展.
;可將DB9的第2和第3腳短路,進(jìn)行自收自發(fā)測試.
;采用串行中斷接收,速率:9600,通信方式3,晶振使用:osc=11.0592MHz
;使用SW1-SW6鍵盤發(fā)送文本數(shù)字1-6,數(shù)碼管顯示接收的ASCII數(shù)據(jù)
BUFF_KEY EQU 21H ;鍵盤鍵
BUFF_LED1 EQU 22H ;數(shù)碼管顯示緩存
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 ;讀接收字節(jié)
CLR C
SUBB A,#30H ;轉(zhuǎn)換文本ASCii為數(shù)字
MOV BUFF_LED1,BUFF_LED2 ;循環(huán)移動顯示
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 數(shù)碼管掃描定時中斷---------------------------
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 ;數(shù)碼管顯示字型表
DB 82H,0F8H,80H,90H,88H,83H,0A7H
DB 0A1H,86H,8EH
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -