?? a5_4.asm
字號:
;///////////////////////////////////////////
;本程序源代碼由單片機培訓網(wǎng)提供.
;單片機培訓網(wǎng),讓更多人學習單片機更容易.
;第一網(wǎng)址----www.mcuedu.com
;第二網(wǎng)址----http://51_train.nease.net
;創(chuàng)辦人------劉永忠
;熱線電話----(0755)27529998
;email-------aa815@163.com
;程序難易等級--------稍難
;使用串行中斷發(fā)送數(shù)據(jù)
;///////////////////////////////////////////
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發(fā)出
clr 20h.0 ;清除回應標志位20h.0=0
clr 20h.1 ;清除錯誤標志位20h.1=0
loop3: jb 20h.1,loop2 ;檢測有錯否?(20h.1=1),有則重發(fā)
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 ;是發(fā)送中斷,則清除ti=0
sjmp return
loop4: mov a,sbuf ;將sbuf載入acc
cjne a,30h,loop5 ;將發(fā)送與的接收比較是否相同?
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 + -