atmega16_8led.lis

来自「AVR单片机来驱动8位数码管」· LIS 代码 · 共 731 行 · 第 1/2 页

LIS
731
字号
 0108           ;    temp=count%10;
 0108           ;    display_buff[i]=tab[temp];
 0108           ;    count=count/10; 
 0108           ;    }
 0108           ; }
 0108           ; //发送一个字节
 0108           ; void write_595 (uchar data)
 0108           ; {
 0108                   .dbline 61
 0108           ;  uchar i,temp;
 0108           ;  temp=data;
 0108 402F              mov R20,R16
 010A                   .dbline 62
 010A           ;  for (i=0;i<8;i++)
 010A 6627              clr R22
 010C 09C0              xjmp L28
 010E           L25:
 010E                   .dbline 63
 010E           ;  {
 010E                   .dbline 64
 010E           ;   CLK_0;
 010E D898              cbi 0x1b,0
 0110                   .dbline 65
 0110           ;   if (temp&0x80)DAT_1;
 0110 47FF              sbrs R20,7
 0112 02C0              rjmp L29
 0114                   .dbline 65
 0114 DA9A              sbi 0x1b,2
 0116 01C0              xjmp L30
 0118           L29:
 0118                   .dbline 66
 0118           ;   else DAT_0;
 0118 DA98              cbi 0x1b,2
 011A           L30:
 011A                   .dbline 67
 011A 440F              lsl R20
 011C                   .dbline 68
 011C D89A              sbi 0x1b,0
 011E                   .dbline 69
 011E           L26:
 011E                   .dbline 62
 011E 6395              inc R22
 0120           L28:
 0120                   .dbline 62
 0120 6830              cpi R22,8
 0122 A8F3              brlo L25
 0124                   .dbline -2
 0124           L24:
 0124 0E940000          xcall pop_gset2
 0128                   .dbline 0 ; func end
 0128 0895              ret
 012A                   .dbsym r temp 20 c
 012A                   .dbsym r i 22 c
 012A                   .dbsym r data 16 c
 012A                   .dbend
 012A                   .dbfunc e out_595 _out_595 fV
                        .even
 012A           _out_595::
 012A                   .dbline -1
 012A                   .dbline 73
 012A           ;   temp<<=1;
 012A           ;   CLK_1;
 012A           ;  }
 012A           ; }
 012A           ; 
 012A           ; void out_595 ()
 012A           ; {
 012A                   .dbline 74
 012A           ;  RCLK_0;
 012A D998              cbi 0x1b,1
 012C                   .dbline 75
 012C           ;  RCLK_1;
 012C D99A              sbi 0x1b,1
 012E                   .dbline -2
 012E           L31:
 012E                   .dbline 0 ; func end
 012E 0895              ret
 0130                   .dbend
 0130                   .dbfunc e display _display fV
 0130           ;              i -> R20
                        .even
 0130           _display::
 0130 0E940000          xcall push_gset1
 0134                   .dbline -1
 0134                   .dbline 80
 0134           ; }
 0134           ; 
 0134           ; //发送并显示四个字节
 0134           ; void display ()
 0134           ; {
 0134                   .dbline 82
 0134           ;  uchar i;
 0134           ;  for (i=0;i<4;i++)
 0134 4427              clr R20
 0136 15C0              xjmp L36
 0138           L33:
 0138                   .dbline 83
 0138                   .dbline 84
 0138 80E0              ldi R24,<_seg
 013A 90E0              ldi R25,>_seg
 013C E42F              mov R30,R20
 013E FF27              clr R31
 0140 E80F              add R30,R24
 0142 F91F              adc R31,R25
 0144 0491              lpm R16,Z
 0146 DEDF              xcall _write_595
 0148                   .dbline 85
 0148 80E0              ldi R24,<_display_buff
 014A 90E0              ldi R25,>_display_buff
 014C E42F              mov R30,R20
 014E FF27              clr R31
 0150 E80F              add R30,R24
 0152 F91F              adc R31,R25
 0154 0081              ldd R16,z+0
 0156 D6DF              xcall _write_595
 0158                   .dbline 86
 0158 E8DF              xcall _out_595
 015A                   .dbline 87
 015A 02E0              ldi R16,2
 015C 10E0              ldi R17,0
 015E 6BDF              xcall _delay_nms
 0160                   .dbline 88
 0160           L34:
 0160                   .dbline 82
 0160 4395              inc R20
 0162           L36:
 0162                   .dbline 82
 0162 4430              cpi R20,4
 0164 48F3              brlo L33
 0166                   .dbline -2
 0166           L32:
 0166 0E940000          xcall pop_gset1
 016A                   .dbline 0 ; func end
 016A 0895              ret
 016C                   .dbsym r i 20 c
 016C                   .dbend
 016C                   .dbfunc e display_off _display_off fV
 016C           ;              i -> R20
                        .even
 016C           _display_off::
 016C 0E940000          xcall push_gset1
 0170                   .dbline -1
 0170                   .dbline 92
 0170           ;  {
 0170           ;   write_595 (seg[i]);
 0170           ;   write_595 (display_buff[i]);
 0170           ;   out_595 ();
 0170           ;   delay_nms (2);
 0170           ;  }
 0170           ; }
 0170           ; 
 0170           ; void display_off ()
 0170           ; {
 0170                   .dbline 94
 0170           ;  uchar i;
 0170           ;  for (i=0;i<4;i++)
 0170 4427              clr R20
 0172 15C0              xjmp L41
 0174           L38:
 0174                   .dbline 95
 0174                   .dbline 96
 0174 80E0              ldi R24,<_seg
 0176 90E0              ldi R25,>_seg
 0178 E42F              mov R30,R20
 017A FF27              clr R31
 017C E80F              add R30,R24
 017E F91F              adc R31,R25
 0180 0491              lpm R16,Z
 0182 C0DF              xcall _write_595
 0184                   .dbline 97
 0184 80E0              ldi R24,<_off
 0186 90E0              ldi R25,>_off
 0188 E42F              mov R30,R20
 018A FF27              clr R31
 018C E80F              add R30,R24
 018E F91F              adc R31,R25
 0190 0491              lpm R16,Z
 0192 B8DF              xcall _write_595
 0194                   .dbline 98
 0194 CADF              xcall _out_595
 0196                   .dbline 99
 0196 02E0              ldi R16,2
 0198 10E0              ldi R17,0
 019A 4DDF              xcall _delay_nms
 019C                   .dbline 100
 019C           L39:
 019C                   .dbline 94
 019C 4395              inc R20
 019E           L41:
 019E                   .dbline 94
 019E 4430              cpi R20,4
 01A0 48F3              brlo L38
 01A2                   .dbline -2
 01A2           L37:
 01A2 0E940000          xcall pop_gset1
 01A6                   .dbline 0 ; func end
 01A6 0895              ret
 01A8                   .dbsym r i 20 c
 01A8                   .dbend
 01A8                   .dbfunc e display_on _display_on fV
 01A8           ;              i -> R20
                        .even
 01A8           _display_on::
 01A8 0E940000          xcall push_gset1
 01AC                   .dbline -1
 01AC                   .dbline 104
 01AC           ;  {
 01AC           ;   write_595 (seg[i]);
 01AC           ;   write_595 (off[i]);
 01AC           ;   out_595 ();
 01AC           ;   delay_nms (2);
 01AC           ;  }
 01AC           ; }
 01AC           ; 
 01AC           ; void display_on ()
 01AC           ; {
 01AC                   .dbline 106
 01AC           ;  uchar i;
 01AC           ;  for (i=0;i<4;i++)
 01AC 4427              clr R20
 01AE 15C0              xjmp L46
 01B0           L43:
 01B0                   .dbline 107
 01B0                   .dbline 108
 01B0 80E0              ldi R24,<_seg
 01B2 90E0              ldi R25,>_seg
 01B4 E42F              mov R30,R20
 01B6 FF27              clr R31
 01B8 E80F              add R30,R24
 01BA F91F              adc R31,R25
 01BC 0491              lpm R16,Z
 01BE A2DF              xcall _write_595
 01C0                   .dbline 109
 01C0 80E0              ldi R24,<_on
 01C2 90E0              ldi R25,>_on
 01C4 E42F              mov R30,R20
 01C6 FF27              clr R31
 01C8 E80F              add R30,R24
 01CA F91F              adc R31,R25
 01CC 0491              lpm R16,Z
 01CE 9ADF              xcall _write_595
 01D0                   .dbline 110
 01D0 ACDF              xcall _out_595
 01D2                   .dbline 111
 01D2 02E0              ldi R16,2
 01D4 10E0              ldi R17,0
 01D6 2FDF              xcall _delay_nms
 01D8                   .dbline 112
 01D8           L44:
 01D8                   .dbline 106
 01D8 4395              inc R20
 01DA           L46:
 01DA                   .dbline 106
 01DA 4430              cpi R20,4
 01DC 48F3              brlo L43
 01DE                   .dbline -2
 01DE           L42:
 01DE 0E940000          xcall pop_gset1
 01E2                   .dbline 0 ; func end
 01E2 0895              ret
 01E4                   .dbsym r i 20 c
 01E4                   .dbend
 01E4                   .dbfunc e main _main fV
                        .even
 01E4           _main::
 01E4                   .dbline -1
 01E4                   .dbline 116
 01E4           ;  {
 01E4           ;   write_595 (seg[i]);
 01E4           ;   write_595 (on[i]);
 01E4           ;   out_595 ();
 01E4           ;   delay_nms (2);
 01E4           ;  }
 01E4           ; }
 01E4           ; 
 01E4           ; void main ()
 01E4           ; {
 01E4                   .dbline 117
 01E4           ;  init_devices();
 01E4 3CDF              xcall _init_devices
 01E6                   .dbline 118
 01E6           ;  number=0;
 01E6 2224              clr R2
 01E8 3324              clr R3
 01EA 30920100          sts _number+1,R3
 01EE 20920000          sts _number,R2
 01F2 36C0              xjmp L49
 01F4           L48:
 01F4                   .dbline 120
 01F4           ;  while (1)
 01F4           ;  {
 01F4                   .dbline 121
 01F4           ;   number++;
 01F4 80910000          lds R24,_number
 01F8 90910100          lds R25,_number+1
 01FC 0196              adiw R24,1
 01FE 90930100          sts _number+1,R25
 0202 80930000          sts _number,R24
 0206                   .dbline 122
 0206           ;   BINtoBCD(number);
 0206 1C01              movw R2,R24
 0208 4424              clr R4
 020A 5524              clr R5
 020C 8101              movw R16,R2
 020E 9201              movw R18,R4
 0210 2EDF              xcall _BINtoBCD
 0212                   .dbline 123
 0212           ;   for (i=0;i<125;i++) 
 0212 2224              clr R2
 0214 3324              clr R3
 0216 30920300          sts _i+1,R3
 021A 20920200          sts _i,R2
 021E 0AC0              xjmp L54
 0220           L51:
 0220                   .dbline 124
 0220 87DF              xcall _display
 0222           L52:
 0222                   .dbline 123
 0222 80910200          lds R24,_i
 0226 90910300          lds R25,_i+1
 022A 0196              adiw R24,1
 022C 90930300          sts _i+1,R25
 0230 80930200          sts _i,R24
 0234           L54:
 0234                   .dbline 123
 0234 80910200          lds R24,_i
 0238 90910300          lds R25,_i+1
 023C 8D37              cpi R24,125
 023E E0E0              ldi R30,0
 0240 9E07              cpc R25,R30
 0242 70F3              brlo L51
 0244                   .dbline 125
 0244           ;   display ();
 0244           ;   if (number>=9999) number=0;
 0244 80910000          lds R24,_number
 0248 90910100          lds R25,_number+1
 024C 8F30              cpi R24,15
 024E E7E2              ldi R30,39
 0250 9E07              cpc R25,R30
 0252 30F0              brlo L55
 0254                   .dbline 125
 0254 2224              clr R2
 0256 3324              clr R3
 0258 30920100          sts _number+1,R3
 025C 20920000          sts _number,R2
 0260           L55:
 0260                   .dbline 126
 0260           L49:
 0260                   .dbline 119
 0260 C9CF              xjmp L48
 0262           X1:
 0262                   .dbline -2
 0262           L47:
 0262                   .dbline 0 ; func end
 0262 0895              ret
 0264                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\AVR单片机程序调试\ATMEGA16_8LED\ATMEGA16_8LED.C
 0000           _number::
 0000                   .blkb 2
 0002                   .dbsym e number _number i
 0002           _i::
 0002                   .blkb 2
 0004                   .dbsym e i _i i

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?