1. 程式人生 > >串列埠除錯助手上輸入資料0-9,然後再數碼管顯示(組合語言版本)

串列埠除錯助手上輸入資料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