串列埠除錯助手上輸入資料0-9,然後再數碼管顯示(組合語言版本)
//實驗目的:串列埠除錯助手上輸入資料0-9,然後再數碼管顯示
org 00H
ljmp start
org 23H //中斷入口地址
ljmp uart_interrupt
org 30H
start:
mov P0,#0xff//設定初始值
mov dptr,#numb
lcall en
lcall UART_init
here: sjmp here //好比是一個while(1)迴圈
;首先3/8譯碼器使能 並且選中第一個數碼管用於顯示
en:
clr P1.4
setb P1.3
clr P1.0
clr P1.1
clr P1.2
ret
//uart初始化
UART_init:
mov TMOD,#0x20 //0010 0000 說明在定時器1的工作方式2下工作
mov TH1,#0xFD
mov TL1,#0xFD
setb TR1 //定時器1執行控制位=1,說明開始計時
mov SCON,#0x50 //0101 0000 前兩位說明在串列埠工作方式1 第三位SM2在方式1設定為0 第四位REN=1允許串列埠接收
setb EA
setb ES
setb ET1
ret
//中斷服務程式
uart_interrupt:
send:
mov A,#0x02
anl A,SCON
cjne A,#2, receive
clr TI
setb REN
receive:
mov A,#0x01
anl A,SCON
cjne A,#1,quit
clr RI
mov R4,SBUF
mov R3,SBUF
mov A,R4
subb A,#0x30
movc A,@A+dptr
mov P0,A
addc A,#0x30
mov SBUF,R3
clr REN
quit:
reti
//0-9
numb:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
end