📄 frequence.lis
字号:
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 + -