循序渐进51study之实例10
;实例10
;本程序实现51 studio与微机的rs232的通信
;开机显示rs232 在第7,8数码管显示接收到的数据
;对微机方面需要设置 DTR=1(打开rs232转换器),RTS=1(用户程序状态)
include sdo_h
org 0000h
ljmp start
org
0023h
svces: jb ti,exit>svces ;发送中断则退出
jnb
ri,exit>svces ;非接收中断退出
clr
ri
;清除中断标志位
push
acc
;寄存器保护
push
dph
push
dpl
mov
dptr,#dispcode ;取显示代码首地址
mov
a,sbuf ;读取收到的数据
swap
a
anl
a,#0fh
movc
a,@a+dptr ;换码
mov
36h,a ;在第7个数码管显示高半字节
mov
a,sbuf
anl
a,#0fh
movc
a,@a+dptr
mov
37h,a ;在第8个数码管显示低半字节
pop
dpl
pop
dph
pop
acc
exit>svces: reti
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
start: mov
sp,#60h ;堆栈区
mov
psw,#0 ;第0组工作寄存器
mov
tmod,#21h ;t1为8位只自动重装方式,t0为16位方式
mov
th1,#0f3h ;f=12mhz 2400br
mov
tl1,#0f3h
mov
pcon,#00h ;波特率不加倍
mov
scon,#01000000b ;串口方式1 不允许接收
setb
tr1
;开定时器1
clr
et1
;不允许定时器中断
setb
ren
;允许接收
setb
es
;开串口中断
lcall screen_clear<>
;清除显示缓冲区30h-37h
mov
30h,#72h ;显示rs232
mov
31h,#6dh
mov
32h,#5bh
mov
33h,#4fh
mov
34h,#5bh
setb
ea
;开总中断
setb
wiret1
mov
r2,#0
main: mov
r4,#5 ;显示400毫秒
dispme: lcall print80ms<>
djnz
r4,dispme
clr
ti
mov
sbuf,r2 ;发送数据(0-255)
jnb
ti,$ ;等待发送完毕
clr
ti
cpl
wiret1
inc
r2
sjmp
main
dispcode: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h
db 77h,7ch,39h,5eh,79h,71h,6fh,76h,30h,0eh
db 78h,38h,54h,37h,5ch,73h,67h,72h,6dh,31h
db 3eh,1ch,62h,64h,6eh,5bh
end