📄 main.lis
字号:
.module MAIN.C
.area text(rom, con, rel)
0000 .dbfile F:\AVRPRO~1\EEPROM\MAIN.C
.area vector(rom, abs)
.org 32
0020 DAC0 rjmp _Icp_time0
.area text(rom, con, rel)
0000 .dbfile F:\AVRPRO~1\EEPROM\MAIN.C
.area vector(rom, abs)
.org 2
0002 FAC0 rjmp _Int0
.area text(rom, con, rel)
0000 .dbfile F:\AVRPRO~1\EEPROM\MAIN.C
0000 .dbfunc e main _main fV
0000 ; flag -> R10
0000 ; deciMeter -> R12
0000 ; ep_temp -> R10,R11
0000 ; ep_temp1 -> R10
0000 ; ep_temp2 -> R12
0000 ; speed_temp1 -> R12,R13
0000 ; speed2 -> R12
0000 ; speed1 -> R14
0000 ; timeBlock -> y+2
0000 ; speed_temp -> y+0
0000 ; temp -> R10
.even
0000 _main::
0000 2497 sbiw R28,4
0002 .dbline -1
0002 .dbline 29
0002 ; //**************************************************
0002 ; //project :SPEED TO POWER SWITCH
0002 ; //chiptype :ATMEGA48
0002 ; //Clock frequency :8.00000MHZ
0002 ; //Author :XIEHELI
0002 ; //From :HORN
0002 ; //**************************************************
0002 ; #include<iom48v.h>
0002 ; #include<macros.h>
0002 ; #define u08 unsigned char
0002 ; #define u16 unsigned int
0002 ; #define u32 unsigned long
0002 ; #pragma interrupt_handler Icp_time0:17
0002 ; #pragma interrupt_handler Int0:2
0002 ; void sendData(u08 cbit);
0002 ; void delay(u08 tick);
0002 ; void port_init(void);
0002 ; void time_init(void);
0002 ; void delayms(u08 time);
0002 ; void delays(u08 time1);
0002 ; u16 speed_test(void);
0002 ; void eeprom_write(u16 adrw,u08 add);
0002 ; u08 eeprom_read(u16 adrr);
0002 ; //u16 data;
0002 ; u16 data_temp1;
0002 ; u16 data_temp2;
0002 ; //u08 number;
0002 ; void main(void)
0002 ; {
0002 .dbline 41
0002 ; u08 temp;
0002 ; //u08 temp1;
0002 ; u16 ep_temp;
0002 ; u08 speed1;
0002 ; u08 speed2;
0002 ; u08 ep_temp1;
0002 ; u08 ep_temp2;
0002 ; u16 speed_temp;
0002 ; u16 speed_temp1;
0002 ; u08 flag;
0002 ; u08 deciMeter;
0002 ; u16 timeBlock=111;
0002 8FE6 ldi R24,111
0004 90E0 ldi R25,0
0006 9B83 std y+3,R25
0008 8A83 std y+2,R24
000A .dbline 46
000A ; //u08 num_temp1;
000A ; //u08 num_temp2;
000A ; //u08 temp3;
000A ; //u08 temp2;
000A ; flag=0x00;
000A AA24 clr R10
000C .dbline 47
000C ; port_init(); //I/O口初始化
000C 88D0 rcall _port_init
000E .dbline 48
000E ; time_init();
000E 91D0 rcall _time_init
0010 .dbline 50
0010 ; //temp1=0;
0010 ; speed_temp=0;
0010 0024 clr R0
0012 1124 clr R1
0014 1982 std y+1,R1
0016 0882 std y+0,R0
0018 .dbline 51
0018 ; SREG|=0x80;
0018 7894 bset 7
001A .dbline 52
001A ; NOP();
001A 0000 nop
001C .dbline 53
001C ; NOP();
001C 0000 nop
001E .dbline 54
001E ; NOP();
001E 0000 nop
0020 .dbline 55
0020 ; NOP();
0020 0000 nop
0022 .dbline 56
0022 ; NOP();
0022 0000 nop
0024 .dbline 57
0024 ; NOP();
0024 0000 nop
0026 .dbline 58
0026 ; NOP();
0026 0000 nop
0028 .dbline 59
0028 ; NOP();
0028 0000 nop
002A 76C0 rjmp L3
002C L2:
002C .dbline 61
002C ; while(1)
002C ; {
002C .dbline 62
002C ; temp=0;
002C AA24 clr R10
002E .dbline 65
002E ; //delayms(10);
002E ; //delays(50);
002E ; delay(255);
002E 0FEF ldi R16,255
0030 9FD0 rcall _delay
0032 .dbline 66
0032 ; delay(26);
0032 0AE1 ldi R16,26
0034 9DD0 rcall _delay
0036 L5:
0036 .dbline 67
0036 ; while((0x10&0x10)&&(++timeBlock<896));//计算距离,将距离和数据对应
0036 L6:
0036 .dbline 67
0036 8A81 ldd R24,y+2
0038 9B81 ldd R25,y+3
003A 0196 adiw R24,1
003C 1C01 movw R2,R24
003E 3B82 std y+3,R3
0040 2A82 std y+2,R2
0042 8038 cpi R24,128
0044 E3E0 ldi R30,3
0046 9E07 cpc R25,R30
0048 B0F3 brlo L5
004A X0:
004A .dbline 68
004A ; deciMeter=(u32)timeBlock*15*18/9300;
004A 4424 clr R4
004C 5524 clr R5
004E 4FE0 ldi R20,15
0050 50E0 ldi R21,0
0052 60E0 ldi R22,0
0054 70E0 ldi R23,0
0056 5A92 st -y,R5
0058 4A92 st -y,R4
005A 3A92 st -y,R3
005C 2A92 st -y,R2
005E 8A01 movw R16,R20
0060 9B01 movw R18,R22
0062 00D0 rcall empy32u
0064 42E1 ldi R20,18
0066 50E0 ldi R21,0
0068 60E0 ldi R22,0
006A 70E0 ldi R23,0
006C 3A93 st -y,R19
006E 2A93 st -y,R18
0070 1A93 st -y,R17
0072 0A93 st -y,R16
0074 8A01 movw R16,R20
0076 9B01 movw R18,R22
0078 00D0 rcall empy32u
007A 44E5 ldi R20,84
007C 54E2 ldi R21,36
007E 60E0 ldi R22,0
0080 70E0 ldi R23,0
0082 7A93 st -y,R23
0084 6A93 st -y,R22
0086 5A93 st -y,R21
0088 4A93 st -y,R20
008A 00D0 rcall div32u
008C C02E mov R12,R16
008E 03C0 rjmp L9
0090 L8:
0090 .dbline 70
0090 ; while(temp<=100)
0090 ; {
0090 .dbline 71
0090 ; sendData(0x37);
0090 07E3 ldi R16,55
0092 C2D0 rcall _sendData
0094 .dbline 72
0094 ; temp++;
0094 A394 inc R10
0096 .dbline 73
0096 ; }
0096 L9:
0096 .dbline 69
0096 84E6 ldi R24,100
0098 8A15 cp R24,R10
009A D0F7 brsh L8
009C X1:
009C 23C0 rjmp L12
009E L11:
009E .dbline 75
009E ; while((PIND&0x20)&&(temp<=100))//判断按键是否按下1s,设定车速信号
009E ; {
009E .dbline 77
009E ; //temp=50;
009E ; delayms(10);
009E 0AE0 ldi R16,10
00A0 6DD0 rcall _delayms
00A2 .dbline 78
00A2 ; temp++; //speed=speed_test(); //测定车速信号
00A2 A394 inc R10
00A4 .dbline 79
00A4 ; if((PIND&0x20)&&(temp==99))
00A4 4D9B sbis 0x9,5
00A6 1DC0 rjmp L14
00A8 X2:
00A8 8A2D mov R24,R10
00AA 8336 cpi R24,99
00AC D1F4 brne L14
00AE X3:
00AE .dbline 80
00AE ; {
00AE .dbline 81
00AE ; speed_temp=data_temp2; //测定车速信号
00AE 20900000 lds R2,_data_temp2
00B2 30900100 lds R3,_data_temp2+1
00B6 3982 std y+1,R3
00B8 2882 std y+0,R2
00BA .dbline 82
00BA ; speed_temp1=speed_temp;
00BA 6101 movw R12,R2
00BC .dbline 83
00BC ; speed1=(u08)(speed_temp&0x00ff);
00BC C101 movw R24,R2
00BE 9070 andi R25,0
00C0 E82E mov R14,R24
00C2 .dbline 84
00C2 ; speed2=(u08)(speed_temp1>>8);
00C2 CD2C mov R12,R13
00C4 DD24 clr R13
00C6 .dbline 85
00C6 ; SREG=0x00;
00C6 2224 clr R2
00C8 2FBE out 0x3f,R2
00CA .dbline 86
00CA ; eeprom_write(0x0025,speed1);//将用户设定车速写进EEPROM
00CA 282F mov R18,R24
00CC 05E2 ldi R16,37
00CE 10E0 ldi R17,0
00D0 40D0 rcall _eeprom_write
00D2 .dbline 88
00D2 ; //delayms(20);
00D2 ; eeprom_write(0x0026,speed2);
00D2 2C2D mov R18,R12
00D4 06E2 ldi R16,38
00D6 10E0 ldi R17,0
00D8 3CD0 rcall _eeprom_write
00DA .dbline 89
00DA ; temp=111;
00DA 8FE6 ldi R24,111
00DC A82E mov R10,R24
00DE .dbline 90
00DE ; SREG|=0x80;
00DE 7894 bset 7
00E0 .dbline 91
00E0 ; }
00E0 01C0 rjmp L15
00E2 L14:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -