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

📄 frequence.lis

📁 使用Mega16编制的频率检测程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01F2                   .dbline 195
 01F2           ;             
 01F2           ;             SetB(CLK);
 01F2 01E0              ldi R16,1
 01F4 05DF              xcall _SetB
 01F6                   .dbline 196
 01F6           ;             j=Delay;
 01F6 62E0              ldi R22,2
 01F8           L89:
 01F8                   .dbline 197
 01F8           L90:
 01F8                   .dbline 197
 01F8           ;             while(j--);
 01F8 262E              mov R2,R22
 01FA 3324              clr R3
 01FC 6150              subi R22,1
 01FE 2220              tst R2
 0200 D9F7              brne L89
 0202                   .dbline 199
 0202           ;             
 0202           ;             ClrB(CLK);
 0202 01E0              ldi R16,1
 0204 0ADF              xcall _ClrB
 0206                   .dbline 200
 0206           ;             j=Delay;
 0206 62E0              ldi R22,2
 0208           L92:
 0208                   .dbline 201
 0208           L93:
 0208                   .dbline 201
 0208           ;             while(j--);        
 0208 262E              mov R2,R22
 020A 3324              clr R3
 020C 6150              subi R22,1
 020E 2220              tst R2
 0210 D9F7              brne L92
 0212                   .dbline 202
 0212           ;         }
 0212           L76:
 0212                   .dbline 203
 0212 AA0C              lsl R10
 0214                   .dbline 204
 0214           L72:
 0214                   .dbline 173
 0214 4395              inc R20
 0216           L74:
 0216                   .dbline 173
 0216 4830              cpi R20,8
 0218 48F2              brlo L71
 021A                   .dbline 205
 021A           ;         Data<<=1;
 021A           ;     }//发送参数
 021A           ;     SetB(CS);    
 021A 0027              clr R16
 021C F1DE              xcall _SetB
 021E                   .dbline -2
 021E           L37:
 021E 0E940000          xcall pop_gset4
 0222                   .dbline 0 ; func end
 0222 0895              ret
 0224                   .dbsym r i 20 c
 0224                   .dbsym r j 22 c
 0224                   .dbsym r Data 10 c
 0224                   .dbsym r Cmd 12 c
 0224                   .dbend
 0224                   .dbfunc e DispChar _DispChar fV
 0224           ;            num -> R22
 0224           ;           Addr -> R20
                        .even
 0224           _DispChar::
 0224 0E940000          xcall push_gset2
 0228 622F              mov R22,R18
 022A 402F              mov R20,R16
 022C                   .dbline -1
 022C                   .dbline 209
 022C           ; }
 022C           ; 
 022C           ; void DispChar(unsigned char Addr,unsigned char num)
 022C           ; {//地址Addr为数码管某一位,数值0-7
 022C                   .dbline 213
 022C           ; //用于在指定位置显示数据,当num为0~9时,显示同数字
 022C           ; //当num为10~15时,显示A~F,当num为16~21时,显示 - E H L P (空)
 022C           ; //当num为50~59时,显示0.~9.,当num为60~65时,显示A.~F.
 022C           ;     if(num>=0&&num<16)//显示16进制数
 022C 6030              cpi R22,0
 022E 30F0              brlo L96
 0230 6031              cpi R22,16
 0232 20F4              brsh L96
 0234                   .dbline 214
 0234           ;     {
 0234                   .dbline 215
 0234           ;         WriteTwo7289(DispMethod1+Addr,num);
 0234 262F              mov R18,R22
 0236 042F              mov R16,R20
 0238 0853              subi R16,56    ; addi 200
 023A 5CDF              xcall _WriteTwo7289
 023C                   .dbline 216
 023C           ;     }
 023C           L96:
 023C                   .dbline 217
 023C           ;     if(num>=50&&num<66)//显示带小数点的16进制数
 023C 6233              cpi R22,50
 023E 38F0              brlo L98
 0240 6234              cpi R22,66
 0242 28F4              brsh L98
 0244                   .dbline 218
 0244           ;     {
 0244                   .dbline 219
 0244           ;         WriteTwo7289(DispMethod1+Addr,0x80+num);
 0244 262F              mov R18,R22
 0246 2058              subi R18,128    ; addi 128
 0248 042F              mov R16,R20
 024A 0853              subi R16,56    ; addi 200
 024C 53DF              xcall _WriteTwo7289
 024E                   .dbline 220
 024E           ;     }
 024E           L98:
 024E                   .dbline 221
 024E 6031              cpi R22,16
 0250 38F0              brlo L100
 0252 6631              cpi R22,22
 0254 28F4              brsh L100
 0256                   .dbline 222
 0256                   .dbline 223
 0256 262F              mov R18,R22
 0258 2650              subi R18,6
 025A 042F              mov R16,R20
 025C 0058              subi R16,128    ; addi 128
 025E 4ADF              xcall _WriteTwo7289
 0260                   .dbline 224
 0260           L100:
 0260                   .dbline -2
 0260           L95:
 0260 0E940000          xcall pop_gset2
 0264                   .dbline 0 ; func end
 0264 0895              ret
 0266                   .dbsym r num 22 c
 0266                   .dbsym r Addr 20 c
 0266                   .dbend
 0266                   .dbfunc e timer0_init _timer0_init fV
                        .even
 0266           _timer0_init::
 0266                   .dbline -1
 0266                   .dbline 230
 0266           ;     if(num>=16&&num<22)//显示特殊符号
 0266           ;     {
 0266           ;         WriteTwo7289(DispMethod0+Addr,num-6);
 0266           ;     }
 0266           ; }
 0266           ; 
 0266           ; //TIMER0 initialize - prescale:Falling edge
 0266           ; //用于记录外部引脚的变化
 0266           ; void timer0_init(void)
 0266           ; {
 0266                   .dbline 231
 0266           ;     TCCR0 = 0x00; //stop
 0266 2224              clr R2
 0268 23BE              out 0x33,R2
 026A                   .dbline 232
 026A           ;     TCNT0 = 0x00 /*INVALID SETTING*/; //set count
 026A 22BE              out 0x32,R2
 026C                   .dbline 233
 026C           ;     TCCR0 = 0x06; //启动计数器,记录低脉冲个数
 026C 86E0              ldi R24,6
 026E 83BF              out 0x33,R24
 0270                   .dbline -2
 0270           L102:
 0270                   .dbline 0 ; func end
 0270 0895              ret
 0272                   .dbend
 0272                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0272           _timer1_init::
 0272                   .dbline -1
 0272                   .dbline 241
 0272           ; }
 0272           ; 
 0272           ; //TIMER1 initialize - prescale:1
 0272           ; // WGM: 0) Normal, TOP=0xFFFF
 0272           ; // desired value: 1000Hz
 0272           ; //用于产生1KHz的中断
 0272           ; void timer1_init(void)
 0272           ; {
 0272                   .dbline 242
 0272           ;     TCCR1B = 0x00; //计时停止
 0272 2224              clr R2
 0274 2EBC              out 0x2e,R2
 0276                   .dbline 243
 0276           ;     TCNT1H = 0xFC; //设置计数次数64536
 0276 8CEF              ldi R24,252
 0278 8DBD              out 0x2d,R24
 027A                   .dbline 244
 027A           ;     TCNT1L = 0x18;
 027A 88E1              ldi R24,24
 027C 8CBD              out 0x2c,R24
 027E                   .dbline 246
 027E           ; 
 027E           ;     TCCR1A = 0x00;
 027E 2FBC              out 0x2f,R2
 0280                   .dbline 247
 0280           ;     TCCR1B = 0x01; //启动定时器
 0280 81E0              ldi R24,1
 0282 8EBD              out 0x2e,R24
 0284                   .dbline -2
 0284           L103:
 0284                   .dbline 0 ; func end
 0284 0895              ret
 0286                   .dbend
                        .area vector(rom, abs)
                        .org 32
 0020 0C944301          jmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 0286                   .dbfile D:\单片机编程\iccavr\频率检测\Frequence.c
 0286                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 0286           _timer1_ovf_isr::
 0286 0E940000          xcall push_lset
 028A                   .dbline -1
 028A                   .dbline 252
 028A           ; }
 028A           ; 
 028A           ; #pragma interrupt_handler timer1_ovf_isr:9
 028A           ; void timer1_ovf_isr(void)
 028A           ; {
 028A                   .dbline 254
 028A           ;     //TIMER1 has overflowed
 028A           ;     TCNT1H = 0xFC; //reload counter high value
 028A 8CEF              ldi R24,252
 028C 8DBD              out 0x2d,R24
 028E                   .dbline 255
 028E           ;     TCNT1L = 0x18; //reload counter low value
 028E 88E1              ldi R24,24
 0290 8CBD              out 0x2c,R24
 0292                   .dbline 257
 0292           ;     
 0292           ;     TCCR0=0x00;
 0292 2224              clr R2
 0294 23BE              out 0x33,R2
 0296                   .dbline 258
 0296           ;     frequence=TCNT0;//读入脉冲个数
 0296 22B6              in R2,0x32
 0298 20920000          sts _frequence,R2
 029C                   .dbline 259
 029C           ;     TCNT0=0;
 029C 2224              clr R2
 029E 22BE              out 0x32,R2
 02A0                   .dbline 260
 02A0           ;     TCCR0=0x06;//启动计数器,低电平记录
 02A0 86E0              ldi R24,6
 02A2 83BF              out 0x33,R24
 02A4                   .dbline 262
 02A4           ;     
 02A4           ;     DispChar(1,frequence/10);
 02A4 1AE0              ldi R17,10
 02A6 00910000          lds R16,_frequence
 02AA 0E940000          xcall div8u
 02AE 202F              mov R18,R16
 02B0 01E0              ldi R16,1
 02B2 B8DF              xcall _DispChar
 02B4                   .dbline 263
 02B4           ;     DispChar(0,frequence%10);   
 02B4 1AE0              ldi R17,10
 02B6 00910000          lds R16,_frequence
 02BA 0E940000          xcall mod8u
 02BE 202F              mov R18,R16
 02C0 0027              clr R16
 02C2 B0DF              xcall _DispChar
 02C4                   .dbline -2
 02C4           L104:
 02C4 0E940000          xcall pop_lset
 02C8                   .dbline 0 ; func end
 02C8 1895              reti
 02CA                   .dbend
 02CA                   .dbfunc e init_devices _init_devices fV
                        .even
 02CA           _init_devices::
 02CA                   .dbline -1
 02CA                   .dbline 268
 02CA           ; }
 02CA           ; 
 02CA           ; //初始化所有设备
 02CA           ; void init_devices(void)
 02CA           ; {
 02CA                   .dbline 270
 02CA           ;  //stop errant interrupts until set up
 02CA           ;     CLI(); //disable all interrupts
 02CA F894              cli
 02CC                   .dbline 271
 02CC           ;     timer0_init();
 02CC CCDF              xcall _timer0_init
 02CE                   .dbline 272
 02CE           ;     timer1_init();
 02CE D1DF              xcall _timer1_init
 02D0                   .dbline 274
 02D0           ; 
 02D0           ;     MCUCR = 0x00;
 02D0 2224              clr R2
 02D2 25BE              out 0x35,R2
 02D4                   .dbline 275
 02D4           ;     GICR  = 0x00;
 02D4 2BBE              out 0x3b,R2
 02D6                   .dbline 276
 02D6           ;     TIMSK = 0x04; //timer interrupt sources TOIE1 T/C1的溢出中断程序
 02D6 84E0              ldi R24,4
 02D8 89BF              out 0x39,R24
 02DA                   .dbline 277
 02DA           ;     SEI(); //re-enable interrupts
 02DA 7894              sei
 02DC                   .dbline -2
 02DC           L105:
 02DC                   .dbline 0 ; func end
 02DC 0895              ret
 02DE                   .dbend
 02DE                   .dbfunc e main _main fV
                        .even
 02DE           _main::
 02DE                   .dbline -1
 02DE                   .dbline 283
 02DE           ;  //all peripherals are now initialized
 02DE           ; }
 02DE           ; 
 02DE           ; //
 02DE           ; void main(void)
 02DE           ; {
 02DE                   .dbline 284
 02DE           ;     init_devices();
 02DE F5DF              xcall _init_devices
 02E0           L107:
 02E0                   .dbline 285
 02E0           L108:
 02E0                   .dbline 285
 02E0 FFCF              xjmp L107
 02E2           X0:
 02E2                   .dbline -2
 02E2           L106:
 02E2                   .dbline 0 ; func end
 02E2 0895              ret
 02E4                   .dbend

⌨️ 快捷键说明

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