單片機匯編語言源程序如下:
- org 0000h
- ljmp reset
- org 0003h
- reti
- org 000bh
- reti
- org 001bh
- reti
- org 0023h
- ljmp tans_int ;串口中斷入口
- reset: mov r0,#0 ;先進行系統準備(可以不要)
- djnz r0,$
- init: mov r1,#4 ;各個寄存器初始化
- mov tmod,#0020h
- mov th1,#0fdh
- mov tl1,#0fdh
- setb tr1 ;打開定時器中斷
- mov pcon,#00h
- clr sm0 ;設置工作方式1
- setb sm1
- setb ren ;允許串行口接收數據
- clr ti
- clr ri
- setb es ;打開串行中斷
- setb ea ;打開全局中斷
- main:
- mov r0,#9
- mov a,#0
- loop:
- mov dptr,#table ;主函數主要實現串行發送
- mov a,r0
- movc a,@a+dptr
- mov sbuf,a
- jb ti,$ ;判斷發送中斷標志是否在中斷中清零
- lcall delay ;若清零,則延時
- inc dptr
- dec r0
- cjne r0,#255,loop ;減到0之后會變成255
- ljmp main
- tans_int:
- push acc
- push psw
- jnb ti,recive_clr ;判斷是否為發送中斷
- clr ti
- sjmp int_end
- recive_clr:
- jnb ri,int_end ;判斷是否為接收中斷
- clr ri
- mov a,sbuf ;若是,則顯示出來
- mov p2,a
- int_end:
- pop psw
- pop acc
- reti
- table: ;共陽極數碼管掃描碼
- db 0c0h,0f9h,0a4h,0b0h,99h
- db 92h,82h,0f8h,80h,90h
- delay:
- mov r3,#4 ;延時函數(延時大概5**255*255*2=500ms)
- l0: mov r4,#0
- l1: mov r5,#0ffh
- djnz r5,$
- djnz r4,l1
- djnz r3,l0
- ret
- end
復制代碼
|