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

📄 timer0.lis

📁 protues_atmeg8学习之:timer篇源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00F2 2A96              adiw R28,10
 00F4 00D0              rcall pop_gset3
 00F6                   .dbline 0 ; func end
 00F6 0895              ret
 00F8                   .dbsym l num 0 A[10:10]c
 00F8                   .dbsym r i 22 c
 00F8                   .dbsym r timer 10 pc
 00F8                   .dbend
                        .area vector(rom, abs)
                        .org 2
 0002 7CC0              rjmp _int0_fun
                        .area text(rom, con, rel)
 00F8                   .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
 00F8                   .dbfunc e int0_fun _int0_fun fV
                        .even
 00F8           _int0_fun::
 00F8 2A92              st -y,R2
 00FA 0A93              st -y,R16
 00FC 1A93              st -y,R17
 00FE 8A93              st -y,R24
 0100 9A93              st -y,R25
 0102 EA93              st -y,R30
 0104 2FB6              in R2,0x3f
 0106 2A92              st -y,R2
 0108                   .dbline -1
 0108                   .dbline 72
 0108           ; 
 0108           ; //INT0中断函数
 0108           ; #pragma interrupt_handler int0_fun:iv_INT0
 0108           ; void int0_fun(void)
 0108           ; {
 0108                   .dbline 73
 0108           ;     KeyDown++;
 0108 80910100          lds R24,_KeyDown
 010C 8F5F              subi R24,255    ; addi 1
 010E 80930100          sts _KeyDown,R24
 0112                   .dbline 74
 0112           ;       switch(KeyDown)
 0112 082F              mov R16,R24
 0114 1127              clr R17
 0116 0130              cpi R16,1
 0118 E0E0              ldi R30,0
 011A 1E07              cpc R17,R30
 011C 29F0              breq L27
 011E 0230              cpi R16,2
 0120 E0E0              ldi R30,0
 0122 1E07              cpc R17,R30
 0124 31F0              breq L28
 0126 08C0              rjmp L24
 0128           X2:
 0128                   .dbline 75
 0128           ;       {
 0128           L27:
 0128                   .dbline 77
 0128           ;       case 1:
 0128           ;           TCNT0=0x06;      //计数初始值6 
 0128 86E0              ldi R24,6
 012A 82BF              out 0x32,R24
 012C                   .dbline 78
 012C           ;               TCCR0=0x03;      //打开T/C0,系统时钟64分频 
 012C 83E0              ldi R24,3
 012E 83BF              out 0x33,R24
 0130                   .dbline 79
 0130           ;               break;
 0130 0CC0              rjmp L25
 0132           L28:
 0132                   .dbline 81
 0132           ;       case 2:
 0132           ;               TCCR0=0x00;      //关闭T/C0
 0132 2224              clr R2
 0134 23BE              out 0x33,R2
 0136                   .dbline 82
 0136           ;               break;
 0136 09C0              rjmp L25
 0138           L24:
 0138                   .dbline 84
 0138 2224              clr R2
 013A 20920200          sts _TimeNum+2,R2
 013E 20920100          sts _TimeNum+1,R2
 0142 20920000          sts _TimeNum,R2
 0146                   .dbline 85
 0146 20920100          sts _KeyDown,R2
 014A                   .dbline 86
 014A           L25:
 014A                   .dbline -2
 014A                   .dbline 88
 014A           ;       default:
 014A           ;               TimeNum[0]=TimeNum[1]=TimeNum[2]=0;//计时清零           
 014A           ;               KeyDown=0;
 014A           ;               break;          
 014A           ;       }
 014A           ; }
 014A           L23:
 014A 2990              ld R2,y+
 014C 2FBE              out 0x3f,R2
 014E E991              ld R30,y+
 0150 9991              ld R25,y+
 0152 8991              ld R24,y+
 0154 1991              ld R17,y+
 0156 0991              ld R16,y+
 0158 2990              ld R2,y+
 015A                   .dbline 0 ; func end
 015A 1895              reti
 015C                   .dbend
                        .area vector(rom, abs)
                        .org 18
 0012 AEC0              rjmp _timer0_fun
                        .area text(rom, con, rel)
 015C                   .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
 015C                   .dbfunc e timer0_fun _timer0_fun fV
                        .even
 015C           _timer0_fun::
 015C 2A92              st -y,R2
 015E 8A93              st -y,R24
 0160 9A93              st -y,R25
 0162 2FB6              in R2,0x3f
 0164 2A92              st -y,R2
 0166                   .dbline -1
 0166                   .dbline 93
 0166           ; 
 0166           ; //T/C0中断函数
 0166           ; #pragma interrupt_handler timer0_fun:iv_TIMER0_OVF 
 0166           ; void timer0_fun(void)
 0166           ; {
 0166                   .dbline 94
 0166           ;     TCNT0=0x06 ;               //重装计数初始值6    
 0166 86E0              ldi R24,6
 0168 82BF              out 0x32,R24
 016A                   .dbline 95
 016A           ;       if(++CountNum==5)           
 016A 80910000          lds R24,_CountNum
 016E 8F5F              subi R24,255    ; addi 1
 0170 282E              mov R2,R24
 0172 20920000          sts _CountNum,R2
 0176 8530              cpi R24,5
 0178 21F5              brne L32
 017A                   .dbline 96
 017A           ;     {
 017A                   .dbline 97
 017A           ;           CountNum=0;            //计数到5次,计数值复位
 017A 2224              clr R2
 017C 20920000          sts _CountNum,R2
 0180                   .dbline 98
 0180           ;         TimeNum[2]++;          //秒的百分位加1
 0180 80910200          lds R24,_TimeNum+2
 0184 8F5F              subi R24,255    ; addi 1
 0186 80930200          sts _TimeNum+2,R24
 018A                   .dbline 99
 018A           ;         if(TimeNum[2]==100)
 018A 8436              cpi R24,100
 018C 39F4              brne L35
 018E                   .dbline 100
 018E           ;         {
 018E                   .dbline 101
 018E           ;                   TimeNum[2]=0;
 018E 20920200          sts _TimeNum+2,R2
 0192                   .dbline 102
 0192           ;             TimeNum[1]++;      //秒进位
 0192 80910100          lds R24,_TimeNum+1
 0196 8F5F              subi R24,255    ; addi 1
 0198 80930100          sts _TimeNum+1,R24
 019C                   .dbline 103
 019C           ;               }
 019C           L35:
 019C                   .dbline 104
 019C           ;         if(TimeNum[1]==60)
 019C 80910100          lds R24,_TimeNum+1
 01A0 8C33              cpi R24,60
 01A2 41F4              brne L40
 01A4                   .dbline 105
 01A4           ;         {
 01A4                   .dbline 106
 01A4           ;                  TimeNum[1]=0;
 01A4 2224              clr R2
 01A6 20920100          sts _TimeNum+1,R2
 01AA                   .dbline 107
 01AA           ;            TimeNum[0]++;      //分进位
 01AA 80910000          lds R24,_TimeNum
 01AE 8F5F              subi R24,255    ; addi 1
 01B0 80930000          sts _TimeNum,R24
 01B4                   .dbline 108
 01B4           ;               }             
 01B4           L40:
 01B4                   .dbline 109
 01B4           ;         if(TimeNum[0]==60)
 01B4 80910000          lds R24,_TimeNum
 01B8 8C33              cpi R24,60
 01BA 19F4              brne L44
 01BC                   .dbline 110
 01BC           ;         {
 01BC                   .dbline 111
 01BC           ;                       TimeNum[0]=0;
 01BC 2224              clr R2
 01BE 20920000          sts _TimeNum,R2
 01C2                   .dbline 112
 01C2           ;               }
 01C2           L44:
 01C2                   .dbline 113
 01C2           L32:
 01C2                   .dbline -2
 01C2                   .dbline 114
 01C2           ;     } 
 01C2           ; }
 01C2           L31:
 01C2 2990              ld R2,y+
 01C4 2FBE              out 0x3f,R2
 01C6 9991              ld R25,y+
 01C8 8991              ld R24,y+
 01CA 2990              ld R2,y+
 01CC                   .dbline 0 ; func end
 01CC 1895              reti
 01CE                   .dbend
                        .area lit(rom, con, rel)
 000A           L47:
 000A 0000              .byte 0,0
 000C 0000              .byte 0,0
 000E 0000              .byte 0,0
                        .area text(rom, con, rel)
 01CE                   .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
 01CE                   .dbfunc e main _main fV
 01CE           ;          timer -> y+0
                        .even
 01CE           _main::
 01CE 2697              sbiw R28,6
 01D0                   .dbline -1
 01D0                   .dbline 118
 01D0           ; 
 01D0           ; //主函数
 01D0           ; void main()
 01D0           ; {
 01D0                   .dbline 119
 01D0           ;     unsigned char timer[6]={0, 0, 0, 0, 0, 0};
 01D0 80E0              ldi R24,<L47
 01D2 90E0              ldi R25,>L47
 01D4 FE01              movw R30,R28
 01D6 06E0              ldi R16,6
 01D8 10E0              ldi R17,0
 01DA FA93              st -y,R31
 01DC EA93              st -y,R30
 01DE 9A93              st -y,R25
 01E0 8A93              st -y,R24
 01E2 00D0              rcall asgncblk
 01E4                   .dbline 121
 01E4           ;       
 01E4           ;       CLI();         //先关闭全局中断
 01E4 F894              cli
 01E6                   .dbline 122
 01E6           ;       Init_Port();   //初始化端口
 01E6 23DF              rcall _Init_Port
 01E8                   .dbline 123
 01E8           ;     Init_Int();    //初始化外部中断   
 01E8 2EDF              rcall _Init_Int
 01EA                   .dbline 124
 01EA           ;     Init_Timer0(); //初始化T/C0
 01EA 37DF              rcall _Init_Timer0
 01EC                   .dbline 126
 01EC           ;       
 01EC           ;       KeyDown=0;     //初始化全局变量
 01EC 2224              clr R2
 01EE 20920100          sts _KeyDown,R2
 01F2                   .dbline 127
 01F2           ;       CountNum=0;
 01F2 20920000          sts _CountNum,R2
 01F6                   .dbline 128
 01F6           ;       SEI();         //打开全局中断
 01F6 7894              sei
 01F8 20C0              rjmp L49
 01FA           L48:
 01FA                   .dbline 130
 01FA                   .dbline 131
 01FA 1AE0              ldi R17,10
 01FC 00910000          lds R16,_TimeNum
 0200 00D0              rcall div8u
 0202 0883              std y+0,R16
 0204                   .dbline 132
 0204 1AE0              ldi R17,10
 0206 00910000          lds R16,_TimeNum
 020A 00D0              rcall mod8u
 020C 0983              std y+1,R16
 020E                   .dbline 133
 020E 1AE0              ldi R17,10
 0210 00910100          lds R16,_TimeNum+1
 0214 00D0              rcall div8u
 0216 0A83              std y+2,R16
 0218                   .dbline 134
 0218 1AE0              ldi R17,10
 021A 00910100          lds R16,_TimeNum+1
 021E 00D0              rcall mod8u
 0220 0B83              std y+3,R16
 0222                   .dbline 135
 0222 1AE0              ldi R17,10
 0224 00910200          lds R16,_TimeNum+2
 0228 00D0              rcall div8u
 022A 0C83              std y+4,R16
 022C                   .dbline 136
 022C 1AE0              ldi R17,10
 022E 00910200          lds R16,_TimeNum+2
 0232 00D0              rcall mod8u
 0234 0D83              std y+5,R16
 0236                   .dbline 137
 0236 8E01              movw R16,R28
 0238 18DF              rcall _Display
 023A                   .dbline 138
 023A           L49:
 023A                   .dbline 129
 023A DFCF              rjmp L48
 023C           X3:
 023C                   .dbline -2
 023C                   .dbline 139
 023C           ;       while (1)
 023C           ;       {                  
 023C           ;               timer[0]=TimeNum[0]/10;
 023C           ;               timer[1]=TimeNum[0]%10;
 023C           ;               timer[2]=TimeNum[1]/10;
 023C           ;               timer[3]=TimeNum[1]%10;
 023C           ;               timer[4]=TimeNum[2]/10;
 023C           ;               timer[5]=TimeNum[2]%10;                 
 023C           ;               Display(timer);          //显示时间
 023C           ;      }
 023C           ; }
 023C           L46:
 023C 2696              adiw R28,6
 023E                   .dbline 0 ; func end
 023E 0895              ret
 0240                   .dbsym l timer 0 A[6:6]c
 0240                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
 0000           _CountNum::
 0000                   .blkb 1
 0001                   .dbsym e CountNum _CountNum c
 0001           _KeyDown::
 0001                   .blkb 1
 0002                   .dbsym e KeyDown _KeyDown c

⌨️ 快捷键说明

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