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

📄 sg8.lst

📁 基于PROTERUS仿真的AVR例子
💻 LST
字号:

AVRASM ver. 1.30  sg8.ASM Thu Apr 19 09:54:43 2007


          .device AT90S8535
          .equ    sph    	=$3E
          .equ    spl    	=$3D
          .equ	PORTB	=$18 		
          .equ	DDRB	=$17 		
          .equ    PINB    =$16
          .equ	PORTC	=$15
          .equ	DDRC	=$14 		
          .equ    PINC    =$13
          .equ	PORTD	=$12
          .equ	DDRD	=$11 		
          .equ    PIND    =$10
          .equ    TIMSK   =$39
          .equ    TCCR1B  =$2E
          .equ    SREG	=$3F
          .equ    TCCR0	=$33
          .equ    TCNT0 	=$32
          .equ    TCNT1H	=$2D
          .equ    TCNT1L	=$2C
          .def 	ZH     	=r31
          .def 	ZL     	=r30
         
          	.org	$0000
000000 c00e      	rjmp	main
          	.org	$009
000009 c024      	rjmp	t0_ovf
         	
00000a      tab:	.db	$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f
00000a 063f
00000b 4f5b
00000c 6d66
00000d 077d
00000e 6f7f
         
00000f e002      main:	ldi	r16,$02			;栈指针置初值
000010 bf0e      	out	sph,r16
000011 e50f      	ldi	r16,$5f
000012 bf0d      	out	spl,r16
000013 e000      	ldi	r16,0
000014 2ec0      	mov	r12,r16
000015 2ed0      	mov	r13,r16
000016 ef0f      	ldi	r16,$ff			;定义C口、D口为输出
000017 bb01      	out	DDRD,r16
000018 bb04      	out	DDRC,r16
000019 e001      	ldi	r16,$01			;允许T/C0中断
00001a bf09      	out	TIMSK,r16
00001b e004      	ldi	r16,$04			;定时器8分频
00001c bf03      	out	TCCR0,r16
00001d e006      	ldi	r16,6			;定时器0置初值6
00001e bf02      	out	TCNT0,r16
00001f 98b9      	cbi	DDRB,1			;PB1定义为输入口
000020 e086      	ldi	r24,$06			;T1(PB1)引脚每一次上升沿计数1次
000021 bd8e      	out	TCCR1B,r24
000022 e7bd      	ldi	r27,125
000023 9478      	sei
         	
000024 2d0a      loop:	mov	r16,r10			;将TCNT1的增量值送r17、r16
000025 2d1b      	mov	r17,r11
000026 d017      	rcall	btd			;调二转十子程序
000027 2f64      	mov	r22,r20
000028 2f53      	mov	r21,r19
000029 2f42      	mov	r20,r18
00002a 2f31      	mov	r19,r17
00002b 2f20      	mov	r18,r16
00002c d02c      	rcall	smiao			;调动态扫描显示子程序
00002d cff6      	rjmp	loop
         	
00002e b61f      t0_ovf:	in	r1,sreg			;保护现场
00002f e086      	ldi	r24,6			;T/C0送初值
000030 bf82      	out	TCNT0,r24
000031 50b1      	subi	r27,1			;中断计数减1
000032 f449      	brne	tt			;不为0,则返回
000033 b4ac      	in	r10,TCNT1L		;读TCNT1计数值到r11、r10
000034 b4bd      	in	r11,TCNT1H
000035 92af      	push	r10			;入栈保存
000036 92bf      	push	r11
000037 18ac      	sub	r10,r12			;求2次T/C1计数差值
000038 08bd      	sbc	r11,r13
000039 90df      	pop	r13			;将本次T/C1计数值放入r13、r12中
00003a 90cf      	pop	r12			;为下次计算计数器差值做准备
00003b e7bd      	ldi	r27,125
00003c be1f      tt:	out	sreg,r1			;恢复现场
00003d 9518      	reti
         	
