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

📄 clock.lis

📁 采用c语言编写的简易电子时钟程序。利用iccavr系列开发工具编写并调试成功。利用8mhz晶振可以达到实际时钟效果。
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01FC 0AE0              ldi R16,10
 01FE 162F              mov R17,R22
 0200 00D0              rcall mpy8s
 0202 202E              mov R2,R16
 0204 2A0C              add R2,R10
 0206 80E0              ldi R24,<_time
 0208 90E0              ldi R25,>_time
 020A E42F              mov R30,R20
 020C FF27              clr R31
 020E E80F              add R30,R24
 0210 F91F              adc R31,R25
 0212 2082              std z+0,R2
 0214                   .dbline 107
 0214 242E              mov R2,R20
 0216 3324              clr R3
 0218 220C              lsl R2
 021A 331C              rol R3
 021C 84E0              ldi R24,4
 021E 90E0              ldi R25,0
 0220 8219              sub R24,R2
 0222 9309              sbc R25,R3
 0224 E0E0              ldi R30,<_ledbuff
 0226 F0E0              ldi R31,>_ledbuff
 0228 8E0F              add R24,R30
 022A 9F1F              adc R25,R31
 022C 282E              mov R2,R24
 022E 392E              mov R3,R25
 0230 E22D              mov R30,R2
 0232 F32D              mov R31,R3
 0234 8081              ldd R24,z+0
 0236 8F77              andi R24,127
 0238 8083              std z+0,R24
 023A                   .dbline 108
 023A F6DE              rcall _hextobcd
 023C                   .dbline 109
 023C                 L14:
 023C                   .dbline 74
 023C 4395              inc R20
 023E                 L16:
 023E                   .dbline 74
 023E 4330              cpi R20,3
 0240 08F4              brsh X1
 0242 66CF              rjmp L13
 0244                 X1:
 0244                   .dbline 110}
                       ;        while (t2==t3);
                       ;        t3=time[t1]/10;
                       ;        time[t1]=t3*10+t2;
                       ;        ledbuff[4-2*t1]&=0x7f;
                       ;        hextobcd();                  
                       ;     }
                       ;     }
 0244                 L12:
 0244 00D0              rcall pop_gset3
 0246 0895              ret
 0248                   .dbsym r t1 20 c
 0248                   .dbsym r t3 22 c
 0248                   .dbsym r t2 10 c
 0248                   .dbfunc s main _main fI
                       ;              i -> R20
                       ;              j -> R22
                         .even
 0248                 _main::
 0248                   .dbline 115{
                       ; /*****************************************
                       ; 主程序功能:演示了电脑时钟程序的工作过程
                       ; *****************************************/
                       ; void main(void)
                       ; {
 0248                   .dbline 117
                       ;  unsigned char i,j;
                       ;  MCUCR=0;
 0248 2224              clr R2
 024A 25BE              out 0x35,R2
 024C                   .dbline 118
                       ;  flag=0;
 024C 20920900          sts _flag,R2
 0250                   .dbline 119
                       ;  port_init(); //端口初始化
 0250 D7DE              rcall _port_init
 0252                   .dbline 120
                       ;  i=scan_key();
 0252 00D0              rcall _scan_key
 0254 202E              mov R2,R16
 0256 312E              mov R3,R17
 0258 422D              mov R20,R2
 025A 3AC0              rjmp L31
 025C                 L30:
 025C                   .dbline 122
                       ;  while(1)
                       ;   {
 025C                   .dbline 123
                       ;    i=scan_key(); 
 025C 00D0              rcall _scan_key
 025E 202E              mov R2,R16
 0260 312E              mov R3,R17
 0262 422D              mov R20,R2
 0264                   .dbline 124
                       ;    if (i!=0x7f)
 0264 4F37              cpi R20,127
 0266 61F0              breq L33
 0268                   .dbline 125
                       ;      {
 0268                 L35:
 0268                   .dbline 127
                       ;       do 
                       ;        {
 0268                   .dbline 128
                       ;         j=scan_key();
 0268 00D0              rcall _scan_key
 026A 202E              mov R2,R16
 026C 312E              mov R3,R17
 026E 622D              mov R22,R2
 0270                   .dbline 129
                       ;         display();      
 0270 2FDF              rcall _display
 0272                   .dbline 130
                       ;        }
 0272                 L36:
 0272                   .dbline 131
                       ;       while (i==j); 
 0272 4617              cp R20,R22
 0274 C9F3              breq L35
 0276                   .dbline 132
                       ;       if ((i&0x80)==0x80) 
 0276 842F              mov R24,R20
 0278 8078              andi R24,128
 027A 8038              cpi R24,128
 027C 09F4              brne L38
 027E                   .dbline 133
                       ;           settime();//设定时间
 027E 45DF              rcall _settime
 0280                 L38:
 0280                   .dbline 134
                       ;      }
 0280                 L33:
 0280                   .dbline 135
                       ;    if(flag==1)
 0280 80910900          lds R24,_flag
 0284 8130              cpi R24,1
 0286 19F5              brne L40
 0288                   .dbline 136
                       ;     {
 0288                   .dbline 137
                       ;      flag=0;
 0288 2224              clr R2
 028A 20920900          sts _flag,R2
 028E                   .dbline 138
                       ;      if (time[2]>=60) 
 028E 80910800          lds R24,_time+2
 0292 8C33              cpi R24,60
 0294 40F0              brlo L42
 0296                   .dbline 139
                       ;         {
 0296                   .dbline 140
                       ;          time[2]-=60;
 0296 8C53              subi R24,60
 0298 80930800          sts _time+2,R24
 029C                   .dbline 141
                       ;          time[1]++;
 029C 80910700          lds R24,_time+1
 02A0 8F5F              subi R24,255    ; addi 1
 02A2 80930700          sts _time+1,R24
 02A6                   .dbline 142
                       ;          }
 02A6                 L42:
 02A6                   .dbline 143
                       ;     if (time[1]>=60) 
 02A6 80910700          lds R24,_time+1
 02AA 8C33              cpi R24,60
 02AC 40F0              brlo L47
 02AE                   .dbline 144
                       ;     {
 02AE                   .dbline 145
                       ;      time[1]-=60;
 02AE 8C53              subi R24,60
 02B0 80930700          sts _time+1,R24
 02B4                   .dbline 146
                       ;      time[0]++;
 02B4 80910600          lds R24,_time
 02B8 8F5F              subi R24,255    ; addi 1
 02BA 80930600          sts _time,R24
 02BE                   .dbline 147
                       ;      } 
 02BE                 L47:
 02BE                   .dbline 148
                       ;     if (time[0]>=24) 
 02BE 80910600          lds R24,_time
 02C2 8831              cpi R24,24
 02C4 18F0              brlo L51
 02C6                   .dbline 149
                       ;         {
 02C6                   .dbline 150
                       ;          time[0]-=24;
 02C6 8851              subi R24,24
 02C8 80930600          sts _time,R24
 02CC                   .dbline 151
                       ;          }
 02CC                 L51:
 02CC                   .dbline 152
                       ;      hextobcd();
 02CC ADDE              rcall _hextobcd
 02CE                   .dbline 153
                       ;     }
 02CE                 L40:
 02CE                   .dbline 154
 02CE 00DF              rcall _display
 02D0                   .dbline 155
 02D0                 L31:
 02D0                   .dbline 121
 02D0 C5CF              rjmp L30
 02D2                 X2:
 02D2                   .dbline 156}
                       ;    display();
                       ;   }
                       ; }
 02D2                 L29:
 02D2 0895              ret
 02D4                   .dbsym r i 20 c
 02D4                   .dbsym r j 22 c
 02D4                   .dbfunc s timer1 _timer1 fI
                         .even
 02D4                 _timer1::
 02D4 8A93              st -y,R24
 02D6 9A93              st -y,R25
 02D8 8FB7              in R24,0x3f
 02DA 8A93              st -y,R24
 02DC                   .dbline 161{
                       ; /*****************************************
                       ;           T1溢出中断
                       ; *****************************************/  
                       ; void timer1(void)
                       ;    {
 02DC                   .dbline 162
                       ;     flag=1;
 02DC 81E0              ldi R24,1
 02DE 80930900          sts _flag,R24
 02E2                   .dbline 163
                       ;     time[2]++;
 02E2 80910800          lds R24,_time+2
 02E6 8F5F              subi R24,255    ; addi 1
 02E8 80930800          sts _time+2,R24
 02EC                   .dbline 164
                       ;     TCNT1=0x85ee;
 02EC 8EEE              ldi R24,-31250
 02EE 95E8              ldi R25,-123
 02F0 90934D00          sts 76+1,R25
 02F4 80934C00          sts 76,R24
 02F8                   .dbline 165}
                       ;     }
 02F8                 L53:
 02F8 8991              ld R24,y+
 02FA 8FBF              out 0x3f,R24
 02FC 9991              ld R25,y+
 02FE 8991              ld R24,y+
 0300 1895              reti

⌨️ 快捷键说明

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