📄 a5_4.asm
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;程序难易等级--------稍难
;使用串行中断发送数据
;///////////////////////////////////////////
org 00h
jmp start
org 23h ;uart中断起始地址
jmp uarti ;uart中断子程序
start: mov tmod,#00100000b ;timet1工作在mode2
anl pcon,#01111111b ;smod=0
mov th1,#0f3h ;波特率2400
setb tr1 ;启动timer1
mov scon,#01010000b ;uart工作在mode1
mov ie,#10010000b ;uaet中断使能
mov 30h,#0ffh ;指拨开关初始值
loop: mov a,p1 ;读入指拨开关值
cjne a,30h,loop1 ;判断指拨开关有没有变化?
jmp loop
loop1: mov 30h,a ;有变化则存入ram(30h)
loop2: mov sbuf,a ;送入sbuf发出
clr 20h.0 ;清除回应标志位20h.0=0
clr 20h.1 ;清除错误标志位20h.1=0
loop3: jb 20h.1,loop2 ;检测有错否?(20h.1=1),有则重发
jnb 20h.0,loop3 ;检测有回应否?(20h.0=1)
jmp loop
uarti: push acc ;将acc存入堆栈
push psw ;将psw存入堆栈
setb rs0 ;设寄存器组1
clr rs1
jbc ri,loop4 ;是否接收中断?是则跳至loop4
clr ti ;是发送中断,则清除ti=0
sjmp return
loop4: mov a,sbuf ;将sbuf载入acc
cjne a,30h,loop5 ;将发送与的接收比较是否相同?
setb 20h.0 ;相同则设定应答标志位20h.0=1
sjmp return
loop5: setb 20h.1 ;不同则设错误标志位20h.1=1
return: pop psw ;取回psw值
pop acc ;取回acc值
reti
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -