📄 car.lst
字号:
__text_start:
__start:
002D E5CF LDI R28,0x5F
002E E0D2 LDI R29,2
002F BFCD OUT 0x3D,R28
0030 BFDE OUT 0x3E,R29
0031 51C0 SUBI R28,0x10
0032 40D0 SBCI R29,0
0033 EA0A LDI R16,0xAA
0034 8308 STD Y+0,R16
0035 2400 CLR R0
0036 E8EA LDI R30,0x8A
0037 E0F0 LDI R31,0
0038 E010 LDI R17,0
0039 39E6 CPI R30,0x96
003A 07F1 CPC R31,R17
003B F011 BEQ 0x003E
003C 9201 ST R0,Z+
003D CFFB RJMP 0x0039
003E 8300 STD Z+0,R16
003F E3E0 LDI R30,0x30
0040 E0F0 LDI R31,0
0041 E6A0 LDI R26,0x60
0042 E0B0 LDI R27,0
0043 E010 LDI R17,0
0044 35EA CPI R30,0x5A
0045 07F1 CPC R31,R17
0046 F021 BEQ 0x004B
0047 95C8 LPM
0048 9631 ADIW R30,1
0049 920D ST R0,X+
004A CFF9 RJMP 0x0044
004B D001 RCALL _main
_exit:
004C CFFF RJMP _exit
_main:
004D 9722 SBIW R28,2
FILE: C:\DOCUME~1\Administrator\桌面\自动往返小汽车\源程序\自动往返小车lcd版\Main.c
(0001) // main.c
(0002) // 8/1/2005 written by MrLiu
(0003) //
(0004) // Project :自动往返电动小车
(0005) // Target : 8515
(0006) // Crystal : 8.0000Mhz
(0007) //
(0008)
(0009) #include <io8515v.h>
(0010) #include <macros.h>
(0011)
(0012) #include "CarInit.h"
(0013) #include "1602LCD.h"
(0014)
(0015) #define CTRL_ZHENG PORTA|=0x80 // 控制正转
(0016) #define CTRL_FAN PORTA&=0x7F // 控制反转
(0017)
(0018) // globals :
(0019) int lcnt=0; // 线条数变量
(0020) int qcnt=0; // 车轮转数变量
(0021) int juli[3]; // 距离数组
(0022) unsigned int time[3]; // 时间数组
(0023)
(0024) void main(void)
(0025) {
(0026) LCD_init();
004E D28B RCALL _LCD_init
(0027) LCD_write_string(0,0,"TIME:00.0s") ;
004F E78D LDI R24,0x7D
0050 E090 LDI R25,0
0051 8399 STD Y+1,R25
0052 8388 STD Y+0,R24
0053 2722 CLR R18
0054 2700 CLR R16
0055 D34C RCALL _LCD_write_string
(0028) LCD_write_string(0,1,"RACE:00.0m") ;
0056 E782 LDI R24,0x72
0057 E090 LDI R25,0
0058 8399 STD Y+1,R25
0059 8388 STD Y+0,R24
005A E021 LDI R18,1
005B 2700 CLR R16
005C D345 RCALL _LCD_write_string
(0029) init_devices(); // 设备初始化
005D D25E RCALL _init_devices
(0030) CTRL_ZHENG; // 控制正转
005E 9ADF SBI 0x1B,7
005F C065 RJMP 0x00C5
(0031) // 主循环
(0032) while(lcnt<14)
(0033) {
(0034) if(lcnt==3)
0060 91800060 LDS R24,0x60
0062 91900061 LDS R25,0x61
0064 3083 CPI R24,3
0065 E0E0 LDI R30,0
0066 079E CPC R25,R30
0067 F411 BNE 0x006A
(0035) shiftl(); // 低速行驶
0068 D26C RCALL _shiftl
0069 C05B RJMP 0x00C5
(0036) else if(lcnt==4)
006A 91800060 LDS R24,0x60
006C 91900061 LDS R25,0x61
006E 3084 CPI R24,4
006F E0E0 LDI R30,0
0070 079E CPC R25,R30
0071 F411 BNE 0x0074
(0037) shifth(); // 高速行驶
0072 D25A RCALL _shifth
0073 C051 RJMP 0x00C5
(0038) else if(lcnt==6)
0074 91800060 LDS R24,0x60
0076 91900061 LDS R25,0x61
0078 3086 CPI R24,6
0079 E0E0 LDI R30,0
007A 079E CPC R25,R30
007B F501 BNE 0x009C
(0039) {
(0040) CTRL_FAN; // 反转制动
007C B38B IN R24,0x1B
007D 778F ANDI R24,0x7F
007E BB8B OUT 0x1B,R24
(0041) delay_nms(350);
007F E50E LDI R16,0x5E
0080 E011 LDI R17,1
0081 D368 RCALL _delay_nms
(0042) stop();
0082 D24E RCALL _stop
(0043) LCD_write_string(10,1,"(STOP)") ;
0083 E68B LDI R24,0x6B
0084 E090 LDI R25,0
0085 8399 STD Y+1,R25
0086 8388 STD Y+0,R24
0087 E021 LDI R18,1
0088 E00A LDI R16,0xA
0089 D318 RCALL _LCD_write_string
(0044) delay_nms(10000);
008A E100 LDI R16,0x10
008B E217 LDI R17,0x27
008C D35D RCALL _delay_nms
(0045) LCD_write_string(10,1," ") ;
008D E684 LDI R24,0x64
008E E090 LDI R25,0
008F 8399 STD Y+1,R25
0090 8388 STD Y+0,R24
0091 E021 LDI R18,1
0092 E00A LDI R16,0xA
0093 D30E RCALL _LCD_write_string
(0046) lcnt=7;
0094 E087 LDI R24,7
0095 E090 LDI R25,0
0096 93900061 STS 0x61,R25
0098 93800060 STS 0x60,R24
(0047) shifth(); // 高速行驶
009A D232 RCALL _shifth
(0048) }
009B C029 RJMP 0x00C5
(0049) else if(lcnt==10)
009C 91800060 LDS R24,0x60
009E 91900061 LDS R25,0x61
00A0 308A CPI R24,0xA
00A1 E0E0 LDI R30,0
00A2 079E CPC R25,R30
00A3 F411 BNE 0x00A6
(0050) shiftl(); // 低速行驶
00A4 D230 RCALL _shiftl
00A5 C01F RJMP 0x00C5
(0051) else if(lcnt==11)
00A6 91800060 LDS R24,0x60
00A8 91900061 LDS R25,0x61
00AA 308B CPI R24,0xB
00AB E0E0 LDI R30,0
00AC 079E CPC R25,R30
00AD F411 BNE 0x00B0
(0052) shifth(); // 高速行驶
00AE D21E RCALL _shifth
00AF C015 RJMP 0x00C5
(0053) else if(lcnt>=13)
00B0 91800060 LDS R24,0x60
00B2 91900061 LDS R25,0x61
00B4 308D CPI R24,0xD
00B5 E0E0 LDI R30,0
00B6 079E CPC R25,R30
00B7 F06C BLT 0x00C5
(0054) {
(0055) CLI();
00B8 94F8 BCLR 7
(0056) CTRL_ZHENG; // 反转制动
00B9 9ADF SBI 0x1B,7
(0057) delay_nms(350);
00BA E50E LDI R16,0x5E
00BB E011 LDI R17,1
00BC D32D RCALL _delay_nms
(0058) stop();
00BD D213 RCALL _stop
(0059) LCD_write_string(10,1,"(STOP)") ;
00BE E68B LDI R24,0x6B
00BF E090 LDI R25,0
00C0 8399 STD Y+1,R25
00C1 8388 STD Y+0,R24
00C2 E021 LDI R18,1
00C3 E00A LDI R16,0xA
00C4 D2DD RCALL _LCD_write_string
00C5 91800060 LDS R24,0x60
00C7 91900061 LDS R25,0x61
00C9 308E CPI R24,0xE
00CA E0E0 LDI R30,0
00CB 079E CPC R25,R30
00CC F40C BGE 0x00CE
00CD CF92 RJMP 0x0060
(0060) }
(0061) }
(0062) }
00CE 9622 ADIW R28,2
00CF 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\自动往返小汽车\源程序\自动往返小车lcd版\CarInit.c
(0001) // car_init.c
(0002) // 8/1/2005 written by MrLiu
(0003) //
(0004) #include <io8515v.h>
(0005) #include <macros.h>
(0006)
(0007) #include "1602LCD.h"
(0008) #include "CarInit.h"
(0009)
(0010) // globals :
(0011) int tenms=0;
(0012)
(0013) // extern varables :
(0014) extern int lcnt;
(0015) extern int qcnt;
(0016) extern int juli[3];
(0017) extern unsigned int time[3];
(0018)
(0019) ////////////////////////////////////////////
(0020) // Function : port_init()
(0021) // Purpose :端口初始化
(0022) // Comments : A口输出/B口输出/C口输入/D口输入
(0023) //
(0024) void port_init(void)
(0025) {
(0026) PORTA = 0xFF;
_port_init:
00D0 EF8F LDI R24,0xFF
00D1 BB8B OUT 0x1B,R24
(0027) DDRA = 0xFF;
00D2 BB8A OUT 0x1A,R24
(0028) PORTB = 0xFF;
00D3 BB88 OUT 0x18,R24
(0029) DDRB = 0xFF;
00D4 BB87 OUT 0x17,R24
(0030) PORTC = 0xFF;
00D5 BB85 OUT 0x15,R24
(0031) DDRC = 0x00;
00D6 2422 CLR R2
00D7 BA24 OUT 0x14,R2
(0032) PORTD = 0xFF;
00D8 BB82 OUT 0x12,R24
(0033) DDRD = 0x00;
00D9 BA21 OUT 0x11,R2
(0034) }
00DA 9508 RET
(0035)
(0036) //////////////////////////////////////////
(0037) // Function : timer0_init()
(0038) // Purpose : T/C0初始化
(0039) // Commnets :产生10ms中断
(0040) //
(0041) void timer0_init(void)
(0042) {
(0043) TCCR0 = 0x00; //stop timer
_timer0_init:
00DB 2422 CLR R2
00DC BE23 OUT 0x33,R2
(0044) TCNT0 = 0xB2; //set count value
00DD EB82 LDI R24,0xB2
00DE BF82 OUT 0x32,R24
(0045) TCCR0 = 0x05; //start timer
00DF E085 LDI R24,5
00E0 BF83 OUT 0x33,R24
(0046) }
00E1 9508 RET
_timer0_ovf_isr:
00E2 D35D RCALL push_lset
00E3 9722 SBIW R28,2
(0047)
(0048) // Function : timer0_ovf_isr()
(0049) // Purpose : T/C0中断服务
(0050) //
(0051) #pragma interrupt_handler timer0_ovf_isr:8
(0052) void timer0_ovf_isr(void)
(0053) {
(0054) TCNT0 = 0xB2; //reload counter value
00E4 EB82 LDI R24,0xB2
00E5 BF82 OUT 0x32,R24
(0055) tenms++;
00E6 91800088 LDS R24,0x88
00E8 91900089 LDS R25,0x89
00EA 9601 ADIW R24,1
00EB 93900089 STS 0x89,R25
00ED 93800088 STS 0x88,R24
(0056) if (tenms==10)
00EF 308A CPI R24,0xA
00F0 E0E0 LDI R30,0
00F1 079E CPC R25,R30
00F2 F009 BEQ 0x00F4
00F3 C076 RJMP 0x016A
(0057) {
(0058) tenms=0;
00F4 2422 CLR R2
00F5 2433 CLR R3
00F6 92300089 STS 0x89,R3
00F8 92200088 STS 0x88,R2
(0059) time[2]++;
00FA 9180008E LDS R24,0x8E
00FC 9190008F LDS R25,0x8F
00FE 9601 ADIW R24,1
00FF 9390008F STS 0x8F,R25
0101 9380008E STS 0x8E,R24
(0060) if(time[2]<10)
0103 308A CPI R24,0xA
0104 E0E0 LDI R30,0
0105 079E CPC R25,R30
0106 F430 BCC 0x010D
(0061) LCD_write(8,0,'0'+time[2]);
0107 96C0 ADIW R24,0x30
0108 8399 STD Y+1,R25
0109 8388 STD Y+0,R24
010A 2722 CLR R18
010B E008 LDI R16,0x8
010C D2AE RCALL _LCD_write
(0062) if(time[2]==10)
010D 9180008E LDS R24,0x8E
010F 9190008F LDS R25,0x8F
0111 308A CPI R24,0xA
0112 E0E0 LDI R30,0
0113 079E CPC R25,R30
0114 F009 BEQ 0x0116
0115 C054 RJMP 0x016A
(0063) {
(0064) time[2]=0;
0116 2422 CLR R2
0117 2433 CLR R3
0118 9230008F STS 0x8F,R3
011A 9220008E STS 0x8E,R2
(0065) LCD_write(8,0,'0'+time[2]);
011C 2D82 MOV R24,R2
011D 2D93 MOV R25,R3
011E 96C0 ADIW R24,0x30
011F 8399 STD Y+1,R25
0120 8388 STD Y+0,R24
0121 2722 CLR R18
0122 E008 LDI R16,0x8
0123 D297 RCALL _LCD_write
(0066) time[1]++;
0124 9180008C LDS R24,_time+2
0126 9190008D LDS R25,_time+3
0128 9601 ADIW R24,1
0129 9390008D STS _time+3,R25
012B 9380008C STS _time+2,R24
(0067) if(time[1]<10)
012D 308A CPI R24,0xA
012E E0E0 LDI R30,0
012F 079E CPC R25,R30
0130 F430 BCC 0x0137
(0068) LCD_write(6,0,'0'+time[1]);
0131 96C0 ADIW R24,0x30
0132 8399 STD Y+1,R25
0133 8388 STD Y+0,R24
0134 2722 CLR R18
0135 E006 LDI R16,6
0136 D284 RCALL _LCD_write
(0069) if(time[1]==10)
0137 9180008C LDS R24,_time+2
0139 9190008D LDS R25,_time+3
013B 308A CPI R24,0xA
013C E0E0 LDI R30,0
013D 079E CPC R25,R30
013E F559 BNE 0x016A
(0070) {
(0071) time[1]=0;
013F 2422 CLR R2
0140 2433 CLR R3
0141 9230008D STS _time+3,R3
0143 9220008C STS _time+2,R2
(0072) LCD_write(6,0,'0'+time[1]);
0145 2D82 MOV R24,R2
0146 2D93 MOV R25,R3
0147 96C0 ADIW R24,0x30
0148 8399 STD Y+1,R25
0149 8388 STD Y+0,R24
014A 2722 CLR R18
014B E006 LDI R16,6
014C D26E RCALL _LCD_write
(0073) time[0]++;
014D 9180008A LDS R24,_time
014F 9190008B LDS R25,_time+1
0151 9601 ADIW R24,1
0152 9390008B STS _time+1,R25
0154 9380008A STS _time,R24
(0074) if(time[0]==10)time[0]=0;
0156 308A CPI R24,0xA
0157 E0E0 LDI R30,0
0158 079E CPC R25,R30
0159 F431 BNE 0x0160
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -