51单片机 双机通信(汇编)
;用方式一双机通信:定时器采用定时器1(8位自动重装),波特率采用9600bit/s
;此程序实现双机同时发送(数码管0-9),并能同时接受,并显示出来,真正实现异步全双工
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
51单片机双机通信汇 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)