单片机汇编语言源程序如下:
- 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
复制代码
|