segdisp-16sn.lis

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

LIS
800
字号
 0004           ;  int i, j;
 0004           ;  for(i=count; i>0; i--)
 0004 A801              movw R20,R16
 0006 0BC0              xjmp L5
 0008           L2:
 0008                   .dbline 28
 0008           ;     for(j=3; j>0; j--)
 0008 63E0              ldi R22,3
 000A 70E0              ldi R23,0
 000C           L6:
 000C                   .dbline 29
 000C           ;          ;
 000C           L7:
 000C                   .dbline 28
 000C 6150              subi R22,1
 000E 7040              sbci R23,0
 0010                   .dbline 28
 0010 2224              clr R2
 0012 3324              clr R3
 0014 2616              cp R2,R22
 0016 3706              cpc R3,R23
 0018 CCF3              brlt L6
 001A           X0:
 001A           L3:
 001A                   .dbline 27
 001A 4150              subi R20,1
 001C 5040              sbci R21,0
 001E           L5:
 001E                   .dbline 27
 001E 2224              clr R2
 0020 3324              clr R3
 0022 2416              cp R2,R20
 0024 3506              cpc R3,R21
 0026 84F3              brlt L2
 0028           X1:
 0028                   .dbline -2
 0028           L1:
 0028                   .dbline 0 ; func end
 0028 0C940000          xjmp pop_xgsetF000
 002C                   .dbsym r i 20 I
 002C                   .dbsym r j 22 I
 002C                   .dbsym r count 16 I
 002C                   .dbend
 002C                   .dbfunc e led_disp _led_disp fV
                        .even
 002C           _led_disp::
 002C                   .dbline -1
 002C                   .dbline 35
 002C           ; } 
 002C           ; 
 002C           ; //*****************************************************************
 002C           ; 
 002C           ; void led_disp(void)
 002C           ;   {    
 002C                   .dbline 36
 002C           ;     if(time_over>=10)
 002C 80910C00          lds R24,_time_over
 0030 90910D00          lds R25,_time_over+1
 0034 8A30              cpi R24,10
 0036 E0E0              ldi R30,0
 0038 9E07              cpc R25,R30
 003A 0CF4              brge X7
 003C 5AC0              xjmp L11
 003E           X7:
 003E           X2:
 003E                   .dbline 37
 003E           ;         {
 003E                   .dbline 38
 003E           ;         swin3=PINC&0xc0;
 003E 83B3              in R24,0x13
 0040 807C              andi R24,192
 0042 80930000          sts _swin3,R24
 0046                   .dbline 39
 0046           ;         swin3=swin3>>6;
 0046 282E              mov R2,R24
 0048 2694              lsr R2
 004A 2694              lsr R2
 004C 2694              lsr R2
 004E 2694              lsr R2
 0050 2694              lsr R2
 0052 2694              lsr R2
 0054 20920000          sts _swin3,R2
 0058                   .dbline 41
 0058           ;               
 0058           ;         if(swin3==0)
 0058 2220              tst R2
 005A 59F4              brne L13
 005C           X3:
 005C                   .dbline 42
 005C           ;               {
 005C                   .dbline 43
 005C           ;               PORTD=pattern1[led_index];        
 005C 80E0              ldi R24,<_pattern1
 005E 90E0              ldi R25,>_pattern1
 0060 E0910A00          lds R30,_led_index
 0064 F0910B00          lds R31,_led_index+1
 0068 E80F              add R30,R24
 006A F91F              adc R31,R25
 006C 2080              ldd R2,z+0
 006E 22BA              out 0x12,R2
 0070                   .dbline 44
 0070           ;               }
 0070 28C0              xjmp L14
 0072           L13:
 0072                   .dbline 45
 0072           ;         else if(swin3==0x01)
 0072 80910000          lds R24,_swin3
 0076 8130              cpi R24,1
 0078 59F4              brne L15
 007A           X4:
 007A                   .dbline 46
 007A           ;           {
 007A                   .dbline 47
 007A           ;               PORTD=pattern2[led_index];        
 007A 80E0              ldi R24,<_pattern2
 007C 90E0              ldi R25,>_pattern2
 007E E0910A00          lds R30,_led_index
 0082 F0910B00          lds R31,_led_index+1
 0086 E80F              add R30,R24
 0088 F91F              adc R31,R25
 008A 2080              ldd R2,z+0
 008C 22BA              out 0x12,R2
 008E                   .dbline 48
 008E           ;               }
 008E 19C0              xjmp L16
 0090           L15:
 0090                   .dbline 49
 0090           ;         else if(swin3==0x02)
 0090 80910000          lds R24,_swin3
 0094 8230              cpi R24,2
 0096 59F4              brne L17
 0098           X5:
 0098                   .dbline 50
 0098           ;           {
 0098                   .dbline 51
 0098           ;           PORTD=pattern3[led_index];    
 0098 80E0              ldi R24,<_pattern3
 009A 90E0              ldi R25,>_pattern3
 009C E0910A00          lds R30,_led_index
 00A0 F0910B00          lds R31,_led_index+1
 00A4 E80F              add R30,R24
 00A6 F91F              adc R31,R25
 00A8 2080              ldd R2,z+0
 00AA 22BA              out 0x12,R2
 00AC                   .dbline 52
 00AC           ;           }
 00AC 0AC0              xjmp L18
 00AE           L17:
 00AE                   .dbline 54
 00AE           ;         else
 00AE           ;           {
 00AE                   .dbline 55
 00AE           ;           PORTD=pattern4[led_index];    
 00AE 80E0              ldi R24,<_pattern4
 00B0 90E0              ldi R25,>_pattern4
 00B2 E0910A00          lds R30,_led_index
 00B6 F0910B00          lds R31,_led_index+1
 00BA E80F              add R30,R24
 00BC F91F              adc R31,R25
 00BE 2080              ldd R2,z+0
 00C0 22BA              out 0x12,R2
 00C2                   .dbline 56
 00C2           ;           }
 00C2           L18:
 00C2           L16:
 00C2           L14:
 00C2                   .dbline 57
 00C2           ;         led_index++;
 00C2 80910A00          lds R24,_led_index
 00C6 90910B00          lds R25,_led_index+1
 00CA 0196              adiw R24,1
 00CC 90930B00          sts _led_index+1,R25
 00D0 80930A00          sts _led_index,R24
 00D4                   .dbline 58
 00D4           ;         if(led_index>14)
 00D4 8EE0              ldi R24,14
 00D6 90E0              ldi R25,0
 00D8 20900A00          lds R2,_led_index
 00DC 30900B00          lds R3,_led_index+1
 00E0 8215              cp R24,R2
 00E2 9305              cpc R25,R3
 00E4 34F4              brge L19
 00E6           X6:
 00E6                   .dbline 59
 00E6           ;            led_index=0;       
 00E6 2224              clr R2
 00E8 3324              clr R3
 00EA 30920B00          sts _led_index+1,R3
 00EE 20920A00          sts _led_index,R2
 00F2           L19:
 00F2                   .dbline 60
 00F2           ;         }     
 00F2           L11:
 00F2                   .dbline 61
 00F2           ;         swin3=~PINC&0x0f;
 00F2 83B3              in R24,0x13
 00F4 8095              com R24
 00F6 8F70              andi R24,15
 00F8 80930000          sts _swin3,R24
 00FC                   .dbline 62
 00FC           ;       delay(100+50*swin3);
 00FC 282E              mov R2,R24
 00FE 82E3              ldi R24,50
 0100 829D              mul R24,R2
 0102 8001              movw R16,R0
 0104 0C59              subi R16,156  ; offset = 100
 0106 1F4F              sbci R17,255
 0108 7BDF              xcall _delay
 010A                   .dbline -2
 010A           L10:
 010A                   .dbline 0 ; func end
 010A 0895              ret
 010C                   .dbend
 010C                   .dbfunc e BinToBCD _BinToBCD fV
 010C           ;           data -> R20,R21
                        .even
 010C           _BinToBCD::
 010C 4A93              st -y,R20
 010E 5A93              st -y,R21
 0110 A801              movw R20,R16
 0112                   .dbline -1
 0112                   .dbline 66
 0112           ;   }
 0112           ; 
 0112           ; void BinToBCD(int data)
 0112           ; {
 0112                   .dbline 67
 0112           ;  BCD0=0;
 0112 2224              clr R2
 0114 20920600          sts _BCD0,R2
 0118                   .dbline 68
 0118           ;  BCD1=0;
 0118 20920500          sts _BCD1,R2
 011C                   .dbline 69
 011C           ;  BCD2=0;
 011C 20920400          sts _BCD2,R2
 0120                   .dbline 70
 0120           ;  BCD3=0;
 0120 20920300          sts _BCD3,R2
 0124                   .dbline 71
 0124           ;  if(data>=10000)
 0124 4031              cpi R20,16
 0126 E7E2              ldi R30,39
 0128 5E07              cpc R21,R30
 012A 14F0              brlt L22
 012C           X8:
 012C                   .dbline 72
 012C           ;     data=0;
 012C 4427              clr R20
 012E 5527              clr R21
 0130           L22:
 0130                   .dbline 73
 0130           ;  if(data>=1000)
 0130 483E              cpi R20,232
 0132 E3E0              ldi R30,3
 0134 5E07              cpc R21,R30
 0136 6CF0              brlt L24
 0138           X9:
 0138                   .dbline 74
 0138           ;     {
 0138                   .dbline 75
 0138           ;     BCD3=data/1000;
 0138 28EE              ldi R18,1000
 013A 33E0              ldi R19,3
 013C 8A01              movw R16,R20
 013E 0E940000          xcall div16s
 0142 00930300          sts _BCD3,R16

⌨️ 快捷键说明

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