?? zh2.asm
字號:
.device AT90S8535
.equ sph =$3E
.equ spl =$3D
.equ SREG =$3F
.equ PORTC =$15
.equ DDRC =$14
.equ PINC =$13
.equ PORTD =$12
.equ DDRD =$11
.equ PIND =$10
.def ZL =r30
.def ZH =r31
.org $0000
rjmp main
main: ldi r16,$02 ;棧指針置初值
out sph,r16
ldi r16,$5f
out spl,r16
ldi r16,$ff ;PC口定義為輸出口
out DDRC,r16
out PORTD,r16
ldi r16,$00 ;PD口定義為輸入口
out DDRD,r16
start1: ldi r16,$ff ;定義無輸入時無輸出
out PORTC,r16
start: in r16,PIND ;讀PC口數(shù)據(jù)
andi r16,$1f ;取用PC口的低五位數(shù)據(jù)
cpi r16,$1f
brne shiy
rjmp start1
shiy: mov r17,r16
rcall de ;延時
in r16,PIND ;讀PC口的數(shù)據(jù)
andi r16,$1f ;取用PC口的低五位數(shù)據(jù)
cpi r16,$1f ;對P3口的低五位數(shù)據(jù)進行判斷
brne shiy1
rjmp start1 ;開關(guān)沒有動作時無輸出
shiy1: cp r16,r17
brne start1
cpi r16,$17 ;PC3=0時進入左轉(zhuǎn)分支
brne next1
rjmp left
next1: cpi r16,$0f ;PC4=0時進入右轉(zhuǎn)分支
brne next2
rjmp right
next2: cpi r16,$1d ;PC1=0時進入緊急分支
brne next3
rjmp earge
next3: cpi r16,$1e ;PC0=0時進入剎車分支
brne next4
rjmp brake
next4: cpi r16,$16 ;PC3=0、PC0=0時進入左轉(zhuǎn)剎車分支
brne next5
rjmp lebr
next5: cpi r16,$0e ;PC4=0、PC0=0時進入右轉(zhuǎn)剎車分支
brne next6
rjmp ribr
next6: cpi r16,$1c ;PC1=0、PC0=0時進入緊急剎車分支
brne next7
rjmp brer
next7: cpi r16,$14 ;PC3=0、PC1=0、PC0=0時進入左轉(zhuǎn)緊急剎車分支
brne next8
rjmp lbe
next8: cpi r16,$0c ;PC4=0、PC1=0、PC0=0時進入右轉(zhuǎn)緊急剎車分支
brne next9
rjmp rbe
next9: cpi r16,$1b ;PC2=0時進入停靠分支
brne next10
rjmp stop
next10: rjmp error ;其他情況進入錯誤分支
left: ldi r16,$6a ;左轉(zhuǎn)分支
out PORTC,r16
rcall de1s
ldi r16,$ff
out PORTC,r16
rcall de1s
rjmp start
right: ldi r16,$55 ;右轉(zhuǎn)分支
out PORTC,r16
rcall de1s
ldi r16,$ff
out PORTC,r16
rcall de1s
rjmp start
earge: ldi r16,$40 ;緊急分支
out PORTC,r16
rcall de1s
ldi r16,$ff
out PORTC,r16
rcall de1s
rjmp start
brake: ldi r16,$4f ;剎車分支
out PORTC,r16
rjmp start
lebr: ldi r16,$4a ;左轉(zhuǎn)剎車分支
out PORTC,r16
rcall de1s
ldi r16,$5f
out PORTC,r16
rcall de1s
rjmp start
ribr: ldi r16,$45 ;右轉(zhuǎn)剎車分支
out PORTC,r16
rcall de1s
ldi r16,$6f
out PORTC,r16
rcall de1s
rjmp start
brer: ldi r16,$40 ;緊急剎車分支
out PORTC,r16
rcall de1s
ldi r16,$4f
out PORTC,r16
rcall de1s
rjmp start
lbe: ldi r16,$40 ;左轉(zhuǎn)緊急剎車分支
out PORTC,r16
rcall de1s
ldi r16,$5f
out PORTC,r16
rcall de1s
rjmp start
rbe: ldi r16,$40 ;右轉(zhuǎn)緊急剎車分支
out PORTC,r16
rcall de1s
ldi r16,$6f
out PORTC,r16
rcall de1s
rjmp start
stop: ldi r16,$43 ;停靠分支
out PORTC,r16
rcall de100ms
ldi r16,$7f
out PORTC,r16
rcall de100ms
rjmp start
error: ldi r16,$3f ;錯誤分支
out PORTC,r16
rcall de1s
ldi r16,$ff
out PORTC,r16
rcall de1s
rjmp start
de: ldi r24,6 ;延時子程序
push r24
del2: push r24
del3: dec r24
brne del3
pop r24
dec r24
brne del2
pop r24
ret
de1s: ldi r24,249
push r24
desl1: push r24
desl2: push r24
desl3: dec r24
brne desl3
pop r24
dec r24
brne desl2
pop r24
dec r24
brne desl1
pop r24
ret
de100ms:ldi r24,114
push r24
demsl1: push r24
demsl2: push r24
demsl3: dec r24
brne demsl3
pop r24
dec r24
brne demsl2
pop r24
dec r24
brne demsl1
pop r24
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -