⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 car.lst

📁 本次设计的自动往返电动小汽车
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -