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

📄 main.s

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 S
📖 第 1 页 / 共 4 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
_ADCjohu::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e ADCjohu _ADCjohu L
_ms::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e ms _ms I
_xx::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e xx _xx L
_adc::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e adc _adc I
_lvbo::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e lvbo _lvbo c
_lvbo_num::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e lvbo_num _lvbo_num L
_pwm_pingjun::
	.blkb 1
	.area idata
	.byte 100
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e pwm_pingjun _pwm_pingjun c
_Rpwm0::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e Rpwm0 _Rpwm0 c
_Rpwm1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e Rpwm1 _Rpwm1 c
_Lpwm0::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e Lpwm0 _Lpwm0 c
_Lpwm1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e Lpwm1 _Lpwm1 c
_all::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e all _all c
_a::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e a _a c
_b::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e b _b c
_c::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e c _c c
_d::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e d _d c
_e::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e e _e c
_f::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e f _f c
_jiaodu::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e jiaodu _jiaodu L
_juli::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e juli _juli L
_time::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e time _time I
_sec::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e sec _sec c
_temp1::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e temp1 _temp1 i
_temp2::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e temp2 _temp2 i
_count1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e count1 _count1 c
_shang_johu::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbsym e shang_johu _shang_johu c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 47
; //////////////////////////////
; //////////////////////////////   61493为近似180度
; 
; #include <iom64v.h>
; #include <macros.h>
; 
; #define PREVSONG   BIT(2)
; #define NEXTSONG   BIT(3)
; #define VOLDOWN    BIT(4)
; #define VOLUP      BIT(5)
; #define STOP       BIT(6)
; 
; #define R_pwm0       BIT(4)
; #define R_pwm1       BIT(5)
; #define L_pwm0       BIT(6)
; #define L_pwm1       BIT(7)
; 
; 
; long ADCjohu=0;
; int ms=0;
; long xx=0;
; int adc=0;
; 
; #define REF 483
; unsigned char lvbo=0;
; long lvbo_num=0;
; 
; unsigned char pwm_pingjun=100;//平均速度
; unsigned char Rpwm0=0;
; unsigned char Rpwm1=0;
; unsigned char Lpwm0=0;
; unsigned char Lpwm1=0;
; unsigned char all=0, a=0,b=0,c=0,d=0,e=0,f=0;
; #define CIR 1
; #define LINE 2
; long jiaodu=0,juli=0;
; int time=0;
; unsigned char sec=0;
; 
;         unsigned int temp1=0, temp2=0;  
;         unsigned char count1=0;//0表示一个捕获周期完成,1:准备捕获,2:第一次捕获,3:第二次捕获 
; 
; unsigned char shang_johu=0;//		
; 		
; 		
; void port_init(void)
; {
	.dbline 48
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 49
;  DDRA  = 0x00;
	out 0x1a,R2
	.dbline 50
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 51
;  DDRB  = 0x00;
	out 0x17,R2
	.dbline 52
;  PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 53
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 54
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 55
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline 56
;  PORTE = 0x00;
	out 0x3,R2
	.dbline 57
;  DDRE  = 0x00;
	out 0x2,R2
	.dbline 58
;  PORTF = 0x00;
	sts 98,R2
	.dbline 59
;  DDRF  = 0x00;
	sts 97,R2
	.dbline 60
;  PORTG = 0x00;
	sts 101,R2
	.dbline 61
;  DDRG  = 0x00;
	sts 100,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 69
; }
; 
; //TIMER2 initialize - prescale:64
; // WGM: Normal
; // desired value: 1mSec
; // actual value:  1.000mSec (0.0%)
; void timer2_init(void)
; {
	.dbline 70
;  TCCR2 = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 71
;  TCNT2 = 0x83; //setup
	ldi R24,131
	out 0x24,R24
	.dbline 72
;  OCR2  = 0x7D;
	ldi R24,125
	out 0x23,R24
	.dbline 73
;  TCCR2 = 0x03; //start
	ldi R24,3
	out 0x25,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 40
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	in R0,0x3f
	st -y,R0
	xcall push_xgsetF00C
	.dbline -1
	.dbline 79
; }
; 
; 
; #pragma interrupt_handler timer0_ovf_isr:11
; void timer0_ovf_isr(void)
; {
	.dbline 80
;  TCNT0 = 0x83; //reload counter value
	ldi R24,131
	out 0x32,R24
	.dbline 81
;  if (time>500){sec++;time=0;}
	ldi R24,500
	ldi R25,1
	lds R2,_time
	lds R3,_time+1
	cp R24,R2
	cpc R25,R3
	brge L4
X0:
	.dbline 81
	.dbline 81
	lds R24,_sec
	subi R24,255    ; addi 1
	sts _sec,R24
	.dbline 81
	clr R2
	clr R3
	sts _time+1,R3
	sts _time,R2
	.dbline 81
L4:
	.dbline 82
;  time++;
	lds R24,_time
	lds R25,_time+1
	adiw R24,1
	sts _time+1,R25
	sts _time,R24
	.dbline 83
;  ADCjohu=ADCL;
	in R2,0x4
	clr R3
	clr R4
	clr R5
	sts _ADCjohu+1,R3
	sts _ADCjohu,R2
	sts _ADCjohu+2+1,R5
	sts _ADCjohu+2,R4
	.dbline 84
;  ADCjohu|=ADCH << 8;
	in R2,0x5
	clr R3
	mov R3,R2
	clr R2
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	lds R8,_ADCjohu+2
	lds R9,_ADCjohu+2+1
	lds R6,_ADCjohu
	lds R7,_ADCjohu+1
	or R6,R2
	or R7,R3
	or R8,R4
	or R9,R5
	sts _ADCjohu+1,R7
	sts _ADCjohu,R6
	sts _ADCjohu+2+1,R9
	sts _ADCjohu+2,R8
	.dbline 86
; ///////////////////////////////////////////////////////////////////平均值滤波  1毫秒采样滤波,10毫秒输出
;  if (lvbo==0) {lvbo_num=ADCjohu/2;lvbo++;return;}
	lds R2,_lvbo
	tst R2
	brne L6
X1:
	.dbline 86
	.dbline 86
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R16,R6
	movw R18,R8
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32s
	sts _lvbo_num+1,R17
	sts _lvbo_num,R16
	sts _lvbo_num+2+1,R19
	sts _lvbo_num+2,R18
	.dbline 86
	lds R24,_lvbo
	subi R24,255    ; addi 1
	sts _lvbo,R24
	.dbline 86
	xjmp L3
L6:
	.dbline 87
;  if (lvbo<10) {lvbo_num+=ADCjohu/2;lvbo++;return;}
	lds R24,_lvbo
	cpi R24,10
	brsh L8
X2:
	.dbline 87
	.dbline 87
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R18,_ADCjohu+2
	lds R19,_ADCjohu+2+1
	lds R16,_ADCjohu
	lds R17,_ADCjohu+1
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32s
	lds R4,_lvbo_num+2
	lds R5,_lvbo_num+2+1
	lds R2,_lvbo_num
	lds R3,_lvbo_num+1
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	sts _lvbo_num+1,R3
	sts _lvbo_num,R2
	sts _lvbo_num+2+1,R5
	sts _lvbo_num+2,R4
	.dbline 87
	lds R24,_lvbo
	subi R24,255    ; addi 1
	sts _lvbo,R24
	.dbline 87
	xjmp L3
L8:
	.dbline 88
;  	else lvbo=0;/**/
	clr R2
	sts _lvbo,R2
	.dbline 90
; //////////////////////////////////////////////////////////////////////////////
;  if ( (ADCjohu<REF-6) || (ADCjohu>REF+6))
	ldi R20,221
	ldi R21,1
	ldi R22,0
	ldi R23,0
	lds R4,_ADCjohu+2
	lds R5,_ADCjohu+2+1
	lds R2,_ADCjohu
	lds R3,_ADCjohu+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brlt L12
X3:
	ldi R20,233
	ldi R21,1
	ldi R22,0
	ldi R23,0
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brge L10
X4:
L12:
	.dbline 91
;  	{
	.dbline 93
; 	 //ADCjohu-=511-10;//-511+31-3.27371     -10
;  	 xx=xx+ADCjohu-REF;//
	lds R4,_ADCjohu+2
	lds R5,_ADCjohu+2+1
	lds R2,_ADCjohu
	lds R3,_ADCjohu+1
	lds R8,_xx+2
	lds R9,_xx+2+1
	lds R6,_xx
	lds R7,_xx+1
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	ldi R20,227
	ldi R21,1
	ldi R22,0
	ldi R23,0
	sub R6,R20
	sbc R7,R21
	sbc R8,R22
	sbc R9,R23
	sts _xx+1,R7
	sts _xx,R6
	sts _xx+2+1,R9
	sts _xx+2,R8
	.dbline 94
; 	}
L10:
	.dbline 95
;  ms=1;
	ldi R24,1
	ldi R25,0
	sts _ms+1,R25
	sts _ms,R24
	.dbline -2
L3:
	.dbline 0 ; func end
	xcall pop_xgsetF00C
	ld R0,y+
	out 0x3f,R0
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 103
; //ADCjohu==ADCL;
; //PORTD=ADCjohu;
; }
; 
; //ADC initialize
; // Conversion time: 3uS
; void adc_init(void)
; {
	.dbline 104
;  ADCSRA = 0x00; //disable adc
	clr R2
	out 0x6,R2
	.dbline 105
;  ADMUX = 0x01; //select adc input 0
	ldi R24,1
	out 0x7,R24
	.dbline 106
;  ACSR  = 0x80;
	ldi R24,128
	out 0x8,R24
	.dbline 108
; // ADCSRB = 0x00;
;  ADCSRA = 0xEf;
	ldi R24,239
	out 0x6,R24
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 84
	jmp _adc_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	st -y,R2
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 113
; }
; 
; #pragma interrupt_handler adc_isr:22
; void adc_isr(void)
; {
	.dbline 121
;  //conversion complete, read value (int) using...
;  // value=ADCL;            //Read 8 low bits first (important)
;  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
;  //ADCjohu==ADCL;
;  //ADCjohu|=(int)ADCH << 8;
;  //PORTD=ADCjohu;
;  //adc=1;
;  PORTA=ADCL;
	in R2,0x4
	out 0x1b,R2
	.dbline -2
L14:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R2,y+
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 127
; 
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 129
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 130
;  XDIV  = 0x00; //xtal divider
	clr R2
	out 0x3c,R2
	.dbline 131
;  XMCRA = 0x00; //external memory
	sts 109,R2
	.dbline 132
;  port_init();
	xcall _port_init
	.dbline 133
;  timer2_init(); 
	xcall _timer2_init
	.dbline 135
; 
; adc_init();uart1_init();
	xcall _adc_init
	.dbline 135
	xcall _uart1_init
	.dbline 137
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 138
;  EICRA = 0x00; //extended ext ints
	sts 106,R2
	.dbline 139
;  EICRB = 0x00; //extended ext ints
	out 0x3a,R2
	.dbline 140
;  EIMSK = 0x00;
	out 0x39,R2
	.dbline 141
;  TIMSK = 0x20; //timer interrupt sources
	ldi R24,32
	out 0x37,R24
	.dbline 142
;  ETIMSK = 0x00; //extended timer interrupt sources
	sts 125,R2
	.dbline 143

⌨️ 快捷键说明

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