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

📄 frequence.s

📁 使用Mega16编制的频率检测程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -