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

📄 sg13.asm

📁 基于PROTERUS仿真的AVR例子
💻 ASM
字号:
.device AT90S8535
.equ    SREG	=$3F
.equ    sph    	=$3E
.equ    spl    	=$3D
.equ    TIMSK   =$39
.equ    TIFR  	=$38
.equ    TCCR2   =$25
.equ    ASSR    =$22
.equ	PORTB	=$18
.equ	DDRB	=$17
.equ    PINB    =$16
.equ	PORTD	=$12
.equ	DDRD	=$11
.equ    PIND    =$10
.def 	ZH     	=r31
.def 	ZL     	=r30

	.org	$0000
	rjmp	reset
	.org	$004
	rjmp	t2_ovf

tab:	.db	$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f

reset:	ldi	r16,$02			;栈指针置初值
	out	sph,r16
	ldi	r16,$5f
	out	spl,r16
	ldi	r16,$ff			;定义PB、PD为输出口
	out	DDRB,r16
	out	DDRD,r16
	ldi	r26,0			;设时、分、秒初值为00:00:00
	ldi	r27,0
	ldi	r28,0
	ldi	r16,$08			;使用异步时钟
	out	ASSR,r16
	ldi	r16,$40			;允许T2溢出中断
	out	TIMSK,r16
	ldi	r16,$05			;128分频,1s中断1次
	out	TCCR2,r16
	ldi	r16,$00			;T/C2置初值0
	out	TIFR,r16
	sei
	
aa:	mov	r16,r26			;秒寄存器中数二转十,送r19、r18
	rcall	b8td
	mov	r19,r17
	mov	r18,r16
	mov	r16,r27			;分寄存器中数二转十,送r21、r20
	rcall	b8td
	mov	r21,r17
	mov	r20,r16
	mov	r16,r28			;时寄存器中数二转十,送r25、r22
	rcall	b8td
	mov	r25,r17
	mov	r22,r16
	rcall	smiao
	rjmp	aa
	
t2_ovf:	in	r1,SREG			;保护标志
	inc	r26			;秒增1
	cpi	r26,60			;到60s?
	brne	tt
	clr	r26			;到了,则秒清0
	inc	r27			;分增1
	cpi	r27,60			;到60min?
	brne	tt
	clr	r27			;到了,则分清0
	inc	r28			;分增1
	cpi	r28,24			;到24h?
	brne	tt
	clr	r28			;到了,则时清0
tt:	out	sreg,r1
	reti
	
b8td:	clr	r17			;将r16中的二进制数转换为十进制数,十位、个位分别送r17、r16
b8td1:	subi	r16,10
	brcs	b8td2
	inc	r17
	rjmp	b8td1
b8td2:	subi	r16,(-10)
	ret
	
smiao:	ldi	r16,$fe			;送个位位线
	out	PORTD,r16
	mov	r23,r18			;将个位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$fd			;送十位位线
	out	PORTD,r16
	mov	r23,r19			;将十位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$fb			;送百位位线
	out	PORTD,r16
	mov	r23,r20			;将百位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$f7			;送千位位线
	out	PORTD,r16
	mov	r23,r21			;将千位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$ef			;送万位位线
	out	PORTD,r16
	mov	r23,r22			;将万位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ldi	r16,$df			;送万位位线
	out	PORTD,r16
	mov	r23,r25			;将万位的BCD码送r23
	rcall	cqb			;查7段码,送B口输出
	rcall	t1ms			;延时1ms
	ret
	
cqb:	ldi	ZH,high(tab*2)		;7段码的首址给Z
	ldi	ZL,low(tab*2)
	add	ZL,r23			;首地址+偏移量
	lpm				;查表送B口输出
	out	PORTB,r0
	ret
	
t1ms:	ldi	r24,101			;延时1ms子程序
	push	r24
del2:	push	r24
del3:	dec	r24
	brne	del3
	pop	r24
	dec	r24
	brne	del2
	pop	r24
	ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -