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

📄 sg15.lst

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

AVRASM ver. 1.30  sg15.ASM Thu Apr 19 10:39:31 2007


          .device AT90S8535
          .equ    sph    	=$3E
          .equ    spl    	=$3D
          .equ	PORTA	=$1B
          .equ	DDRA	=$1A
          .equ    PINA    =$19
          .equ	PORTB	=$18
          .equ	DDRB	=$17
          .equ    PINB    =$16
          .equ	PORTD	=$12
          .equ	DDRD	=$11
          .equ    PIND    =$10
          .equ    ADMUX   =$07
          .equ    ADCSR   =$06
          .equ    ADCH    =$05
          .equ    ADCL    =$04
          .def 	ZH     	=r31
          .def 	ZL     	=r30
         
          	.org	$0000
000000 c005      	rjmp	reset
         	
000001      tab:	.db	$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f
000001 063f
000002 4f5b
000003 6d66
000004 077d
000005 6f7f
         
000006 e002      reset:	ldi	r16,$02			;栈指针置初值
000007 bf0e      	out	sph,r16
000008 e50f      	ldi	r16,$5f
000009 bf0d      	out	spl,r16
00000a ef0f      	ldi	r16,$ff			;定义PB、PD为输出口
00000b bb07      	out	DDRB,r16
00000c bb01      	out	DDRD,r16
00000d e000      	ldi	r16,$00			;定义PA口为输入口,不带内部上拉电阻
00000e bb0a      	out	DDRA,r16
00000f e000      	ldi	r16,$00
000010 bb0b      	out	PORTA,r16
000011 e007      	ldi	r16,$07			;先第7路ADC
000012 b907      	out	ADMUX,r16
000013 ee25      	ldi	r18,$e5			;允许ADC,启动ADC,自由模式
000014 b926      	out	ADCSR,r18		;64分频作A/D时钟
000015 d058      	rcall	t1ms
         	
000016 b104      aa:	in	r16,ADCL		;读A/D结果放入r17、r16中
000017 b115      	in	r17,ADCH
000018 e026      	ldi	r18,$06			;改变ADMUX为第6路
000019 b927      	out	ADMUX,r18
00001a d018      	rcall	btd			;调二转十子程序
00001b e067      	ldi	r22,7			;万位显示路号7
00001c 2f53      	mov	r21,r19			;4位ADC结果送显示缓冲区
00001d 2f42      	mov	r20,r18
00001e 2f31      	mov	r19,r17
00001f 2f20      	mov	r18,r16
000020 ec18      	ldi	r17,200			;每一路A/D扫描200次,恰好1s
         	
000021 d02c      bb:	rcall	smiao			;调动态扫描子程序
000022 951a      	dec	r17
000023 f7e9      	brne	bb
000024 b104      	in	r16,ADCL		;读A/D结果放入r17、r16中
000025 b115      	in	r17,ADCH
000026 e027      	ldi	r18,$07			;改变ADMUX为第7路
000027 b927      	out	ADMUX,r18
000028 d00a      	rcall	btd
000029 e066      	ldi	r22,6			;万位显示路号6
00002a 2f53      	mov	r21,r19			;4位ADC结果送显示缓冲区
00002b 2f42      	mov	r20,r18
00002c 2f31      	mov	r19,r17
00002d 2f20      	mov	r18,r16
00002e ec18      	ldi	r17,200			;每一路A/D扫描200次,恰好1s
         	
00002f d01e      cc:	rcall	smiao			;调动态扫描子程序
000030 951a      	dec	r17
000031 f7e9      	brne	cc
000032 cfe3      	rjmp	aa
         	
