📄 sg8.sdi
字号:
,,,.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
000012,C024,, rjmp t0_ovf
,,,
000014,0000,, .db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f
,,f,f
,,b,b
,,,6
,,d,d
,,f,f
,,,
00001E,E002,main,main: ldi r16,$02 ;栈指针置初值
000020,BF0E,, out sph,r16
000022,E50F,, ldi r16,$5f
000024,BF0D,, out spl,r16
000026,E000,, ldi r16,0
000028,2EC0,, mov r12,r16
00002A,2ED0,, mov r13,r16
00002C,EF0F,, ldi r16,$ff ;定义C口、D口为输出
00002E,BB01,, out DDRD,r16
000030,BB04,, out DDRC,r16
000032,E001,, ldi r16,$01 ;允许T/C0中断
000034,BF09,, out TIMSK,r16
000036,E004,, ldi r16,$04 ;定时器8分频
000038,BF03,, out TCCR0,r16
00003A,E006,, ldi r16,6 ;定时器0置初值6
00003C,BF02,, out TCNT0,r16
00003E,98B9,, cbi DDRB,1 ;PB1定义为输入口
000040,E086,, ldi r24,$06 ;T1(PB1)引脚每一次上升沿计数1次
000042,BD8E,, out TCCR1B,r24
000044,E7BD,, ldi r27,125
000046,9478,, sei
,,,
000048,2D0A,loop,loop: mov r16,r10 ;将TCNT1的增量值送r17、r16
00004A,2D1B,, mov r17,r11
00004C,D017,, rcall btd ;调二转十子程序
00004E,2F64,, mov r22,r20
000050,2F53,, mov r21,r19
000052,2F42,, mov r20,r18
000054,2F31,, mov r19,r17
000056,2F20,, mov r18,r16
000058,D02C,, rcall smiao ;调动态扫描显示子程序
00005A,CFF6,, rjmp loop
,,,
00005C,B61F,t0_ovf,t0_ovf: in r1,sreg ;保护现场
00005E,E086,, ldi r24,6 ;T/C0送初值
000060,BF82,, out TCNT0,r24
000062,50B1,, subi r27,1 ;中断计数减1
000064,F449,, brne tt ;不为0,则返回
000066,B4AC,, in r10,TCNT1L ;读TCNT1计数值到r11、r10
000068,B4BD,, in r11,TCNT1H
00006A,92AF,, push r10 ;入栈保存
00006C,92BF,, push r11
00006E,18AC,, sub r10,r12 ;求2次T/C1计数差值
000070,08BD,, sbc r11,r13
000072,90DF,, pop r13 ;将本次T/C1计数值放入r13、r12中
000074,90CF,, pop r12 ;为下次计算计数器差值做准备
000076,E7BD,, ldi r27,125
000078,BE1F,tt,tt: out sreg,r1 ;恢复现场
00007A,9518,, reti
,,,
00007C,EF4F,btd,btd: ser r20 ;r20先送-1
00007E,9543,btd_1,btd_1: inc r20 ;r20增1
000080,5100,, subi r16,low(10000) ;(r17:r16)-10000
000082,4217,, sbci r17,high(10000)
000084,F7E0,, brcc btd_1 ;够减则返回btd_1
000086,5F00,, subi r16,low(-10000) ;不够减+10000,恢复余数
000088,4D18,, sbci r17,high(-10000)
00008A,EF3F,, ser r19 ;r19先送-1
00008C,9533,btd_2,btd_2: inc r19 ;r19增1
00008E,5E08,, subi r16,low(1000) ;(r17:r16)-1000
000090,4013,, sbci r17,high(1000)
000092,F7E0,, brcc btd_2 ;够减则返回btd_2
000094,5108,, subi r16,low(-1000) ;不够减+1000,恢复余数
000096,4F1C,, sbci r17,high(-1000)
000098,EF2F,, ser r18 ;r18先送-1
00009A,9523,btd_3,btd_3: inc r18 ;r18增1
00009C,5604,, subi r16,low(100) ;(r17:r16)-100
00009E,4010,, sbci r17,high(100)
0000A0,F7E0,, brcc btd_3 ;够减则返回btd_3
0000A2,590C,, subi r16,low(-100) ;不够减+100,恢复余数
0000A4,4F1F,, sbci r17,high(-100)
0000A6,EF1F,, ser r17 ;r17先送-1
0000A8,9513,btd_4,btd_4: inc r17 ;r17增1
0000AA,500A,, subi r16,10 ;(r17:r16)-10
0000AC,F7E8,, brcc btd_4 ;够减则返回btd_4
0000AE,5F06,, subi r16,-10 ;不够减+10,恢复余数
0000B0,9508,, ret
,,,
0000B2,EF0E,smiao,smiao: ldi r16,$fe ;送个位位线
0000B4,BB02,, out PORTD,r16
0000B6,2F72,, mov r23,r18 ;将个位的BCD码送r23
0000B8,D020,, rcall cqb ;查7段码,送B口输出
0000BA,D015,, rcall t1ms ;延时1ms
0000BC,EF0D,, ldi r16,$fd ;送十位位线
0000BE,BB02,, out PORTD,r16
0000C0,2F73,, mov r23,r19 ;将十位的BCD码送r23
0000C2,D01B,, rcall cqb ;查7段码,送B口输出
0000C4,D010,, rcall t1ms ;延时1ms
0000C6,EF0B,, ldi r16,$fb ;送百位位线
0000C8,BB02,, out PORTD,r16
0000CA,2F74,, mov r23,r20 ;将百位的BCD码送r23
0000CC,D016,, rcall cqb ;查7段码,送B口输出
0000CE,D00B,, rcall t1ms ;延时1ms
0000D0,EF07,, ldi r16,$f7 ;送千位位线
0000D2,BB02,, out PORTD,r16
0000D4,2F75,, mov r23,r21 ;将千位的BCD码送r23
0000D6,D011,, rcall cqb ;查7段码,送B口输出
0000D8,D006,, rcall t1ms ;延时1ms
0000DA,EE0F,, ldi r16,$ef ;送万位位线
0000DC,BB02,, out PORTD,r16
0000DE,2F76,, mov r23,r22 ;将万位的BCD码送r23
0000E0,D00C,, rcall cqb ;查7段码,送B口输出
0000E2,D001,, rcall t1ms ;延时1ms
0000E4,9508,, ret
,,,
0000E6,E685,t1ms,t1ms: ldi r24,101 ;延时1ms子程序
0000E8,938F,, push r24
0000EA,938F,del2,del2: push r24
0000EC,958A,del3,del3: dec r24
0000EE,F7F1,, brne del3
0000F0,918F,, pop r24
0000F2,958A,, dec r24
0000F4,F7D1,, brne del2
0000F6,918F,, pop r24
0000F8,9508,, ret
,,,
0000FA,E0F0,cqb,cqb: ldi ZH,high(tab*2) ;查个位7段码
0000FC,E1E4,, ldi ZL,low(tab*2)
0000FE,0FE7,, add ZL,r23
000100,95C8,, lpm
000102,BA05,, out PORTC,r0
000104,9508,, ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -