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

📄 sg15.sdi

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