000033 ef4f      btd:	ser	r20			;r20先送-1
000034 9543      btd_1:	inc	r20			;r20增1
000035 5100      	subi	r16,low(10000)		;(r17:r16)-10000
000036 4217      	sbci	r17,high(10000)
000037 f7e0      	brcc	btd_1			;够减则返回btd_1
000038 5f00      	subi	r16,low(-10000)		;不够减+10000,恢复余数
000039 4d18      	sbci	r17,high(-10000)
00003a ef3f      	ser	r19			;r19先送-1
00003b 9533      btd_2:	inc	r19			;r19增1
00003c 5e08      	subi	r16,low(1000)		;(r17:r16)-1000
00003d 4013      	sbci	r17,high(1000)
00003e f7e0      	brcc	btd_2			;够减则返回btd_2
00003f 5108      	subi	r16,low(-1000)		;不够减+1000,恢复余数
000040 4f1c      	sbci	r17,high(-1000)
000041 ef2f      	ser	r18			;r18先送-1
000042 9523      btd_3:	inc	r18			;r18增1
000043 5604      	subi	r16,low(100)		;(r17:r16)-100
000044 4010      	sbci	r17,high(100)
000045 f7e0      	brcc	btd_3			;够减则返回btd_3
000046 590c      	subi	r16,low(-100)		;不够减+100,恢复余数
000047 4f1f      	sbci	r17,high(-100)
000048 ef1f      	ser	r17			;r17先送-1
000049 9513      btd_4:	inc	r17			;r17增1
00004a 500a      	subi	r16,10			;(r17:r16)-10
00004b f7e8      	brcc	btd_4			;够减则返回btd_4
00004c 5f06      	subi	r16,-10			;不够减+10,恢复余数
00004d 9508      	ret
         	
00004e ef0e      smiao:	ldi	r16,$fe			;送个位位线
00004f bb02      	out	PORTD,r16
000050 2f72      	mov	r23,r18			;将个位的BCD码送r23
000051 d016      	rcall	cqb			;查7段码,送B口输出
000052 d01b      	rcall	t1ms			;延时1ms
000053 ef0d      	ldi	r16,$fd			;送十位位线
000054 bb02      	out	PORTD,r16
000055 2f73      	mov	r23,r19			;将十位的BCD码送r23
000056 d011      	rcall	cqb			;查7段码,送B口输出
000057 d016      	rcall	t1ms			;延时1ms
000058 ef0b      	ldi	r16,$fb			;送百位位线
000059 bb02      	out	PORTD,r16
00005a 2f74      	mov	r23,r20			;将百位的BCD码送r23
00005b d00c      	rcall	cqb			;查7段码,送B口输出
00005c d011      	rcall	t1ms			;延时1ms
00005d ef07      	ldi	r16,$f7			;送千位位线
00005e bb02      	out	PORTD,r16
00005f 2f75      	mov	r23,r21			;将千位的BCD码送r23
000060 d007      	rcall	cqb			;查7段码,送B口输出
000061 d00c      	rcall	t1ms			;延时1ms
000062 ee0f      	ldi	r16,$ef			;送万位位线
000063 bb02      	out	PORTD,r16
000064 2f76      	mov	r23,r22			;将万位的BCD码送r23
000065 d002      	rcall	cqb			;查7段码,送B口输出
000066 d007      	rcall	t1ms			;延时1ms
000067 9508      	ret
         	
000068 e0f0      cqb:	ldi	ZH,high(tab*2)		;7段码的首址给Z
000069 e0e2      	ldi	ZL,low(tab*2)
00006a 0fe7      	add	ZL,r23			;首地址+偏移量
00006b 95c8      	lpm				;查表送B口输出
00006c ba08      	out	PORTB,r0
00006d 9508      	ret
         	
00006e e685      t1ms:	ldi	r24,101			;延时1ms子程序
00006f 938f      	push	r24
000070 938f      del2:	push	r24
000071 958a      del3:	dec	r24
000072 f7f1      	brne	del3
000073 918f      	pop	r24
000074 958a      	dec	r24
000075 f7d1      	brne	del2
000076 918f      	pop	r24
000077 9508      	ret
Assembly complete with no errors.

⌨️ 快捷键说明

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