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

📄 sg8.sdi

📁 the practice of proteus and avr
💻 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 + -