00003e ef4f      btd:	ser	r20			;r20先送-1
00003f 9543      btd_1:	inc	r20			;r20增1
000040 5100      	subi	r16,low(10000)		;(r17:r16)-10000
000041 4217      	sbci	r17,high(10000)
000042 f7e0      	brcc	btd_1			;够减则返回btd_1
000043 5f00      	subi	r16,low(-10000)		;不够减+10000,恢复余数
000044 4d18      	sbci	r17,high(-10000)
000045 ef3f      	ser	r19			;r19先送-1
000046 9533      btd_2:	inc	r19			;r19增1
000047 5e08      	subi	r16,low(1000)		;(r17:r16)-1000
000048 4013      	sbci	r17,high(1000)
000049 f7e0      	brcc	btd_2			;够减则返回btd_2
00004a 5108      	subi	r16,low(-1000)		;不够减+1000,恢复余数
00004b 4f1c      	sbci	r17,high(-1000)
00004c ef2f      	ser	r18			;r18先送-1
00004d 9523      btd_3:	inc	r18			;r18增1
00004e 5604      	subi	r16,low(100)		;(r17:r16)-100
00004f 4010      	sbci	r17,high(100)
000050 f7e0      	brcc	btd_3			;够减则返回btd_3
000051 590c      	subi	r16,low(-100)		;不够减+100,恢复余数
000052 4f1f      	sbci	r17,high(-100)
000053 ef1f      	ser	r17			;r17先送-1
000054 9513      btd_4:	inc	r17			;r17增1
000055 500a      	subi	r16,10			;(r17:r16)-10
000056 f7e8      	brcc	btd_4			;够减则返回btd_4
000057 5f06      	subi	r16,-10			;不够减+10,恢复余数
000058 9508      	ret
         
000059 ef0e      smiao:	ldi	r16,$fe			;送个位位线
00005a bb02      	out	PORTD,r16
00005b 2f72      	mov	r23,r18			;将个位的BCD码送r23
00005c d020      	rcall	cqb			;查7段码,送B口输出
00005d d015      	rcall	t1ms			;延时1ms
00005e ef0d      	ldi	r16,$fd			;送十位位线
00005f bb02      	out	PORTD,r16
000060 2f73      	mov	r23,r19			;将十位的BCD码送r23
000061 d01b      	rcall	cqb			;查7段码,送B口输出
000062 d010      	rcall	t1ms			;延时1ms
000063 ef0b      	ldi	r16,$fb			;送百位位线
000064 bb02      	out	PORTD,r16
000065 2f74      	mov	r23,r20			;将百位的BCD码送r23
000066 d016      	rcall	cqb			;查7段码,送B口输出
000067 d00b      	rcall	t1ms			;延时1ms
000068 ef07      	ldi	r16,$f7			;送千位位线
000069 bb02      	out	PORTD,r16
00006a 2f75      	mov	r23,r21			;将千位的BCD码送r23
00006b d011      	rcall	cqb			;查7段码,送B口输出
00006c d006      	rcall	t1ms			;延时1ms
00006d ee0f      	ldi	r16,$ef			;送万位位线
00006e bb02      	out	PORTD,r16
00006f 2f76      	mov	r23,r22			;将万位的BCD码送r23
000070 d00c      	rcall	cqb			;查7段码,送B口输出
000071 d001      	rcall	t1ms			;延时1ms
000072 9508      	ret
         
000073 e685      t1ms:	ldi	r24,101			;延时1ms子程序
000074 938f      	push	r24
000075 938f      del2:	push	r24
000076 958a      del3:	dec	r24
000077 f7f1      	brne	del3
000078 918f      	pop	r24
000079 958a      	dec	r24
00007a f7d1      	brne	del2
00007b 918f      	pop	r24
00007c 9508      	ret
         	
00007d e0f0      cqb:	ldi	ZH,high(tab*2)		;查个位7段码
00007e e1e4      	ldi	ZL,low(tab*2)
00007f 0fe7      	add	ZL,r23
000080 95c8      	lpm
000081 ba05      	out	PORTC,r0
000082 9508      	ret
Assembly complete with no errors.

⌨️ 快捷键说明

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