⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 轧板.asm

📁 这是一些用汇编做的单片机程序
💻 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 + -