📄 sg15.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 + -