📄 sg15.sdi
字号:
,,,.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
,,,
000002,0000,, .db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f
,,f,f
,,b,b
,,,6
,,d,d
,,f,f
,,,
00000C,E002,reset,reset: ldi r16,$02 ;栈指针置初值
00000E,BF0E,, out sph,r16
000010,E50F,, ldi r16,$5f
000012,BF0D,, out spl,r16
000014,EF0F,, ldi r16,$ff ;定义PB、PD为输出口
000016,BB07,, out DDRB,r16
000018,BB01,, out DDRD,r16
00001A,E000,, ldi r16,$00 ;定义PA口为输入口,不带内部上拉电阻
00001C,BB0A,, out DDRA,r16
00001E,E000,, ldi r16,$00
000020,BB0B,, out PORTA,r16
000022,E007,, ldi r16,$07 ;先第7路ADC
000024,B907,, out ADMUX,r16
000026,EE25,, ldi r18,$e5 ;允许ADC,启动ADC,自由模式
000028,B926,, out ADCSR,r18 ;64分频作A/D时钟
00002A,D058,, rcall t1ms
,,,
00002C,B104,aa,aa: in r16,ADCL ;读A/D结果放入r17、r16中
00002E,B115,, in r17,ADCH
000030,E026,, ldi r18,$06 ;改变ADMUX为第6路
000032,B927,, out ADMUX,r18
000034,D018,, rcall btd ;调二转十子程序
000036,E067,, ldi r22,7 ;万位显示路号7
000038,2F53,, mov r21,r19 ;4位ADC结果送显示缓冲区
00003A,2F42,, mov r20,r18
00003C,2F31,, mov r19,r17
00003E,2F20,, mov r18,r16
000040,EC18,, ldi r17,200 ;每一路A/D扫描200次,恰好1s
,,,
000042,D02C,bb,bb: rcall smiao ;调动态扫描子程序
000044,951A,, dec r17
000046,F7E9,, brne bb
000048,B104,, in r16,ADCL ;读A/D结果放入r17、r16中
00004A,B115,, in r17,ADCH
00004C,E027,, ldi r18,$07 ;改变ADMUX为第7路
00004E,B927,, out ADMUX,r18
000050,D00A,, rcall btd
000052,E066,, ldi r22,6 ;万位显示路号6
000054,2F53,, mov r21,r19 ;4位ADC结果送显示缓冲区
000056,2F42,, mov r20,r18
000058,2F31,, mov r19,r17
00005A,2F20,, mov r18,r16
00005C,EC18,, ldi r17,200 ;每一路A/D扫描200次,恰好1s
,,,
00005E,D01E,cc,cc: rcall smiao ;调动态扫描子程序
000060,951A,, dec r17
000062,F7E9,, brne cc
000064,CFE3,, rjmp aa
,,,
000066,EF4F,btd,btd: ser r20 ;r20先送-1
000068,9543,btd_1,btd_1: inc r20 ;r20增1
00006A,5100,, subi r16,low(10000) ;(r17:r16)-10000
00006C,4217,, sbci r17,high(10000)
00006E,F7E0,, brcc btd_1 ;够减则返回btd_1
000070,5F00,, subi r16,low(-10000) ;不够减+10000,恢复余数
000072,4D18,, sbci r17,high(-10000)
000074,EF3F,, ser r19 ;r19先送-1
000076,9533,btd_2,btd_2: inc r19 ;r19增1
000078,5E08,, subi r16,low(1000) ;(r17:r16)-1000
00007A,4013,, sbci r17,high(1000)
00007C,F7E0,, brcc btd_2 ;够减则返回btd_2
00007E,5108,, subi r16,low(-1000) ;不够减+1000,恢复余数
000080,4F1C,, sbci r17,high(-1000)
000082,EF2F,, ser r18 ;r18先送-1
000084,9523,btd_3,btd_3: inc r18 ;r18增1
000086,5604,, subi r16,low(100) ;(r17:r16)-100
000088,4010,, sbci r17,high(100)
00008A,F7E0,, brcc btd_3 ;够减则返回btd_3
00008C,590C,, subi r16,low(-100) ;不够减+100,恢复余数
00008E,4F1F,, sbci r17,high(-100)
000090,EF1F,, ser r17 ;r17先送-1
000092,9513,btd_4,btd_4: inc r17 ;r17增1
000094,500A,, subi r16,10 ;(r17:r16)-10
000096,F7E8,, brcc btd_4 ;够减则返回btd_4
000098,5F06,, subi r16,-10 ;不够减+10,恢复余数
00009A,9508,, ret
,,,
00009C,EF0E,smiao,smiao: ldi r16,$fe ;送个位位线
00009E,BB02,, out PORTD,r16
0000A0,2F72,, mov r23,r18 ;将个位的BCD码送r23
0000A2,D016,, rcall cqb ;查7段码,送B口输出
0000A4,D01B,, rcall t1ms ;延时1ms
0000A6,EF0D,, ldi r16,$fd ;送十位位线
0000A8,BB02,, out PORTD,r16
0000AA,2F73,, mov r23,r19 ;将十位的BCD码送r23
0000AC,D011,, rcall cqb ;查7段码,送B口输出
0000AE,D016,, rcall t1ms ;延时1ms
0000B0,EF0B,, ldi r16,$fb ;送百位位线
0000B2,BB02,, out PORTD,r16
0000B4,2F74,, mov r23,r20 ;将百位的BCD码送r23
0000B6,D00C,, rcall cqb ;查7段码,送B口输出
0000B8,D011,, rcall t1ms ;延时1ms
0000BA,EF07,, ldi r16,$f7 ;送千位位线
0000BC,BB02,, out PORTD,r16
0000BE,2F75,, mov r23,r21 ;将千位的BCD码送r23
0000C0,D007,, rcall cqb ;查7段码,送B口输出
0000C2,D00C,, rcall t1ms ;延时1ms
0000C4,EE0F,, ldi r16,$ef ;送万位位线
0000C6,BB02,, out PORTD,r16
0000C8,2F76,, mov r23,r22 ;将万位的BCD码送r23
0000CA,D002,, rcall cqb ;查7段码,送B口输出
0000CC,D007,, rcall t1ms ;延时1ms
0000CE,9508,, ret
,,,
0000D0,E0F0,cqb,cqb: ldi ZH,high(tab*2) ;7段码的首址给Z
0000D2,E0E2,, ldi ZL,low(tab*2)
0000D4,0FE7,, add ZL,r23 ;首地址+偏移量
0000D6,95C8,, lpm ;查表送B口输出
0000D8,BA08,, out PORTB,r0
0000DA,9508,, ret
,,,
0000DC,E685,t1ms,t1ms: ldi r24,101 ;延时1ms子程序
0000DE,938F,, push r24
0000E0,938F,del2,del2: push r24
0000E2,958A,del3,del3: dec r24
0000E4,F7F1,, brne del3
0000E6,918F,, pop r24
0000E8,958A,, dec r24
0000EA,F7D1,, brne del2
0000EC,918F,, pop r24
0000EE,9508,, ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -