📄 main.s
字号:
.module MAIN.C
.area text(rom, con, rel)
.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
.area vector(rom, abs)
.org 32
rjmp _Icp_time0
.area text(rom, con, rel)
.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
.area vector(rom, abs)
.org 2
rjmp _Int0
.area text(rom, con, rel)
.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
.dbfunc e main _main fV
; flag -> R10
; deciMeter -> R12
; ep_temp -> R10,R11
; ep_temp1 -> R10
; ep_temp2 -> R12
; speed_temp1 -> R12,R13
; speed2 -> R12
; speed1 -> R14
; timeBlock -> y+2
; speed_temp -> y+0
; temp -> R10
.even
_main::
sbiw R28,4
.dbline -1
.dbline 29
; //**************************************************
; //project :SPEED TO POWER SWITCH
; //chiptype :ATMEGA48
; //Clock frequency :8.00000MHZ
; //Author :XIEHELI
; //From :HORN
; //**************************************************
; #include<iom48v.h>
; #include<macros.h>
; #define u08 unsigned char
; #define u16 unsigned int
; #define u32 unsigned long
; #pragma interrupt_handler Icp_time0:17
; #pragma interrupt_handler Int0:2
; void sendData(u08 cbit);
; void delay(u08 tick);
; void port_init(void);
; void time_init(void);
; void delayms(u08 time);
; void delays(u08 time1);
; u16 speed_test(void);
; void eeprom_write(u16 adrw,u08 add);
; u08 eeprom_read(u16 adrr);
; //u16 data;
; u16 data_temp1;
; u16 data_temp2;
; //u08 number;
; void main(void)
; {
.dbline 41
; u08 temp;
; //u08 temp1;
; u16 ep_temp;
; u08 speed1;
; u08 speed2;
; u08 ep_temp1;
; u08 ep_temp2;
; u16 speed_temp;
; u16 speed_temp1;
; u08 flag;
; u08 deciMeter;
; u16 timeBlock=111;
ldi R24,111
ldi R25,0
std y+3,R25
std y+2,R24
.dbline 46
; //u08 num_temp1;
; //u08 num_temp2;
; //u08 temp3;
; //u08 temp2;
; flag=0x00;
clr R10
.dbline 47
; port_init(); //I/O口初始化
rcall _port_init
.dbline 48
; time_init();
rcall _time_init
.dbline 50
; //temp1=0;
; speed_temp=0;
clr R0
clr R1
std y+1,R1
std y+0,R0
.dbline 51
; SREG|=0x80;
bset 7
.dbline 52
; NOP();
nop
.dbline 53
; NOP();
nop
.dbline 54
; NOP();
nop
.dbline 55
; NOP();
nop
.dbline 56
; NOP();
nop
.dbline 57
; NOP();
nop
.dbline 58
; NOP();
nop
.dbline 59
; NOP();
nop
rjmp L3
L2:
.dbline 61
; while(1)
; {
.dbline 62
; temp=0;
clr R10
.dbline 65
; //delayms(10);
; //delays(50);
; delay(255);
ldi R16,255
rcall _delay
.dbline 66
; delay(26);
ldi R16,26
rcall _delay
L5:
.dbline 67
; while((0x10&0x10)&&(++timeBlock<896));//计算距离,将距离和数据对应
L6:
.dbline 67
ldd R24,y+2
ldd R25,y+3
adiw R24,1
movw R2,R24
std y+3,R3
std y+2,R2
cpi R24,128
ldi R30,3
cpc R25,R30
brlo L5
X0:
.dbline 68
; deciMeter=(u32)timeBlock*15*18/9300;
clr R4
clr R5
ldi R20,15
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
rcall empy32u
ldi R20,18
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R20
movw R18,R22
rcall empy32u
ldi R20,84
ldi R21,36
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
rcall div32u
mov R12,R16
rjmp L9
L8:
.dbline 70
; while(temp<=100)
; {
.dbline 71
; sendData(0x37);
ldi R16,55
rcall _sendData
.dbline 72
; temp++;
inc R10
.dbline 73
; }
L9:
.dbline 69
ldi R24,100
cp R24,R10
brsh L8
X1:
rjmp L12
L11:
.dbline 75
; while((PIND&0x20)&&(temp<=100))//判断按键是否按下1s,设定车速信号
; {
.dbline 77
; //temp=50;
; delayms(10);
ldi R16,10
rcall _delayms
.dbline 78
; temp++; //speed=speed_test(); //测定车速信号
inc R10
.dbline 79
; if((PIND&0x20)&&(temp==99))
sbis 0x9,5
rjmp L14
X2:
mov R24,R10
cpi R24,99
brne L14
X3:
.dbline 80
; {
.dbline 81
; speed_temp=data_temp2; //测定车速信号
lds R2,_data_temp2
lds R3,_data_temp2+1
std y+1,R3
std y+0,R2
.dbline 82
; speed_temp1=speed_temp;
movw R12,R2
.dbline 83
; speed1=(u08)(speed_temp&0x00ff);
movw R24,R2
andi R25,0
mov R14,R24
.dbline 84
; speed2=(u08)(speed_temp1>>8);
mov R12,R13
clr R13
.dbline 85
; SREG=0x00;
clr R2
out 0x3f,R2
.dbline 86
; eeprom_write(0x0025,speed1);//将用户设定车速写进EEPROM
mov R18,R24
ldi R16,37
ldi R17,0
rcall _eeprom_write
.dbline 88
; //delayms(20);
; eeprom_write(0x0026,speed2);
mov R18,R12
ldi R16,38
ldi R17,0
rcall _eeprom_write
.dbline 89
; temp=111;
ldi R24,111
mov R10,R24
.dbline 90
; SREG|=0x80;
bset 7
.dbline 91
; }
rjmp L15
L14:
.dbline 93
; else
; NOP();
nop
L15:
.dbline 94
; }
L12:
.dbline 74
sbis 0x9,5
rjmp L16
X4:
ldi R24,100
cp R24,R10
brsh L11
X5:
L16:
.dbline 95
; SREG=0x00;
clr R2
out 0x3f,R2
.dbline 96
; ep_temp1=eeprom_read(0x0025);//读取EEPROM中用户设定的车速
ldi R16,37
ldi R17,0
rcall _eeprom_read
mov R10,R16
.dbline 98
; //delayms(20);
; ep_temp2=eeprom_read(0x0026);
ldi R16,38
ldi R17,0
rcall _eeprom_read
mov R12,R16
.dbline 99
; SREG|=0x80;
bset 7
.dbline 100
; ep_temp=(ep_temp2<<8)+ep_temp1;
mov R11,R12
.dbline 101
; speed_temp=data_temp2; //调用测定车速信号
lds R2,_data_temp2
lds R3,_data_temp2+1
std y+1,R3
std y+0,R2
.dbline 102
; sendData(ep_temp2);
rcall _sendData
.dbline 103
; delays(1);
ldi R16,1
rcall _delays
.dbline 104
; }
L3:
.dbline 60
rjmp L2
X6:
.dbline -2
L1:
.dbline 0 ; func end
adiw R28,4
ret
.dbsym r flag 10 c
.dbsym r deciMeter 12 c
.dbsym r ep_temp 10 i
.dbsym r ep_temp1 10 c
.dbsym r ep_temp2 12 c
.dbsym r speed_temp1 12 i
.dbsym r speed2 12 c
.dbsym r speed1 14 c
.dbsym l timeBlock 2 i
.dbsym l speed_temp 0 i
.dbsym r temp 10 c
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 107
; }
; void port_init(void)
; {
.dbline 108
; DDRB=0x10;
ldi R24,16
out 0x4,R24
.dbline 109
; DDRC=0x02;
ldi R24,2
out 0x7,R24
.dbline 110
; DDRD=0x00;
clr R2
out 0xa,R2
.dbline 111
; PORTC=0x00;
out 0x8,R2
.dbline 112
; PORTB=0x00;
out 0x5,R2
.dbline 113
; PORTD=0x00;
out 0xb,R2
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e time_init _time_init fV
.even
_time_init::
.dbline -1
.dbline 116
; }
; void time_init(void)
; {
.dbline 117
; TCCR0A=0x00;
clr R2
out 0x24,R2
.dbline 118
; TCCR0B=0x03;
ldi R24,3
out 0x25,R24
.dbline 119
; TIMSK0=0x01;
ldi R24,1
sts 110,R24
.dbline 120
; TIFR0=0x01;
out 0x15,R24
.dbline 121
; TCNT0=0xc0;
ldi R24,192
out 0x26,R24
.dbline 122
; EICRA=0x01;
ldi R24,1
sts 105,R24
.dbline 123
; EIMSK=0x01;
out 0x1d,R24
.dbline 124
; EIFR=0x01;
out 0x1c,R24
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbend
.dbfunc e eeprom_write _eeprom_write fV
; add -> R18
; adrw -> R16,R17
.even
_eeprom_write::
.dbline -1
.dbline 127
; }
; void eeprom_write(u16 adrw,u08 add)
; {
L20:
.dbline 129
; /* 等待上一次写操作结束 */
; while(EECR & (1<<EEPE));
L21:
.dbline 129
sbic 0x1f,1
rjmp L20
X7:
.dbline 131
; /* 设置地址和数据寄存器 */
; EEAR=adrw;
out 0x22,R17
out 0x21,R16
.dbline 132
; EEDR=add;
out 0x20,R18
.dbline 134
; /* 置位EEMWE */
; EECR|=(1<<EEMPE);
sbi 0x1f,2
.dbline 136
; /* 置位EEWE 以启动写操作E */
; EECR|=(1<<EEPE);
sbi 0x1f,1
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbsym r add 18 c
.dbsym r adrw 16 i
.dbend
.dbfunc e eeprom_read _eeprom_read fc
; adrr -> R16,R17
.even
_eeprom_read::
.dbline -1
.dbline 139
; }
; u08 eeprom_read(u16 adrr)
; {
L24:
.dbline 141
; /* 等待上一次写操作结束 */
; while(EECR & (1<<EEPE));
L25:
.dbline 141
sbic 0x1f,1
rjmp L24
X8:
.dbline 143
; /* 设置地址寄存器 */
; EEAR=adrr;
out 0x22,R17
out 0x21,R16
.dbline 145
; /* 设置EERE 以启动读操作 */
; EECR|=(1<<EERE);
sbi 0x1f,0
.dbline 147
; /* 自数据寄存器返回数据 */
; return EEDR;
in R16,0x20
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbsym r adrr 16 i
.dbend
.dbfunc e delay _delay fV
; tick -> R16
.even
_delay::
.dbline -1
.dbline 150
; }
; void delay(u08 tick)
; {
L28:
.dbline 151
; while(--tick);
L29:
.dbline 151
mov R24,R16
subi R24,1
mov R16,R24
tst R24
brne L28
X9:
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbsym r tick 16 c
.dbend
.dbfunc e delayms _delayms fV
; tim1 -> R12
; i -> R10
; time -> R10
.even
_delayms::
st -y,R10
st -y,R12
mov R10,R16
.dbline -1
.dbline 154
; }
; void delayms(u08 time)
; {
.dbline 156
; u08 tim1,i;
; tim1=time;
mov R12,R10
.dbline 157
; for(i=0;i<tim1;i++)
clr R10
rjmp L35
L32:
.dbline 158
; {
.dbline 159
; delay(50);
ldi R16,50
rcall _delay
.dbline 160
; }
L33:
.dbline 157
inc R10
L35:
.dbline 157
cp R10,R12
brlo L32
X10:
.dbline -2
L31:
.dbline 0 ; func end
ld R12,y+
ld R10,y+
ret
.dbsym r tim1 12 c
.dbsym r i 10 c
.dbsym r time 10 c
.dbend
.dbfunc e delays _delays fV
; tim2 -> R12
; j -> R10
; time1 -> R10
.even
_delays::
st -y,R10
st -y,R12
mov R10,R16
.dbline -1
.dbline 163
; }
; void delays(u08 time1)
; {
.dbline 165
; u08 tim2,j;
; tim2=time1;
mov R12,R10
.dbline 166
; for(j=0;j<tim2;j++)
clr R10
rjmp L40
L37:
.dbline 167
; {
.dbline 168
; delayms(250);
ldi R16,250
rcall _delayms
.dbline 169
; }
L38:
.dbline 166
inc R10
L40:
.dbline 166
cp R10,R12
brlo L37
X11:
.dbline -2
L36:
.dbline 0 ; func end
ld R12,y+
ld R10,y+
ret
.dbsym r tim2 12 c
.dbsym r j 10 c
.dbsym r time1 10 c
.dbend
.dbfunc e Icp_time0 _Icp_time0 fV
.even
_Icp_time0::
st -y,R2
st -y,R3
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 172
; }
; void Icp_time0(void)
; {
.dbline 173
; SREG=0x00;
clr R2
out 0x3f,R2
.dbline 174
; TIFR0=0x01;
ldi R24,1
out 0x15,R24
.dbline 175
; data_temp2=data_temp1;
lds R2,_data_temp1
lds R3,_data_temp1+1
sts _data_temp2+1,R3
sts _data_temp2,R2
.dbline 176
; data_temp1=0x0000;
clr R2
clr R3
sts _data_temp1+1,R3
sts _data_temp1,R2
.dbline 177
; TCNT0=0xc0;
ldi R24,192
out 0x26,R24
.dbline 178
; SREG|=0x80;
bset 7
.dbline -2
L41:
.dbline 0 ; func end
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
reti
.dbend
.dbfunc e Int0 _Int0 fV
.even
_Int0::
st -y,R24
st -y,R25
in R24,0x3f
st -y,R24
.dbline -1
.dbline 181
; }
; void Int0(void)
; {
.dbline 183
; //SREG=0x00;
; data_temp1++;
lds R24,_data_temp1
lds R25,_data_temp1+1
adiw R24,1
sts _data_temp1+1,R25
sts _data_temp1,R24
.dbline -2
L42:
.dbline 0 ; func end
ld R24,y+
out 0x3f,R24
ld R25,y+
ld R24,y+
reti
.dbend
.dbfunc e sendData _sendData fV
; hbit -> R10
; k -> R20
; cbit -> R22
.even
_sendData::
rcall push_xgsetF00C
mov R22,R16
.dbline -1
.dbline 187
; //SREG|=0x80;
; }
; void sendData(u08 cbit)
; {
.dbline 191
; u08 k;
; u08 hbit;
; //hbit=0x01;
; PORTC=0x02;
ldi R24,2
out 0x8,R24
.dbline 192
; delay(180);
ldi R16,180
rcall _delay
.dbline 193
; PORTC=0x00;
clr R2
out 0x8,R2
.dbline 194
; delay(15);
ldi R16,15
rcall _delay
.dbline 198
; //delay(26);
; //PORTB=0x08;
; //buz(cbit);
; for(k=0;k<8;k++)
clr R20
rjmp L47
L44:
.dbline 199
; {
.dbline 200
; hbit=(cbit&0x80);
mov R24,R22
andi R24,128
mov R10,R24
.dbline 201
; if(hbit)
tst R24
breq L48
X12:
.dbline 202
; {
.dbline 203
; PORTC=0x02;
ldi R24,2
out 0x8,R24
.dbline 204
; delay(16);
ldi R16,16
rcall _delay
.dbline 205
; PORTC=0x00;
clr R2
out 0x8,R2
.dbline 206
; delay(50);
ldi R16,50
rcall _delay
.dbline 208
; //PORTB=0x00;
; }
rjmp L49
L48:
.dbline 210
; else
; {
.dbline 211
; PORTC=0x02;
ldi R24,2
out 0x8,R24
.dbline 212
; delay(50);
ldi R16,50
rcall _delay
.dbline 213
; PORTC=0x00;
clr R2
out 0x8,R2
.dbline 214
; delay(16);
ldi R16,16
rcall _delay
.dbline 216
; //PORTB=0x00;
; }
L49:
.dbline 217
; cbit<<=1;
lsl R22
.dbline 218
; }
L45:
.dbline 198
inc R20
L47:
.dbline 198
cpi R20,8
brlo L44
X13:
.dbline -2
L43:
.dbline 0 ; func end
rjmp pop_xgsetF00C
.dbsym r hbit 10 c
.dbsym r k 20 c
.dbsym r cbit 22 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
_data_temp2::
.blkb 2
.dbsym e data_temp2 _data_temp2 i
_data_temp1::
.blkb 2
.dbsym e data_temp1 _data_temp1 i
; //buz(cbit);
; }
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -