📄 main.s
字号:
.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 + -