segdisp-16sn.lis

来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· LIS 代码 · 共 800 行 · 第 1/3 页

LIS
800
字号
 0146                   .dbline 76
 0146           ;       data=data%1000;
 0146 28EE              ldi R18,1000
 0148 33E0              ldi R19,3
 014A 8A01              movw R16,R20
 014C 0E940000          xcall mod16s
 0150 A801              movw R20,R16
 0152                   .dbline 77
 0152           ;       }       
 0152           L24:
 0152                   .dbline 78
 0152           ;  if(data>=100)
 0152 4436              cpi R20,100
 0154 E0E0              ldi R30,0
 0156 5E07              cpc R21,R30
 0158 6CF0              brlt L26
 015A           X10:
 015A                   .dbline 79
 015A           ;     {
 015A                   .dbline 80
 015A           ;     BCD2=data/100;
 015A 24E6              ldi R18,100
 015C 30E0              ldi R19,0
 015E 8A01              movw R16,R20
 0160 0E940000          xcall div16s
 0164 00930400          sts _BCD2,R16
 0168                   .dbline 81
 0168           ;       data=data%100;
 0168 24E6              ldi R18,100
 016A 30E0              ldi R19,0
 016C 8A01              movw R16,R20
 016E 0E940000          xcall mod16s
 0172 A801              movw R20,R16
 0174                   .dbline 82
 0174           ;       }       
 0174           L26:
 0174                   .dbline 84
 0174           ;       
 0174           ;  if(data>=10)
 0174 4A30              cpi R20,10
 0176 E0E0              ldi R30,0
 0178 5E07              cpc R21,R30
 017A 6CF0              brlt L28
 017C           X11:
 017C                   .dbline 85
 017C           ;     {
 017C                   .dbline 86
 017C           ;     BCD1=data/10;
 017C 2AE0              ldi R18,10
 017E 30E0              ldi R19,0
 0180 8A01              movw R16,R20
 0182 0E940000          xcall div16s
 0186 00930500          sts _BCD1,R16
 018A                   .dbline 87
 018A           ;       data=data%10;
 018A 2AE0              ldi R18,10
 018C 30E0              ldi R19,0
 018E 8A01              movw R16,R20
 0190 0E940000          xcall mod16s
 0194 A801              movw R20,R16
 0196                   .dbline 88
 0196           ;       }               
 0196           L28:
 0196                   .dbline 89
 0196           ;  BCD0=data;   
 0196 40930600          sts _BCD0,R20
 019A                   .dbline -2
 019A           L21:
 019A                   .dbline 0 ; func end
 019A 5991              ld R21,y+
 019C 4991              ld R20,y+
 019E 0895              ret
 01A0                   .dbsym r data 20 I
 01A0                   .dbend
 01A0                   .dbfunc e dispseg _dispseg fV
                        .even
 01A0           _dispseg::
 01A0                   .dbline -1
 01A0                   .dbline 93
 01A0           ; }
 01A0           ; 
 01A0           ; void dispseg(void)
 01A0           ; {
 01A0                   .dbline 94
 01A0           ;  PORTB=~segconv[BCD0];
 01A0 80E0              ldi R24,<_segconv
 01A2 90E0              ldi R25,>_segconv
 01A4 E0910600          lds R30,_BCD0
 01A8 FF27              clr R31
 01AA E80F              add R30,R24
 01AC F91F              adc R31,R25
 01AE 2080              ldd R2,z+0
 01B0 2094              com R2
 01B2 28BA              out 0x18,R2
 01B4                   .dbline 95
 01B4           ;  PORTA=dig0;
 01B4 E0E0              ldi R30,<_dig0
 01B6 F0E0              ldi R31,>_dig0
 01B8 2690              elpm R2,Z
 01BA 2BBA              out 0x1b,R2
 01BC                   .dbline 96
 01BC           ;  led_disp();
 01BC 37DF              xcall _led_disp
 01BE                   .dbline 97
 01BE           ;  PORTB=~segconv[BCD1];
 01BE 80E0              ldi R24,<_segconv
 01C0 90E0              ldi R25,>_segconv
 01C2 E0910500          lds R30,_BCD1
 01C6 FF27              clr R31
 01C8 E80F              add R30,R24
 01CA F91F              adc R31,R25
 01CC 2080              ldd R2,z+0
 01CE 2094              com R2
 01D0 28BA              out 0x18,R2
 01D2                   .dbline 98
 01D2           ;  PORTA=dig1;
 01D2 E0E0              ldi R30,<_dig1
 01D4 F0E0              ldi R31,>_dig1
 01D6 2690              elpm R2,Z
 01D8 2BBA              out 0x1b,R2
 01DA                   .dbline 99
 01DA           ;  led_disp();
 01DA 28DF              xcall _led_disp
 01DC                   .dbline 100
 01DC           ;  PORTB=~segconv[BCD2];
 01DC 80E0              ldi R24,<_segconv
 01DE 90E0              ldi R25,>_segconv
 01E0 E0910400          lds R30,_BCD2
 01E4 FF27              clr R31
 01E6 E80F              add R30,R24
 01E8 F91F              adc R31,R25
 01EA 2080              ldd R2,z+0
 01EC 2094              com R2
 01EE 28BA              out 0x18,R2
 01F0                   .dbline 101
 01F0           ;  PORTA=dig2;
 01F0 E0E0              ldi R30,<_dig2
 01F2 F0E0              ldi R31,>_dig2
 01F4 2690              elpm R2,Z
 01F6 2BBA              out 0x1b,R2
 01F8                   .dbline 102
 01F8           ;  led_disp();
 01F8 19DF              xcall _led_disp
 01FA                   .dbline 103
 01FA           ;  PORTB=~segconv[BCD3];
 01FA 80E0              ldi R24,<_segconv
 01FC 90E0              ldi R25,>_segconv
 01FE E0910300          lds R30,_BCD3
 0202 FF27              clr R31
 0204 E80F              add R30,R24
 0206 F91F              adc R31,R25
 0208 2080              ldd R2,z+0
 020A 2094              com R2
 020C 28BA              out 0x18,R2
 020E                   .dbline 104
 020E           ;  PORTA=dig3;
 020E E0E0              ldi R30,<_dig3
 0210 F0E0              ldi R31,>_dig3
 0212 2690              elpm R2,Z
 0214 2BBA              out 0x1b,R2
 0216                   .dbline 105
 0216           ;  led_disp();
 0216 0ADF              xcall _led_disp
 0218                   .dbline 106
 0218           ;  time_over++;
 0218 80910C00          lds R24,_time_over
 021C 90910D00          lds R25,_time_over+1
 0220 0196              adiw R24,1
 0222 90930D00          sts _time_over+1,R25
 0226 80930C00          sts _time_over,R24
 022A                   .dbline 107
 022A           ;  if(time_over>10)
 022A 8AE0              ldi R24,10
 022C 90E0              ldi R25,0
 022E 20900C00          lds R2,_time_over
 0232 30900D00          lds R3,_time_over+1
 0236 8215              cp R24,R2
 0238 9305              cpc R25,R3
 023A 34F4              brge L31
 023C           X12:
 023C                   .dbline 108
 023C           ;     time_over=0;
 023C 2224              clr R2
 023E 3324              clr R3
 0240 30920D00          sts _time_over+1,R3
 0244 20920C00          sts _time_over,R2
 0248           L31:
 0248                   .dbline -2
 0248           L30:
 0248                   .dbline 0 ; func end
 0248 0895              ret
 024A                   .dbend
 024A                   .dbfunc e dot_on _dot_on fV
                        .even
 024A           _dot_on::
 024A                   .dbline -1
 024A                   .dbline 112
 024A           ; }
 024A           ; 
 024A           ; void dot_on(void)
 024A           ; {
 024A                   .dbline 113
 024A           ;  PORTB=~0x80;
 024A 8FE7              ldi R24,-129
 024C 9FEF              ldi R25,-1
 024E 88BB              out 0x18,R24
 0250                   .dbline 114
 0250           ;  PORTA=dot; 
 0250 E0E0              ldi R30,<_dot
 0252 F0E0              ldi R31,>_dot
 0254 2690              elpm R2,Z
 0256 2BBA              out 0x1b,R2
 0258                   .dbline 115
 0258           ;  delay(20);
 0258 04E1              ldi R16,20
 025A 10E0              ldi R17,0
 025C D1DE              xcall _delay
 025E                   .dbline -2
 025E           L33:
 025E                   .dbline 0 ; func end
 025E 0895              ret
 0260                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\+samples-16small\DEMOA-16sm\SegDisp-16sn.c
 0000           _swin3::
 0000                   .blkb 1
 0001                   .dbsym e swin3 _swin3 c
 0001           _count::
 0001                   .blkb 2
 0003                   .dbsym e count _count I
 0003           _BCD3::
 0003                   .blkb 1
 0004                   .dbsym e BCD3 _BCD3 c
 0004           _BCD2::
 0004                   .blkb 1
 0005                   .dbsym e BCD2 _BCD2 c
 0005           _BCD1::
 0005                   .blkb 1
 0006                   .dbsym e BCD1 _BCD1 c
 0006           _BCD0::
 0006                   .blkb 1
 0007                   .dbsym e BCD0 _BCD0 c
 0007           ; }
 0007           ; 
 0007           ; 
 0007           ; //*****************************************************************
 0007           ; /*
 0007           ; void main(void)
 0007           ; {
 0007           ;  unsigned char outa=0x00, outb=0x00, outc=0x00, outd=0x00;
 0007           ;  unsigned char dswin;  
 0007           ;  port_init();
 0007           ;  while(1)
 0007           ;    {
 0007           ;     WDR();                              //Watchdog reset
 0007           ;       dswin=PINC;
 0007           ;       //dswin=1234;
 0007           ;     BinToBCD(dswin);
 0007           ;       dispseg();
 0007           ;       dot_on();
 0007           ;       PORTD=0x55;
 0007           ;       //PORTB=dswin;
 0007           ;     delay(5);
 0007           ;    }
 0007           ; }*/

⌨️ 快捷键说明

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