📄 frequence.s
字号:
clr R3
subi R22,1
tst R2
brne L59
.dbline 156
; }
xjmp L52
L51:
.dbline 158
; else
; {
.dbline 159
; ClrB(DIO);
ldi R16,2
xcall _ClrB
.dbline 160
; j=Delay;
ldi R22,2
L62:
.dbline 161
L63:
.dbline 161
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L62
.dbline 163
;
; SetB(CLK);
ldi R16,1
xcall _SetB
.dbline 164
; j=Delay;
ldi R22,2
L65:
.dbline 165
L66:
.dbline 165
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L65
.dbline 167
;
; ClrB(CLK);
ldi R16,1
xcall _ClrB
.dbline 168
; j=Delay;
ldi R22,2
L68:
.dbline 169
L69:
.dbline 169
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L68
.dbline 170
; }
L52:
.dbline 171
lsl R12
.dbline 172
L48:
.dbline 141
inc R20
L50:
.dbline 141
cpi R20,8
brlo L47
.dbline 173
; Cmd<<=1;
; }//发送命令
; for(i=0;i<8;i++)
clr R20
xjmp L74
L71:
.dbline 174
; {//发送参数
.dbline 175
; if(0x80&Data)
sbrs R10,7
rjmp L75
.dbline 176
; {
.dbline 177
; SetB(DIO);
ldi R16,2
xcall _SetB
.dbline 178
; j=Delay;
ldi R22,2
L77:
.dbline 179
L78:
.dbline 179
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L77
.dbline 181
;
; SetB(CLK);
ldi R16,1
xcall _SetB
.dbline 182
; j=Delay;
ldi R22,2
L80:
.dbline 183
L81:
.dbline 183
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L80
.dbline 185
;
; ClrB(CLK);
ldi R16,1
xcall _ClrB
.dbline 186
; j=Delay;
ldi R22,2
L83:
.dbline 187
L84:
.dbline 187
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L83
.dbline 188
; }
xjmp L76
L75:
.dbline 190
; else
; {
.dbline 191
; ClrB(DIO);
ldi R16,2
xcall _ClrB
.dbline 192
; j=Delay;
ldi R22,2
L86:
.dbline 193
L87:
.dbline 193
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L86
.dbline 195
;
; SetB(CLK);
ldi R16,1
xcall _SetB
.dbline 196
; j=Delay;
ldi R22,2
L89:
.dbline 197
L90:
.dbline 197
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L89
.dbline 199
;
; ClrB(CLK);
ldi R16,1
xcall _ClrB
.dbline 200
; j=Delay;
ldi R22,2
L92:
.dbline 201
L93:
.dbline 201
; while(j--);
mov R2,R22
clr R3
subi R22,1
tst R2
brne L92
.dbline 202
; }
L76:
.dbline 203
lsl R10
.dbline 204
L72:
.dbline 173
inc R20
L74:
.dbline 173
cpi R20,8
brlo L71
.dbline 205
; Data<<=1;
; }//发送参数
; SetB(CS);
clr R16
xcall _SetB
.dbline -2
L37:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbsym r Data 10 c
.dbsym r Cmd 12 c
.dbend
.dbfunc e DispChar _DispChar fV
; num -> R22
; Addr -> R20
.even
_DispChar::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 209
; }
;
; void DispChar(unsigned char Addr,unsigned char num)
; {//地址Addr为数码管某一位,数值0-7
.dbline 213
; //用于在指定位置显示数据,当num为0~9时,显示同数字
; //当num为10~15时,显示A~F,当num为16~21时,显示 - E H L P (空)
; //当num为50~59时,显示0.~9.,当num为60~65时,显示A.~F.
; if(num>=0&&num<16)//显示16进制数
cpi R22,0
brlo L96
cpi R22,16
brsh L96
.dbline 214
; {
.dbline 215
; WriteTwo7289(DispMethod1+Addr,num);
mov R18,R22
mov R16,R20
subi R16,56 ; addi 200
xcall _WriteTwo7289
.dbline 216
; }
L96:
.dbline 217
; if(num>=50&&num<66)//显示带小数点的16进制数
cpi R22,50
brlo L98
cpi R22,66
brsh L98
.dbline 218
; {
.dbline 219
; WriteTwo7289(DispMethod1+Addr,0x80+num);
mov R18,R22
subi R18,128 ; addi 128
mov R16,R20
subi R16,56 ; addi 200
xcall _WriteTwo7289
.dbline 220
; }
L98:
.dbline 221
cpi R22,16
brlo L100
cpi R22,22
brsh L100
.dbline 222
.dbline 223
mov R18,R22
subi R18,6
mov R16,R20
subi R16,128 ; addi 128
xcall _WriteTwo7289
.dbline 224
L100:
.dbline -2
L95:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r num 22 c
.dbsym r Addr 20 c
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 230
; if(num>=16&&num<22)//显示特殊符号
; {
; WriteTwo7289(DispMethod0+Addr,num-6);
; }
; }
;
; //TIMER0 initialize - prescale:Falling edge
; //用于记录外部引脚的变化
; void timer0_init(void)
; {
.dbline 231
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 232
; TCNT0 = 0x00 /*INVALID SETTING*/; //set count
out 0x32,R2
.dbline 233
; TCCR0 = 0x06; //启动计数器,记录低脉冲个数
ldi R24,6
out 0x33,R24
.dbline -2
L102:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 241
; }
;
; //TIMER1 initialize - prescale:1
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 1000Hz
; //用于产生1KHz的中断
; void timer1_init(void)
; {
.dbline 242
; TCCR1B = 0x00; //计时停止
clr R2
out 0x2e,R2
.dbline 243
; TCNT1H = 0xFC; //设置计数次数64536
ldi R24,252
out 0x2d,R24
.dbline 244
; TCNT1L = 0x18;
ldi R24,24
out 0x2c,R24
.dbline 246
;
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 247
; TCCR1B = 0x01; //启动定时器
ldi R24,1
out 0x2e,R24
.dbline -2
L103:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 32
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile D:\单片机编程\iccavr\频率检测\Frequence.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
xcall push_lset
.dbline -1
.dbline 252
; }
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 254
; //TIMER1 has overflowed
; TCNT1H = 0xFC; //reload counter high value
ldi R24,252
out 0x2d,R24
.dbline 255
; TCNT1L = 0x18; //reload counter low value
ldi R24,24
out 0x2c,R24
.dbline 257
;
; TCCR0=0x00;
clr R2
out 0x33,R2
.dbline 258
; frequence=TCNT0;//读入脉冲个数
in R2,0x32
sts _frequence,R2
.dbline 259
; TCNT0=0;
clr R2
out 0x32,R2
.dbline 260
; TCCR0=0x06;//启动计数器,低电平记录
ldi R24,6
out 0x33,R24
.dbline 262
;
; DispChar(1,frequence/10);
ldi R17,10
lds R16,_frequence
xcall div8u
mov R18,R16
ldi R16,1
xcall _DispChar
.dbline 263
; DispChar(0,frequence%10);
ldi R17,10
lds R16,_frequence
xcall mod8u
mov R18,R16
clr R16
xcall _DispChar
.dbline -2
L104:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 268
; }
;
; //初始化所有设备
; void init_devices(void)
; {
.dbline 270
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 271
; timer0_init();
xcall _timer0_init
.dbline 272
; timer1_init();
xcall _timer1_init
.dbline 274
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 275
; GICR = 0x00;
out 0x3b,R2
.dbline 276
; TIMSK = 0x04; //timer interrupt sources TOIE1 T/C1的溢出中断程序
ldi R24,4
out 0x39,R24
.dbline 277
; SEI(); //re-enable interrupts
sei
.dbline -2
L105:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 283
; //all peripherals are now initialized
; }
;
; //
; void main(void)
; {
.dbline 284
; init_devices();
xcall _init_devices
L107:
.dbline 285
L108:
.dbline 285
xjmp L107
X0:
.dbline -2
L106:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -