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

📄 main.s

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\main.c
	.dbsym e sec _sec c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 43
; //////////////////////////////
; //////////////////////////////   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;
; 
; 
; 
; void port_init(void)
; {
	.dbline 44
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 45
;  DDRA  = 0x00;
	out 0x1a,R2
	.dbline 46
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 47
;  DDRB  = 0x00;
	out 0x17,R2
	.dbline 48
;  PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 49
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 50
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 51
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline 52
;  PORTE = 0x00;
	out 0x3,R2
	.dbline 53
;  DDRE  = 0x00;
	out 0x2,R2
	.dbline 54
;  PORTF = 0x00;
	sts 98,R2
	.dbline 55
;  DDRF  = 0x00;
	sts 97,R2
	.dbline 56
;  PORTG = 0x00;
	sts 101,R2
	.dbline 57
;  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 65
; }
; 
; //TIMER2 initialize - prescale:64
; // WGM: Normal
; // desired value: 1mSec
; // actual value:  1.000mSec (0.0%)
; void timer2_init(void)
; {
	.dbline 66
;  TCCR2 = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 67
;  TCNT2 = 0x83; //setup
	ldi R24,131
	out 0x24,R24
	.dbline 68
;  OCR2  = 0x7D;
	ldi R24,125
	out 0x23,R24
	.dbline 69
;  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\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 75
; }
; 
; 
; #pragma interrupt_handler timer0_ovf_isr:11
; void timer0_ovf_isr(void)
; {
	.dbline 76
;  TCNT0 = 0x83; //reload counter value
	ldi R24,131
	out 0x32,R24
	.dbline 77
;  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 77
	.dbline 77
	lds R24,_sec
	subi R24,255    ; addi 1
	sts _sec,R24
	.dbline 77
	clr R2
	clr R3
	sts _time+1,R3
	sts _time,R2
	.dbline 77
L4:
	.dbline 78
;  time++;
	lds R24,_time
	lds R25,_time+1
	adiw R24,1
	sts _time+1,R25
	sts _time,R24
	.dbline 79
;  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 80
;  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 82
; ///////////////////////////////////////////////////////////////////平均值滤波  1毫秒采样滤波,10毫秒输出
;  if (lvbo==0) {lvbo_num=ADCjohu/2;lvbo++;return;}
	lds R2,_lvbo
	tst R2
	brne L6
X1:
	.dbline 82
	.dbline 82
	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 82
	lds R24,_lvbo
	subi R24,255    ; addi 1
	sts _lvbo,R24
	.dbline 82
	xjmp L3
L6:
	.dbline 83
;  if (lvbo<10) {lvbo_num+=ADCjohu/2;lvbo++;return;}
	lds R24,_lvbo
	cpi R24,10
	brsh L8
X2:
	.dbline 83
	.dbline 83
	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 83
	lds R24,_lvbo
	subi R24,255    ; addi 1
	sts _lvbo,R24
	.dbline 83
	xjmp L3
L8:
	.dbline 84
;  	else lvbo=0;/**/
	clr R2
	sts _lvbo,R2
	.dbline 86
; //////////////////////////////////////////////////////////////////////////////
;  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 87
;  	{
	.dbline 89
; 	 //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 90
; 	}
L10:
	.dbline 91
;  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 99
; //ADCjohu==ADCL;
; //PORTD=ADCjohu;
; }
; 
; //ADC initialize
; // Conversion time: 3uS
; void adc_init(void)
; {
	.dbline 100
;  ADCSRA = 0x00; //disable adc
	clr R2
	out 0x6,R2
	.dbline 101
;  ADMUX = 0x01; //select adc input 0
	ldi R24,1
	out 0x7,R24
	.dbline 102
;  ACSR  = 0x80;
	ldi R24,128
	out 0x8,R24
	.dbline 104
; // 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\main.c
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	st -y,R2
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 109
; }
; 
; #pragma interrupt_handler adc_isr:22
; void adc_isr(void)
; {
	.dbline 117
;  //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 123
; 
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 125
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 126
;  XDIV  = 0x00; //xtal divider
	clr R2
	out 0x3c,R2
	.dbline 127
;  XMCRA = 0x00; //external memory
	sts 109,R2
	.dbline 128
;  port_init();
	xcall _port_init
	.dbline 129
;  timer2_init(); 
	xcall _timer2_init
	.dbline 131
; 
; adc_init();uart1_init();
	xcall _adc_init
	.dbline 131
	xcall _uart1_init
	.dbline 133
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 134
;  EICRA = 0x00; //extended ext ints
	sts 106,R2
	.dbline 135
;  EICRB = 0x00; //extended ext ints
	out 0x3a,R2
	.dbline 136
;  EIMSK = 0x00;
	out 0x39,R2
	.dbline 137
;  TIMSK = 0x40; //timer interrupt sources
	ldi R24,64
	out 0x37,R24
	.dbline 138
;  ETIMSK = 0x00; //extended timer interrupt sources
	sts 125,R2
	.dbline 139
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart1_init _uart1_init fV
	.even
_uart1_init::
	.dbline -1
	.dbline 146
;  //all peripherals are now initialized
; }
; //UART1 initialize
; // desired baud rate:9600
; // actual baud rate:9615 (0.2%)
; void uart1_init(void)
; {
	.dbline 147
;  UCSR1B = 0x00; //disable while setting baud rate
	clr R2
	sts 154,R2
	.dbline 148
;  UCSR1A = 0x00;
	sts 155,R2
	.dbline 149
;  UCSR1C = 0x06;
	ldi R24,6
	sts 157,R24
	.dbline 150
;  UBRR1L = 0x33; //set baud rate lo
	ldi R24,51
	sts 153,R24
	.dbline 151
;  UBRR1H = 0x00; //set baud rate hi
	sts 152,R2
	.dbline 152
;  UCSR1B = 0x98;
	ldi R24,152
	sts 154,R24
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 120
	jmp _uart1_rx_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\main.c
	.dbfunc e uart1_rx_isr _uart1_rx_isr fV
	.even
_uart1_rx_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	.dbline -1
	.dbline 158
; }
; 
; #pragma interrupt_handler uart1_rx_isr:31
; //cir+00100
; void uart1_rx_isr(void)
; {
	.dbline 160
;  //uart has received a character in UDR
;  if (all==CIR)
	lds R24,_all
	cpi R24,1
	breq X25
	xjmp L18
X25:
X5:
	.dbline 161
;  	{
	.dbline 162
; 	   a=b;
	lds R2,_b
	sts _a,R2
	.dbline 163
; 	   b=c;
	lds R2,_c
	sts _b,R2
	.dbline 164
; 	   c=d;
	lds R2,_d
	sts _c,R2
	.dbline 165
; 	   d=e;
	lds R2,_e
	sts _d,R2
	.dbline 166
; 	   e=f;
	lds R2,_f
	sts _e,R2
	.dbline 167
; 	   f=UDR1;
	lds R2,156
	sts _f,R2
	.dbline 168
; 	   if ((f<'0')||(f>'9'))return;
	mov R24,R2
	cpi R24,48
	brlo L22
X6:
	ldi R24,57
	cp R24,R2
	brsh L20
X7:
L22:
	.dbline 168
	xjmp L17
L20:
	.dbline 169
; 	   if (a=='+')//0x2b
	lds R24,_a
	cpi R24,43
	breq X26
	xjmp L23
X26:
X8:
	.dbline 170
; 	   	  {jiaodu=(b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48);
	.dbline 170
	lds R18,_c
	clr R19
	ldi R16,1000
	ldi R17,3
	xcall empy16s
	movw R24,R16
	subi R24,128
	sbci R25,187
	lds R18,_b
	clr R19
	ldi R16,10000
	ldi R17,39
	xcall empy16s
	movw R30,R16
	subi R30,0
	sbci R31,83
	add R30,R24
	adc R31,R25
	lds R2,_d
	ldi R24,100
	mul R24,R2
	movw R24,R0
	subi R24,192
	sbci R25,18
	add R30,R24
	adc R31,R25
	lds R2,_e
	ldi R24,10
	mul R24,R2
	movw R24,R0
	subi R24,224
	sbci R25,1
	add R30,R24

⌨️ 快捷键说明

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