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

📄 lineturn.lst

📁 MEGA16单片机程序包2
💻 LST
📖 第 1 页 / 共 2 页
字号:
    010E 9508      RET
_LCD_write_char:
  data                 --> Y+4
  Y                    --> R22
  X                    --> R20
    010F 940E0226  CALL	push_gset2
    0111 2F62      MOV	R22,R18
    0112 2F40      MOV	R20,R16
(0124)     } 
(0125)        
(0126) } 
(0127) 
(0128) void LCD_write_char(uchar X,uchar Y,uchar data) //列x=0~15,行y=0,1 
(0129) { 
(0130)   LCD_set_xy( X, Y );      //写地址 
    0113 2F26      MOV	R18,R22
    0114 2F04      MOV	R16,R20
    0115 DFD3      RCALL	_LCD_set_xy
(0131)   LCD_write_data( data); 
    0116 810C      LDD	R16,Y+4
    0117 DFB1      RCALL	_LCD_write_data
    0118 940E021A  CALL	pop_gset2
    011A 9508      RET
(0132)    
(0133) } 
(0134) 
(0135) void init_lcd(void) 
(0136) { 
(0137)   CLI();             //禁止所有中断
_init_lcd:
    011B 94F8      BCLR	7
(0138)   LCD_init(); 
    011C DF71      RCALL	_LCD_init
(0139)   MCUCR = 0x00; 
    011D 2422      CLR	R2
    011E BE25      OUT	0x35,R2
(0140)   GICR  = 0x00; 
    011F BE2B      OUT	0x3B,R2
(0141)   TIMSK = 0x00;     
    0120 BE29      OUT	0x39,R2
(0142)   SEI();            //重新开启所有中断
    0121 9478      BSET	7
    0122 9508      RET
FILE: F:\USING0~1\LINEAN~1\main.c
(0001) #include "main.h"
(0002) 
(0003) unsigned char ReadPin(void)
(0004) {
(0005)  unsigned char i; 
(0006)  PORTC = 0XFF;           //定义上拉电阻和设置高电平输出 
_ReadPin:
  i                    --> R16
    0123 EF8F      LDI	R24,0xFF
    0124 BB85      OUT	0x15,R24
(0007)  DDRC = 0X00;            //为端口引脚定义方向
    0125 2422      CLR	R2
    0126 BA24      OUT	0x14,R2
(0008)  _NOP();                 // 为了同步插入nop 指令
    0127 0000      NOP
(0009)  i = PINC;               // 读取端口引脚
    0128 B303      IN	R16,0x13
    0129 9508      RET
_car_turn:
  mes                  --> R20
    012A 940E0228  CALL	push_gset1
    012C 2F40      MOV	R20,R16
(0010) }
(0011) 
(0012) void  car_turn(unsigned char mes)
(0013) {
(0014)   switch(mes)
    012D 2755      CLR	R21
    012E 3240      CPI	R20,0x20
    012F E0E0      LDI	R30,0
    0130 075E      CPC	R21,R30
    0131 F409      BNE	0x0133
    0132 C0B0      RJMP	0x01E3
    0133 E280      LDI	R24,0x20
    0134 E090      LDI	R25,0
    0135 1784      CP	R24,R20
    0136 0795      CPC	R25,R21
    0137 F40C      BGE	0x0139
    0138 C037      RJMP	0x0170
    0139 3040      CPI	R20,0
    013A 0745      CPC	R20,R21
    013B F409      BNE	0x013D
    013C C049      RJMP	0x0186
    013D 3041      CPI	R20,1
    013E E0E0      LDI	R30,0
    013F 075E      CPC	R21,R30
    0140 F409      BNE	0x0142
    0141 C047      RJMP	0x0189
    0142 3042      CPI	R20,2
    0143 E0E0      LDI	R30,0
    0144 075E      CPC	R21,R30
    0145 F409      BNE	0x0147
    0146 C04F      RJMP	0x0196
    0147 3043      CPI	R20,3
    0148 E0E0      LDI	R30,0
    0149 075E      CPC	R21,R30
    014A F409      BNE	0x014C
    014B C057      RJMP	0x01A3
    014C 3044      CPI	R20,4
    014D E0E0      LDI	R30,0
    014E 075E      CPC	R21,R30
    014F F409      BNE	0x0151
    0150 C05F      RJMP	0x01B0
    0151 3045      CPI	R20,5
    0152 E0E0      LDI	R30,0
    0153 075E      CPC	R21,R30
    0154 F409      BNE	0x0156
    0155 C067      RJMP	0x01BD
    0156 3046      CPI	R20,6
    0157 E0E0      LDI	R30,0
    0158 075E      CPC	R21,R30
    0159 F409      BNE	0x015B
    015A C065      RJMP	0x01C0
    015B 3047      CPI	R20,7
    015C E0E0      LDI	R30,0
    015D 075E      CPC	R21,R30
    015E F409      BNE	0x0160
    015F C06D      RJMP	0x01CD
    0160 3048      CPI	R20,0x8
    0161 E0E0      LDI	R30,0
    0162 075E      CPC	R21,R30
    0163 F409      BNE	0x0165
    0164 C081      RJMP	0x01E6
    0165 3040      CPI	R20,0
    0166 E0E0      LDI	R30,0
    0167 075E      CPC	R21,R30
    0168 F40C      BGE	0x016A
    0169 C082      RJMP	0x01EC
    016A 3148      CPI	R20,0x18
    016B E0E0      LDI	R30,0
    016C 075E      CPC	R21,R30
    016D F409      BNE	0x016F
    016E C071      RJMP	0x01E0
    016F C07C      RJMP	0x01EC
    0170 3340      CPI	R20,0x30
    0171 E0E0      LDI	R30,0
    0172 075E      CPC	R21,R30
    0173 F409      BNE	0x0175
    0174 C065      RJMP	0x01DA
    0175 E380      LDI	R24,0x30
    0176 E090      LDI	R25,0
    0177 1784      CP	R24,R20
    0178 0795      CPC	R25,R21
    0179 F034      BLT	0x0180
    017A 3248      CPI	R20,0x28
    017B E0E0      LDI	R30,0
    017C 075E      CPC	R21,R30
    017D F409      BNE	0x017F
    017E C05E      RJMP	0x01DD
    017F C06C      RJMP	0x01EC
    0180 3348      CPI	R20,0x38
    0181 E0E0      LDI	R30,0
    0182 075E      CPC	R21,R30
    0183 F409      BNE	0x0185
    0184 C064      RJMP	0x01E9
    0185 C066      RJMP	0x01EC
(0015)        {
(0016) /**************************以下为检测障碍物时的执行函数************************************/	   
(0017) 	   
(0018) 	    case 0x00:  forward();                      break;
    0186 940E0055  CALL	_forward
    0188 C065      RJMP	0x01EE
(0019) 		
(0020) 		case 0x01:  {
(0021) 					  back_left();
    0189 940E0064  CALL	_back_left
(0022) 					  delay(1000);
    018B EE08      LDI	R16,0xE8
    018C E013      LDI	R17,3
    018D 940E0078  CALL	_delay
(0023) 					  for_right(); 
    018F 940E0069  CALL	_for_right
(0024) 					  delay(1000);
    0191 EE08      LDI	R16,0xE8
    0192 E013      LDI	R17,3
    0193 940E0078  CALL	_delay
(0025) 					 
(0026) 					};                              break;
    0195 C058      RJMP	0x01EE
(0027) 					
(0028) 		case 0x02:  {
(0029) 		              backward();
    0196 940E005A  CALL	_backward
(0030) 		              delay(1000);
    0198 EE08      LDI	R16,0xE8
    0199 E013      LDI	R17,3
    019A 940E0078  CALL	_delay
(0031) 					  for_left();
    019C 940E005F  CALL	_for_left
(0032) 					  delay(1000);
    019E EE08      LDI	R16,0xE8
    019F E013      LDI	R17,3
    01A0 940E0078  CALL	_delay
(0033) 					};                              break;
    01A2 C04B      RJMP	0x01EE
(0034) 					
(0035) 					                             
(0036) 		case 0x03:  {
(0037) 		              back_left(); 
    01A3 940E0064  CALL	_back_left
(0038) 					  delay(1000);
    01A5 EE08      LDI	R16,0xE8
    01A6 E013      LDI	R17,3
    01A7 940E0078  CALL	_delay
(0039) 					  for_right();
    01A9 940E0069  CALL	_for_right
(0040) 					  delay(1000);
    01AB EE08      LDI	R16,0xE8
    01AC E013      LDI	R17,3
    01AD 940E0078  CALL	_delay
(0041) 					  
(0042) 					};                              break;
    01AF C03E      RJMP	0x01EE
(0043) 					
(0044) 		case 0x04:  {
(0045) 		              back_right();
    01B0 940E006E  CALL	_back_right
(0046) 					  delay(1000);
    01B2 EE08      LDI	R16,0xE8
    01B3 E013      LDI	R17,3
    01B4 940E0078  CALL	_delay
(0047) 					  for_left();
    01B6 940E005F  CALL	_for_left
(0048) 					  delay(1000);
    01B8 EE08      LDI	R16,0xE8
    01B9 E013      LDI	R17,3
    01BA 940E0078  CALL	_delay
(0049) 					 
(0050) 				    };                              break;
    01BC C031      RJMP	0x01EE
(0051) 					
(0052) 		case 0x05:    forward();                    break;
    01BD 940E0055  CALL	_forward
    01BF C02E      RJMP	0x01EE
(0053) 		
(0054) 		case 0x06:  {
(0055) 		              back_right();
    01C0 940E006E  CALL	_back_right
(0056) 					  delay(1000);
    01C2 EE08      LDI	R16,0xE8
    01C3 E013      LDI	R17,3
    01C4 940E0078  CALL	_delay
(0057) 					  for_left();
    01C6 940E005F  CALL	_for_left
(0058) 					  delay(1000);
    01C8 EE08      LDI	R16,0xE8
    01C9 E013      LDI	R17,3
    01CA 940E0078  CALL	_delay
(0059) 					  
(0060) 					};                              break;
    01CC C021      RJMP	0x01EE
(0061) 					
(0062) 		case 0x07:  {
(0063) 		              backward(); 
    01CD 940E005A  CALL	_backward
(0064) 		              delay(1000);
    01CF EE08      LDI	R16,0xE8
    01D0 E013      LDI	R17,3
    01D1 940E0078  CALL	_delay
(0065) 					  for_left();
    01D3 940E005F  CALL	_for_left
(0066) 					  delay(1000);
    01D5 EE08      LDI	R16,0xE8
    01D6 E013      LDI	R17,3
    01D7 940E0078  CALL	_delay
(0067) 					};                              break;
    01D9 C014      RJMP	0x01EE
(0068) 					
(0069) /**************************以下为检测黑线时的执行函数************************************/
(0070) 										 
(0071) 		case 0x30:  for_left();                     break;
    01DA 940E005F  CALL	_for_left
    01DC C011      RJMP	0x01EE
(0072) 		
(0073) 		case 0x28:  forward();                      break;
    01DD 940E0055  CALL	_forward
    01DF C00E      RJMP	0x01EE
(0074) 					
(0075) 		case 0x18:  for_right();                    break;
    01E0 940E0069  CALL	_for_right
    01E2 C00B      RJMP	0x01EE
(0076) 		            
(0077) 		case 0x20:  for_left();                     break;
    01E3 940E005F  CALL	_for_left
    01E5 C008      RJMP	0x01EE
(0078) 		              
(0079) 		case 0x08:  for_right();                    break;
    01E6 940E0069  CALL	_for_right
    01E8 C005      RJMP	0x01EE
(0080) 		
(0081) 		case 0x38:  backward();                     break;
    01E9 940E005A  CALL	_backward
    01EB C002      RJMP	0x01EE
(0082) 		
(0083) 		default:    forward();                      break; 			
    01EC 940E0055  CALL	_forward
    01EE 940E022B  CALL	pop_gset1
    01F0 9508      RET
_main:
  mesg                 --> R20
  mesc                 --> R22
  pin                  --> R10
    01F1 9722      SBIW	R28,2
(0084) 					
(0085) 		
(0086) 		}
(0087) }
(0088) 
(0089) 
(0090) void main()
(0091) {
(0092)  unsigned char mesg,mesc;
(0093)  unsigned char pin;
(0094)  init_lcd();                         //初始化液晶
    01F2 940E011B  CALL	_init_lcd
(0095)  LCD_write_string(0,0,"auto car");   //显示信息
    01F4 E68A      LDI	R24,0x6A
    01F5 E090      LDI	R25,0
    01F6 8399      STD	Y+1,R25
    01F7 8388      STD	Y+0,R24
    01F8 2722      CLR	R18
    01F9 2700      CLR	R16
    01FA 940E00F9  CALL	_LCD_write_string
(0096)  LCD_write_string(0,1,"ATMega 16");
    01FC E680      LDI	R24,0x60
    01FD E090      LDI	R25,0
    01FE 8399      STD	Y+1,R25
    01FF 8388      STD	Y+0,R24
    0200 E021      LDI	R18,1
    0201 2700      CLR	R16
    0202 940E00F9  CALL	_LCD_write_string
    0204 C012      RJMP	0x0217
(0097) 
(0098)  while(1)
(0099)    { 
(0100)     pin = 0x00;              //初始化引脚信息
    0205 24AA      CLR	R10
(0101)     mesg = 0x00;            
    0206 2744      CLR	R20
(0102) 	mesc = 0x00;
    0207 2766      CLR	R22
(0103)     pin = ReadPin();         //读取引脚信息
    0208 DF1A      RCALL	_ReadPin
    0209 2EA0      MOV	R10,R16
(0104) 	mesc|= pin&0x07;         //屏蔽光电传感器干扰,检测障碍物
    020A 2D8A      MOV	R24,R10
    020B 7087      ANDI	R24,7
    020C 2B68      OR	R22,R24
(0105) 	mesg|= pin&0x38;         //屏蔽超声波干扰,检测黑线
    020D 2D8A      MOV	R24,R10
    020E 7388      ANDI	R24,0x38
    020F 2B48      OR	R20,R24
(0106) 	if(mesc)
    0210 2366      TST	R22
    0211 F019      BEQ	0x0215
(0107)         car_turn(mesc);  
    0212 2F06      MOV	R16,R22
    0213 DF16      RCALL	_car_turn
    0214 C002      RJMP	0x0217
(0108) 	else
(0109) 	    car_turn(mesg);
FILE: <library>
    0215 2F04      MOV	R16,R20
    0216 DF13      RCALL	_car_turn
    0217 CFED      RJMP	0x0205
    0218 9622      ADIW	R28,2
    0219 9508      RET
pop_gset2:
    021A E0E2      LDI	R30,2
    021B 940C022C  JMP	pop
pop_gset3:
    021D E0E4      LDI	R30,4
    021E 940C022C  JMP	pop
push_gset5:
    0220 92FA      ST	R15,-Y
    0221 92EA      ST	R14,-Y
push_gset4:
    0222 92DA      ST	R13,-Y
    0223 92CA      ST	R12,-Y
push_gset3:
    0224 92BA      ST	R11,-Y
    0225 92AA      ST	R10,-Y
push_gset2:
    0226 937A      ST	R23,-Y
    0227 936A      ST	R22,-Y
push_gset1:
    0228 935A      ST	R21,-Y
    0229 934A      ST	R20,-Y
    022A 9508      RET
pop_gset1:
    022B E0E1      LDI	R30,1
pop:
    022C 9149      LD	R20,Y+
    022D 9159      LD	R21,Y+
    022E FDE0      SBRC	R30,0
    022F 9508      RET
    0230 9169      LD	R22,Y+
    0231 9179      LD	R23,Y+
    0232 FDE1      SBRC	R30,1
    0233 9508      RET
    0234 90A9      LD	R10,Y+
    0235 90B9      LD	R11,Y+
    0236 FDE2      SBRC	R30,2
    0237 9508      RET
    0238 90C9      LD	R12,Y+
    0239 90D9      LD	R13,Y+
    023A FDE3      SBRC	R30,3
    023B 9508      RET
    023C 90E9      LD	R14,Y+
    023D 90F9      LD	R15,Y+
    023E 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -