📄 eeprom.lst
字号:
__start:
__text_start:
1A EFCF LDI R28,0xFF
1B E0D2 LDI R29,2
1C BFCD OUT 0x3D,R28
1D BFDE OUT 0x3E,R29
1E 51C0 SUBI R28,0x10
1F 40D0 SBCI R29,0
20 EA0A LDI R16,0xAA
21 8308 STD Y+0,R16
22 2400 CLR R0
23 E0E0 LDI R30,0
24 E0F1 LDI R31,1
25 E011 LDI R17,1
26 30E4 CPI R30,4
27 07F1 CPC R31,R17
28 F011 BEQ 0x002B
29 9201 ST R0,Z+
2A CFFB RJMP 0x0026
2B 8300 STD Z+0,R16
2C E3E4 LDI R30,0x34
2D E0F0 LDI R31,0
2E E0A0 LDI R26,0
2F E0B1 LDI R27,1
30 E010 LDI R17,0
31 E000 LDI R16,0
32 BF0B OUT 0x3B,R16
33 33E4 CPI R30,0x34
34 07F1 CPC R31,R17
35 F021 BEQ 0x003A
36 95C8 LPM
37 9631 ADIW R30,1
38 920D ST R0,X+
39 CFF9 RJMP 0x0033
3A D001 RCALL _main
_exit:
3B CFFF RJMP _exit
_main:
flag --> R10
deciMeter --> R12
ep_temp --> R10
ep_temp1 --> R10
ep_temp2 --> R12
speed_temp1 --> R12
speed2 --> R12
speed1 --> R14
timeBlock --> Y,+2
speed_temp --> Y,+0
temp --> R10
3C 9724 SBIW R28,4
FILE: F:\AVRPRO~1\EEPROM\MAIN.C
(0001) //**************************************************
(0002) //project :SPEED TO POWER SWITCH
(0003) //chiptype :ATMEGA48
(0004) //Clock frequency :8.00000MHZ
(0005) //Author :XIEHELI
(0006) //From :HORN
(0007) //**************************************************
(0008) #include<iom48v.h>
(0009) #include<macros.h>
(0010) #define u08 unsigned char
(0011) #define u16 unsigned int
(0012) #define u32 unsigned long
(0013) #pragma interrupt_handler Icp_time0:17
(0014) #pragma interrupt_handler Int0:2
(0015) void sendData(u08 cbit);
(0016) void delay(u08 tick);
(0017) void port_init(void);
(0018) void time_init(void);
(0019) void delayms(u08 time);
(0020) void delays(u08 time1);
(0021) u16 speed_test(void);
(0022) void eeprom_write(u16 adrw,u08 add);
(0023) u08 eeprom_read(u16 adrr);
(0024) //u16 data;
(0025) u16 data_temp1;
(0026) u16 data_temp2;
(0027) //u08 number;
(0028) void main(void)
(0029) {
(0030) u08 temp;
(0031) //u08 temp1;
(0032) u16 ep_temp;
(0033) u08 speed1;
(0034) u08 speed2;
(0035) u08 ep_temp1;
(0036) u08 ep_temp2;
(0037) u16 speed_temp;
(0038) u16 speed_temp1;
(0039) u08 flag;
(0040) u08 deciMeter;
(0041) u16 timeBlock=111;
3D E68F LDI R24,0x6F
3E E090 LDI R25,0
3F 839B STD Y+3,R25
40 838A STD Y+2,R24
(0042) //u08 num_temp1;
(0043) //u08 num_temp2;
(0044) //u08 temp3;
(0045) //u08 temp2;
(0046) flag=0x00;
41 24AA CLR R10
(0047) port_init(); //I/O口初始化
42 D088 RCALL _port_init
(0048) time_init();
43 D091 RCALL _time_init
(0049) //temp1=0;
(0050) speed_temp=0;
44 2400 CLR R0
45 2411 CLR R1
46 8219 STD Y+1,R1
47 8208 STD Y+0,R0
(0051) SREG|=0x80;
48 9478 BSET 7
(0052) NOP();
49 0000 NOP
(0053) NOP();
4A 0000 NOP
(0054) NOP();
4B 0000 NOP
(0055) NOP();
4C 0000 NOP
(0056) NOP();
4D 0000 NOP
(0057) NOP();
4E 0000 NOP
(0058) NOP();
4F 0000 NOP
(0059) NOP();
50 0000 NOP
51 C076 RJMP 0x00C8
(0060) while(1)
(0061) {
(0062) temp=0;
52 24AA CLR R10
(0063) //delayms(10);
(0064) //delays(50);
(0065) delay(255);
53 EF0F LDI R16,0xFF
54 D09F RCALL _delay
(0066) delay(26);
55 E10A LDI R16,0x1A
56 D09D RCALL _delay
(0067) while((0x10&0x10)&&(++timeBlock<896));//计算距离,将距离和数据对应
57 818A LDD R24,Y+2
58 819B LDD R25,Y+3
59 9601 ADIW R24,1
5A 011C MOVW R2,R24
5B 823B STD Y+3,R3
5C 822A STD Y+2,R2
5D 3880 CPI R24,0x80
5E E0E3 LDI R30,3
5F 079E CPC R25,R30
60 F3B0 BCS 0x0057
(0068) deciMeter=(u32)timeBlock*15*18/9300;
61 2444 CLR R4
62 2455 CLR R5
63 E04F LDI R20,0xF
64 E050 LDI R21,0
65 E060 LDI R22,0
66 E070 LDI R23,0
67 925A ST R5,-Y
68 924A ST R4,-Y
69 923A ST R3,-Y
6A 922A ST R2,-Y
6B 018A MOVW R16,R20
6C 019B MOVW R18,R22
6D D169 RCALL empy32u
6E E142 LDI R20,0x12
6F E050 LDI R21,0
70 E060 LDI R22,0
71 E070 LDI R23,0
72 933A ST R19,-Y
73 932A ST R18,-Y
74 931A ST R17,-Y
75 930A ST R16,-Y
76 018A MOVW R16,R20
77 019B MOVW R18,R22
78 D15E RCALL empy32u
79 E544 LDI R20,0x54
7A E254 LDI R21,0x24
7B E060 LDI R22,0
7C E070 LDI R23,0
7D 937A ST R23,-Y
7E 936A ST R22,-Y
7F 935A ST R21,-Y
80 934A ST R20,-Y
81 D0ED RCALL div32u
82 2EC0 MOV R12,R16
83 C003 RJMP 0x0087
(0069) while(temp<=100)
(0070) {
(0071) sendData(0x37);
84 E307 LDI R16,0x37
85 D0C2 RCALL _sendData
(0072) temp++;
86 94A3 INC R10
87 E684 LDI R24,0x64
88 158A CP R24,R10
89 F7D0 BCC 0x0084
8A C023 RJMP 0x00AE
(0073) }
(0074) while((PIND&0x20)&&(temp<=100))//判断按键是否按下1s,设定车速信号
(0075) {
(0076) //temp=50;
(0077) delayms(10);
8B E00A LDI R16,0xA
8C D06D RCALL _delayms
(0078) temp++; //speed=speed_test(); //测定车速信号
8D 94A3 INC R10
(0079) if((PIND&0x20)&&(temp==99))
8E 9B4D SBIS 0x09,5
8F C01D RJMP 0x00AD
90 2D8A MOV R24,R10
91 3683 CPI R24,0x63
92 F4D1 BNE 0x00AD
(0080) {
(0081) speed_temp=data_temp2; //测定车速信号
93 9020 0100 LDS R2,data_temp2
95 9030 0101 LDS R3,data_temp2+1
97 8239 STD Y+1,R3
98 8228 STD Y+0,R2
(0082) speed_temp1=speed_temp;
99 0161 MOVW R12,R2
(0083) speed1=(u08)(speed_temp&0x00ff);
9A 01C1 MOVW R24,R2
9B 7090 ANDI R25,0
9C 2EE8 MOV R14,R24
(0084) speed2=(u08)(speed_temp1>>8);
9D 2CCD MOV R12,R13
9E 24DD CLR R13
(0085) SREG=0x00;
9F 2422 CLR R2
A0 BE2F OUT 0x3F,R2
(0086) eeprom_write(0x0025,speed1);//将用户设定车速写进EEPROM
A1 2F28 MOV R18,R24
A2 E205 LDI R16,0x25
A3 E010 LDI R17,0
A4 D040 RCALL _eeprom_write
(0087) //delayms(20);
(0088) eeprom_write(0x0026,speed2);
A5 2D2C MOV R18,R12
A6 E206 LDI R16,0x26
A7 E010 LDI R17,0
A8 D03C RCALL _eeprom_write
(0089) temp=111;
A9 E68F LDI R24,0x6F
AA 2EA8 MOV R10,R24
(0090) SREG|=0x80;
AB 9478 BSET 7
(0091) }
AC C001 RJMP 0x00AE
(0092) else
(0093) NOP();
AD 0000 NOP
AE 9B4D SBIS 0x09,5
AF C003 RJMP 0x00B3
B0 E684 LDI R24,0x64
B1 158A CP R24,R10
B2 F6C0 BCC 0x008B
(0094) }
(0095) SREG=0x00;
B3 2422 CLR R2
B4 BE2F OUT 0x3F,R2
(0096) ep_temp1=eeprom_read(0x0025);//读取EEPROM中用户设定的车速
B5 E205 LDI R16,0x25
B6 E010 LDI R17,0
B7 D035 RCALL _eeprom_read
B8 2EA0 MOV R10,R16
(0097) //delayms(20);
(0098) ep_temp2=eeprom_read(0x0026);
B9 E206 LDI R16,0x26
BA E010 LDI R17,0
BB D031 RCALL _eeprom_read
BC 2EC0 MOV R12,R16
(0099) SREG|=0x80;
BD 9478 BSET 7
(0100) ep_temp=(ep_temp2<<8)+ep_temp1;
BE 2CBC MOV R11,R12
(0101) speed_temp=data_temp2; //调用测定车速信号
BF 9020 0100 LDS R2,data_temp2
C1 9030 0101 LDS R3,data_temp2+1
C3 8239 STD Y+1,R3
C4 8228 STD Y+0,R2
(0102) sendData(ep_temp2);
C5 D082 RCALL _sendData
(0103) delays(1);
C6 E001 LDI R16,1
C7 D040 RCALL _delays
C8 CF89 RJMP 0x0052
C9 9624 ADIW R28,4
CA 9508 RET
(0104) }
(0105) }
(0106) void port_init(void)
(0107) {
(0108) DDRB=0x10;
_port_init:
CB E180 LDI R24,0x10
CC B984 OUT 0x04,R24
(0109) DDRC=0x02;
CD E082 LDI R24,2
CE B987 OUT 0x07,R24
(0110) DDRD=0x00;
CF 2422 CLR R2
D0 B82A OUT 0x0A,R2
(0111) PORTC=0x00;
D1 B828 OUT 0x08,R2
(0112) PORTB=0x00;
D2 B825 OUT 0x05,R2
(0113) PORTD=0x00;
D3 B82B OUT 0x0B,R2
D4 9508 RET
(0114) }
(0115) void time_init(void)
(0116) {
(0117) TCCR0A=0x00;
_time_init:
D5 2422 CLR R2
D6 BC24 OUT 0x24,R2
(0118) TCCR0B=0x03;
D7 E083 LDI R24,3
D8 BD85 OUT 0x25,R24
(0119) TIMSK0=0x01;
D9 E081 LDI R24,1
DA 9380 006E STS 0x006E,R24
(0120) TIFR0=0x01;
DC BB85 OUT 0x15,R24
(0121) TCNT0=0xc0;
DD EC80 LDI R24,0xC0
DE BD86 OUT 0x26,R24
(0122) EICRA=0x01;
DF E081 LDI R24,1
E0 9380 0069 STS 0x0069,R24
(0123) EIMSK=0x01;
E2 BB8D OUT 0x1D,R24
(0124) EIFR=0x01;
E3 BB8C OUT 0x1C,R24
E4 9508 RET
(0125) }
(0126) void eeprom_write(u16 adrw,u08 add)
(0127) {
(0128) /* 等待上一次写操作结束 */
(0129) while(EECR & (1<<EEPE));
_eeprom_write:
add --> R18
adrw --> R16
E5 99F9 SBIC 0x1F,1
E6 CFFE RJMP _eeprom_write
(0130) /* 设置地址和数据寄存器 */
(0131) EEAR=adrw;
E7 BD12 OUT 0x22,R17
E8 BD01 OUT 0x21,R16
(0132) EEDR=add;
E9 BD20 OUT 0x20,R18
(0133) /* 置位EEMWE */
(0134) EECR|=(1<<EEMPE);
EA 9AFA SBI 0x1F,2
(0135) /* 置位EEWE 以启动写操作E */
(0136) EECR|=(1<<EEPE);
EB 9AF9 SBI 0x1F,1
EC 9508 RET
(0137) }
(0138) u08 eeprom_read(u16 adrr)
(0139) {
(0140) /* 等待上一次写操作结束 */
(0141) while(EECR & (1<<EEPE));
_eeprom_read:
adrr --> R16
ED 99F9 SBIC 0x1F,1
EE CFFE RJMP _eeprom_read
(0142) /* 设置地址寄存器 */
(0143) EEAR=adrr;
EF BD12 OUT 0x22,R17
F0 BD01 OUT 0x21,R16
(0144) /* 设置EERE 以启动读操作 */
(0145) EECR|=(1<<EERE);
F1 9AF8 SBI 0x1F,0
(0146) /* 自数据寄存器返回数据 */
(0147) return EEDR;
F2 B500 IN R16,0x20
F3 9508 RET
(0148) }
(0149) void delay(u08 tick)
(0150) {
(0151) while(--tick);
_delay:
tick --> R16
F4 2F80 MOV R24,R16
F5 5081 SUBI R24,1
F6 2F08 MOV R16,R24
F7 2388 TST R24
F8 F7D9 BNE 0x00F4
F9 9508 RET
_delayms:
tim1 --> R12
i --> R10
time --> R10
FA 92AA ST R10,-Y
FB 92CA ST R12,-Y
FC 2EA0 MOV R10,R16
(0152) }
(0153) void delayms(u08 time)
(0154) {
(0155) u08 tim1,i;
(0156) tim1=time;
FD 2CCA MOV R12,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -