📄 轧板.asm
字号:
;说明:c3(b7)改为大人/小孩 。(D-d0)(c4-b5)(c1-b4)(c2-b6)(c3-b7)
; c2(b6)出将口
;出将 出将时间1秒 c1(b4) suply 220v flash
;.device at90s2313
.include "c:\avrtools\appnotes\2313def.inc"
.def zmzh=r26 ;打字模指针(csh=9)
.def zhm=r24 ;存要显示的字模
.def tim0=r27
.def shj=r23 ;时间计数
.def fbinl=r20 ;2进制低字节
.def fbinh=r15
.def dres8u=r13
.def drem8u=r11
.def dcnt8u=r30
.def dd8u=r12
.def dv8u=r31
.org $00
rjmp reset
.org $001
rjmp kkkb ;goinr
.org $002
rjmp extint1
reti
reti
reti
rjmp timer0
reti
reti
reti
reti
reset: ldi r16,14
out wdtcr,r16 ;dog enable 2048
sbi portb,1 ;2560/pd=hi
ldi r16,ramend ;初始化堆栈指针spl
out spl,r16
ldi r16,$73 ;pind=01110011设制输出状态
out ddrd,r16
ldi r16,16 ;pind2=out"0"设制输出值
out portd,r16
cbi portb,7
ldi r16,$7b ; pinb=01111011(fb,pinb=11111011)
out ddrb,r16
cbi ddrb,7 ;b7 child or adult
cbi portb,7
ldi r16,$03 ;pinb0=out"1",pinb1=out"1"
out portb,r16 ;ldi tim0,0
cbi portd,0
cbi portd,1
sbi ddrd,4
cbi portd,4
ldi r17,12
rsetzb: ldi r16,8
resetb: sbi portd,1
nop
cbi portd,1
dec r16
brne resetb
dec r17
brne rsetzb
main: cli ;disable all int
ldi r16,$05 ;tccr0<-00000101(ck/1024)
out tccr0,r16
ldi r16,222 ;256-36
out tcnt0,r16
ldi r16,0 ;2
out timsk,r16 ;(toie0)=1 timeo disable
ldi r16,15 ;下降触发中断int1
out mcucr,r16 ; 上升触发中断,int0
ldi r16,128 ;int0,count;int1 began
out gimsk,r16 ;int1 enable .int0 disable
sei
wait: ;#################
ldi r16,0 ;清sram$61-$6d
ldi r25,30 ;
ldi zh,0
ldi zl,$60
wwait2:st z+,r16
dec r25
brne wwait2
clr r21
clr r14
clr r1
clr r2
clr r3
clr r9
wwwa:;inc r21
;rcall DDIS ;清dis
;cpi r21,3
;brne wwwa
;ldi r16,10
;mov r14,r16
;rcall DDIS
weit: ;cbi ddrd,3 ;pind3=in
ldi r21,0
ldi r23,0
ldi fbinl,0
ldi r22,0
clr r14
clr r15
waitt1:ldi r26,0
clr r14
clr r15
;***************
sbi portb,4 ;220V闪灯亮
sbi ddrb,4
;******************
cbi portd,0
sbi portd,5 ;1420 sound
cbi portb,1 ;2560 pd=low
ldi shj,22 ;20 time of 1420 play
rcall kpaus
sbi portb,1
dde: cbi portd,4
cpi r22,3
brsh gogoa
;ldi shj,255
;rcall kpaus
;ldi shj,255
;rcall kpaus
;cpi r22,10
;breq gogoa
;ldi shj,255
;rcall kpaus
;ldi shj,255
;rcall kpaus
;cbi portd,5 ;1420 stop sound
;sbi portb,1
wdr ;dog
;#########wait 100ms
;ldi r16,2 ;wait 20 second
;out timsk,r16 ;(toie0)=1 timeo enable
;ldi tim0,0
bsdda:wdr ;dog
;cpi tim0,255 ;10
;brne bsdda
ldi r16,0 ;wait 20 second
out timsk,r16 ;(toie0)=0 timeo disable
;###########
;*****************
cbi portb,4 ;220V闪灯灭
;**************
ldi r26,22 ;22
rcall sound2 ;bjsou
ldi shj,22
rcall kpaus
cpi r22,3
brsh gogoa
ldi r26,20 ;14@@@@@@&&&&&&&&&&@@@@@@@
rcall sound2 ;bjsou
ldi shj,5 ;5
rcall kpaus
sbi portb,1
ldi shj,1
rcall kpaus
cbi portb,1
cpi r22,3
brsh gogoa
ldi r26,0
rjmp waitt1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;pause (shj*1s)
kpaus: ldi r16,2 ;wait 20 second
out timsk,r16 ;(toie0)=1 timeo enable
;ldi shj,20
wdda:ldi tim0,0
wdde:wdr ;dog
cpi r22,3
brsh jjja
cpi tim0,97
brne wdde
dec shj
brne wdda
ldi r16,0 ;wait 20 second
out timsk,r16 ;(toie0)=0 timeo disable
jjja: ret ;end 20 sec
;############
;###################
;################
;sei ;cli
gogoa: nop
cbi portd,4
wdr ;dog
ldi r16,0 ;64 ;int0 disable
out gimsk,r16 ;int1 disable
ldi r22,0
going:nop
cbi portd,4 ;光柱使能low;清柱灯
ldi r26,16 ;SAY "began"
rcall sound2
ldi r16,90
rcall fbfba ;pause
;ldi r21,1
;ldi r16,$3f
;*************
;ldi r16,10
;mov r14,r16
;ldi r16,$3f
;mov r1,r16
;rcall Ddis
clr r14
clr r1
;*****************
;rcall diso ;改为总分显示"0"
;*************
sbi portb,4
sbi ddrb,4 ; suply 220v
;********
ldi r16,90
rcall fbfba ;pause
;ldi r16,10
;mov r14,r16
;ldi r16,$3f
;mov r1,r16
;rcall ddis
clr r14
clr r1
goin:ldi zl,$70
ldi zh,0
ldi r16,0 ;
st z+,r16 ;clr sram $6e to $71
st z+,r16
st z+,r16
st z+,r16
;$$$$$$$$$$$
clr r22
clr r21
cli
ldi r16,64 ;k
out gimsk,r16 ;
sei
nop
nop
goinm: wdr
;cp r22,r21
;breq goinm ; hhff
rjmp goinm ;kkka
;$$$$$$$$$$$$
;int0 %%%%%%%%%%%%%%%%
kkkb: ;int0 a/d中段开始
nop
wdr ;dog
sbi portb,1 ;2560 pd=hi
in r19,sreg
ldi r16,0 ;2
out gimsk,r16 ;int0,int1 disable
ldi yl,$60 ;store sreg to sram $60
ldi yh,0
st y,r19
;cli
kkva:ldi r25,120 ;150 ;打锤后取值次数
kkvb:dec r25
brne ksksa
rjmp kkka
;比较并取值
ksksa:rcall goinr
ldi yl,$72
ldi yh,0
ld r18,y
cp fbinl,r18
brsh kkhb ;if fbinl<r18 go goin
rjmp kkvb ;again put 值
;比较如大于上次值,把值传给
kkhb:
ldi yl,$72
ldi yh,0
;**************
;testing b7 low child ,high adult
;cbi portb,7
;cbi ddrb,7
;sbis pinb,7
;rjmp chch
;ldi r16,100
;sub fbinl,r16
;ror fbinl
;************
chch: st y,fbinl ;r16 ;fbinl
rjmp kkvb ;goinr ;kkvb
kkka: rcall endzd
ldi yl,$72 ;恢复fbinl,
ldi yh,0
ld fbinl,y
ldi zl,$76
ldi zh,0
st z,fbinl
;*****************8
;testing b7 low child ,high adult
;cbi portb,7
;cbi ddrb,7
;sbis pinb,7
;rjmp child
;ror fbinl
;ldi yl,$72 ;stor fbinl to sram $72
;ldi yh,0
;st y,fbinl
;*******************
child:ldi r18,0 ;clr $72
st y,r18
; cpi fbinl,20 ;if fbinl<20 go reti
; brlo kmkpa
;************ ********************************************************8
;cbi ddrb,7
;cbi portb,7
;sbis pinb,7 ;child or adult
;rjmp adul
;ldi r16,100
;sub fbinl,r16
;**************
adul:; nop
; ldi yl,$76 ;$75 ;stor ever fbinl to $75
; ldi yh,0
; st y,fbinl
; inc r22
; cpi r22,1
; brne khka
; ldi yh,0
; ldi yl,$6d ;when r22=1 store fbinl in $6d
; st y,fbinl
; rjmp kmkna
khka:;cpi r22,2
; brne khkb
; ldi yh,0
; ldi yl,$6e ;when r22=2 store fbinl in $6e
; st y,fbinl
; rjmp kmkna
khkb:;ldi yh,0
; ldi yl,$6f ;when r22=3 store fbinl in $6f
; st y,fbinl
ldi r16,0 ;when r22=>3 int0 disable
out gimsk,r16 ;int1 disable
kmkna:
;ldi r17,20 ;pause a lot
kfka: ;ldi r18,200
kfkb: ;ldi r19,200
kfkc: ;dec r19
;brne kfkc
;dec r18
;brne kfkb
;dec r17
;brne kfka
kmkpa:
;ldi yl,$60 ;put sreg from sram $60
;ldi yh,0
;ld r19,y
;ldi r16,64 ;2
;out gimsk,r16 ;int0,enable.int1,disable
;out sreg,r19
;cbi portb,1 ;2560 pd=low
;sei
clr r17
clr r9
;cli
cbi portd,0
ldi r17,12
rcall dbfw
sbi portd,0
rcall kbd
wdr
rcall pija
cbi portd,4
wdr
rjmp main ;dog
endzd: reti
;&&&&&&&&&&&&&&&&&7断板控制子程序
kbd: clc
clz
clr r9
;sbi portd,0 ;data
cbi portd,1 ;clk
cbi portd,4 ;en
kbda: cpi r20,20
brlo endbj
subi r20,20
inc r9
wdr
rjmp kbda
endbj: mov r17,r9
dbsl: wdr
;cbi portd,4
ldi r16,8
kdbclk: ;sbi portd,0
wdr
sbi portd,1
nop
cbi portd,1
;cbi portd,0
dec r16
cpi r16,0
brne kdbclk
ldi r18,50
dbys: rcall ddly
dec r18
brne dbys
sbi portd,4
dec r17
brne dbsl
sbi portd,4
ret
;&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$$
dbfw: cbi portd,0
dbsla: wdr
;cbi portd,4
ldi r16,8
kdbch: ;sbi portd,0
wdr
sbi portd,1
nop
cbi portd,1
;cbi portd,0
dec r16
cpi r16,0
brne kdbch
dec r17
brne dbsla
sbi portd,4
ret
;$$$$$$$$$$$$$$$$
delay: wdr ;dog ;ldi r16,5 ;1 ;10 ;20;30;50
ldi r17,50
wa: dec r17
brne wa
wdr ;dog
ret
;@@@@@@@@@@@@@@@@
;a/d开始取值
goinr:nop ;cbi portd ;1420 stop sound
wdr ;dog
;ldi r18,0
;out gimsk,r18
ldi r18,2
;
goin5:ldi fbinl,0
sbi ddrd,1 ;sbi ddrd,2 ;cs
sbi ddrb,3 ;i/o clock
cbi portb,2 ;
cbi ddrb,2 ;data in pin
sbi portd,1 ;sbi portd,2 ;cs=hi
cbi portb,3 ;i/o clock =low
rcall delay
goin1:clc ;clr (c)
cbi portd,1 ;cbi portd,2 ;cs=low
ldi r19,8 ;2 ;i/o clock have 10 pluse(2+8)
aab: rcall delay
sbi portb,3 ;i/o clock =hi
sbic pinb,2
rjmp aad ;if data =1 goto aad
rjmp aae ;if data =0
aad:
sec ;(c)<- 1
rol fbinl
rjmp aaf
aae:
clc
rol fbinl
aaf: rcall delay
cbi portb,3 ;i/o clock =low
dec r19
brne aab
rcall delay
ldi r19,2 ;8 ;i/o clock=(10-2)=8
aba:
rcall delay
sbi portb,3 ;i/o clock =hi
rcall delay
sbic pinb,2
rjmp aah ;data=1
rjmp aai ;data=0
aah:
;sec ;(c)<-1
;rol fbinl
rjmp aaj
aai:
;clc
;rol fbinl
rcall delay
aaj: cbi portb,3
rcall delay
dec r19
brne aba
rcall delay
sbi portd,1 ;sbi portd,2 ;cs=hi
ldi r17,200
rcall wa ;pause a lot
dec r18
brne goin5 ;zhsen ;begdk
;ldi r18,64
;out gimsk,r18
;clr r18
wdr ;dog
gott: ret
;end int0 $$$$$$$$
;@@@@@@@@@@@@@@@@@
hhff:
;rcall zhsen
;2560报分
;$$$$$$$$$$$$$$$$$$$$$
pauss:wdr ;dog
rcall fbfb ;pause
rcall souk ;2560/sound报分
rcall fbfb ;pause
rcall pija ;评价语音
;cpi r21,3 ;3
;brlo endda
rjmp goinm
;%%%%%%%%%%%总成绩
;wait 100ms
ldi r16,2 ;wait 20 second
out timsk,r16 ;(toie0)=1 timeo enable
ldi tim0,0
zdda:wdr ;dog
cpi tim0,230
brne zdda
ldi r16,0 ;wait 20 second
out timsk,r16 ;(toie0)=0 timeo disable
rcall fbfb ;pause
rcall fbfb ;pause
rcall fbfb ;pause
rcall fbfb ;pause
rcall fbfb ;pause
rcall fbfb ;pause
rcall fbfb ;pause
rcall fbfb
ldi r26,17
wdr ;dog
rcall sound2 ;说“总成绩是”
;wait 2second
ldi shj,2
rcall kpaus
;***********
cbi portb,4 ;220闪灯灭
;*************
ldi zl,$80
ldi zh,0
ld r4,z+
ld r5,z+
ld r6,z
rcall souk ;抱总成绩
ldi r26,16 ;20
rcall sound2 ;抱总成绩后的群众叫声
ldi shj,7
rcall kpaus
;&&&&&&&&&&&&&&
;出将
ldi zl,$82
ldi zh,0
ld r16,z
;***************
cbi ddrb,7
cbi portb,7
sbis pinb,7 ;child or adult
rjmp adult
ldi r30,3 ;child on 2百出将
add r16,r30
;************
adult:nop
cpi r16,5 ;4五百出将
brsh chja
rjmp reset
chja:nop
clr r21
clr r14
clr r1
clr r2
clr r3
wwwb:;inc r21
;rcall ddis ;清dis
;cpi r21,3
;brlo wwwb
sbi ddrb,6
sbi portb,6
ldi r16,10 ;打开出将门时间b6腿(25)
rcall fbfba
cbi portb,6
cbi portb,6
rjmp reset
;$$$$$$$$$$$$$$
rjmp reset ;玩三次后wait again
endda: ;rjmp goinm
souk:;###########抱分子程序
wdr ;dog
.include "sound1.asm"
ddly:
ldi r16,20
mov r8,r16
ddala:ldi r16,100
mov r7,r16
ddalb:wdr ;dog
dec r7
brne ddalb
dec r8
brne ddala
wdr ;dog
ret
extint1:in r0,sreg
;ldi r22,10
rcall fbfb
sbis pind,3
rjmp extnt2
inc r22
out sreg,r0
extnt2: reti
timer0:nop
inc tim0
ldi r16,222 ;256-36
out tcnt0,r16
reti
table:
.db $3f,$06
.db $5b,$4f
.db $66,$6d
.db $7d,$07
.db $7f,$6f
clen:nop
;cbi portb,4
ldi r31,60
hhss:nop
sbi portb,5
;sbi portb,4
rcall ddly
cbi portb,5
;cbi portb,4
dec r31
brne hhss
ret
chuyi6:nop
ldi dv8u,12 ;6
clr dres8u
div8u: sub drem8u,drem8u ;clear remainder and carry
ldi dcnt8u,9 ;init loop counter
d8u_1: rol dd8u ;shift left dividend
dec dcnt8u ;decrement counter
brne d8u_2 ;if done
ret ; return
d8u_2: rol drem8u ;shift dividend into remainder
sub drem8u,dv8u ;remainder = remainder - divisor
brcc d8u_3 ;if result negative
add drem8u,dv8u ; restore remainder
clc ; clear carry to be shifted into result
rol dres8u
rjmp d8u_1 ;else
d8u_3: sec ; set carry to be shifted into result
rol dres8u
rjmp d8u_1
mov r12,dres8u
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -