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

📄 scar.lst

📁 基于Robo-PICA robot kit的PIC 16F877a的单片机编程 Innovative Experiment Co.,Ltd.
💻 LST
📖 第 1 页 / 共 5 页
字号:
CCS PCM C Compiler, Version 3.187, 16465

               Filename: E:\DOCUME~1\LAB\桌面\工程备份\5FC25~1.8备\SCAR.LST

               ROM used: 3026 (37%)
                         Largest free fragment is 2048
               RAM used: 128 (73%) at main() level
                         153 (87%) worst case
               Stack:    5 locations

*
0000:  MOVLW  08
0001:  MOVWF  0A
0002:  GOTO   13A
0003:  NOP
....................  /******************************************************************************  
....................  * File     :  Scar.c  
....................  * Purpose  :  smartcar drive + sensor + wireless   
....................  * Author   :  smartcar team  
....................  * E-mail   :    
....................  * Release  :  4.9.2007  
....................  * Copyright (c) embedded lab school of software sjtu.  
....................  *****************************************************************************/  
....................   
.................... #include <16F877.h>                     // Standard Header file for the PIC16F877 device 
....................  //////// Standard Header file for the PIC16F877 device ////////////////  
.................... #device PIC16F877  
.................... #list  
....................  
.................... #define  TxD         PIN_C6             // Define Transmitted Data  
.................... #define  RxD         PIN_C7             // Define Received Data  
.................... #define  CLOCK_SP    20000000           // Clock Speed(Hz)  
....................   
....................   
.................... #device ADC=10                              // ADC 10 Bit  (1111111111=1,023  
.................... #use delay (clock=CLOCK_SP)                // Use built-in function: delay_ms() & delay_us()  
*
00B9:  MOVLW  D5
00BA:  MOVWF  04
00BB:  MOVF   00,W
00BC:  BTFSC  03.2
00BD:  GOTO   0CB
00BE:  MOVLW  06
00BF:  MOVWF  78
00C0:  CLRF   77
00C1:  DECFSZ 77,F
00C2:  GOTO   0C1
00C3:  DECFSZ 78,F
00C4:  GOTO   0C0
00C5:  MOVLW  7B
00C6:  MOVWF  77
00C7:  DECFSZ 77,F
00C8:  GOTO   0C7
00C9:  DECFSZ 00,F
00CA:  GOTO   0BE
00CB:  RETLW  00
.................... #use rs232(baud=9600, xmit=TxD,rcv=RxD)    // Use serial I/O port (RS232)  
.................... #use fast_io(A)                            // programming of the direction register.  
.................... #fuses HS                                  // Oscillator mode HS  
.................... #fuses NOLVP, NOWDT                        // No Low Voltage Program, No Watchdog timer  
.................... #fuses NOPROTECT                           // Code no protection  
....................   
.................... /***********************************************************************  
....................  **  Functions prototypes                                              *  
....................  ***********************************************************************/  
....................   
.................... #define LED0 PIN_B3  
.................... #define LED1 PIN_B4  
.................... #define LED2 PIN_B5  
....................   
.................... #define LEFT  0  
.................... #define RIGHT 1  
....................   
.................... //#define DEEP PIN_A4               //Speaker  
....................   
.................... #define rs PIN_C0                 //LCD  
.................... #define en PIN_C5  
....................   
.................... int16 i;  
.................... char Car_Id[10] = "sword\0";  
*
0947:  MOVLW  73
0948:  MOVWF  22
0949:  MOVLW  77
094A:  MOVWF  23
094B:  MOVLW  6F
094C:  MOVWF  24
094D:  MOVLW  72
094E:  MOVWF  25
094F:  MOVLW  64
0950:  MOVWF  26
0951:  CLRF   27
0952:  CLRF   28
0953:  CLRF   29
0954:  CLRF   2A
0955:  CLRF   2B
....................   
.................... #define BUF_SIZE	40  
.................... char 	buf[BUF_SIZE];  
....................   
.................... #define TURN_LEFT	1  
.................... #define TURN_RIGHT	2  
.................... #define	GO		3  
.................... #define REVERSE		4  
....................   
.................... #define STOP		8  
.................... #define ARRIVE		10  
....................   
....................   
.................... char direction = 'N';      		//方向初赋值  0100 north  
0956:  MOVLW  4E
0957:  MOVWF  54
.................... //            0010 east  
.................... //            0001 sorth  
.................... //            1000 west   
.................... //	  
.................... int16 count;                            //路口计数  
.................... int16 cmd;  
....................   
.................... char starting = 'A';  
0958:  MOVLW  41
0959:  MOVWF  59
.................... char destination;  
....................   
.................... #define MAX_CROSS	10  
.................... char ur_path[MAX_CROSS];  
....................   
.................... int16 IrSensorValue=0x00;              //0 or 1  
095A:  CLRF   65
095B:  CLRF   66
....................   
.................... void LCD_en_write(void)        //EN端产生一个高电平脉冲,写LCD  
.................... {  
.................... 	output_high(en);  
*
00CC:  BCF    67.5
00CD:  MOVF   67,W
00CE:  BSF    03.5
00CF:  MOVWF  07
00D0:  BCF    03.5
00D1:  BSF    07.5
*
095C:  MOVLW  FF
095D:  MOVWF  67
.................... 	delay_us(2);  
*
00D2:  MOVLW  03
00D3:  MOVWF  77
00D4:  DECFSZ 77,F
00D5:  GOTO   0D4
.................... 	output_low(en);  
00D6:  BCF    67.5
00D7:  MOVF   67,W
00D8:  BSF    03.5
00D9:  MOVWF  07
00DA:  BCF    03.5
00DB:  BCF    07.5
.................... }  
00DC:  RETLW  00
....................   
....................   
.................... void LCD_write_char(unsigned command,unsigned data)       //command=0  data  
.................... {          
.................... 	unsigned data_temp;   
.................... 	data_temp = data;  
00DD:  BSF    03.5
00DE:  MOVF   53,W
00DF:  MOVWF  54
.................... 	delay_us(1000);               //very very important!!  
00E0:  MOVLW  01
00E1:  MOVWF  55
00E2:  BCF    03.5
00E3:  CALL   0B9
....................   
.................... 	if (command == 1)                 //data  
.................... 	{  
00E4:  BSF    03.5
00E5:  DECFSZ 52,W
00E6:  GOTO   104
.................... 		OUTPUT_HIGH(rs);             //RS=1   
00E7:  BCF    03.5
00E8:  BCF    67.0
00E9:  MOVF   67,W
00EA:  BSF    03.5
00EB:  MOVWF  07
00EC:  BCF    03.5
00ED:  BSF    07.0
.................... 		//output_d(data <<4);          // LCD_DATA_PORT &= 0X0F;  
.................... 		OUTPUT_D(data_temp & 0xf0);  //LCD_DATA_PORT |= data_temp&0xf0;   //send high 4bit   
00EE:  BSF    03.5
00EF:  MOVF   54,W
00F0:  ANDLW  F0
00F1:  MOVWF  55
00F2:  MOVLW  00
00F3:  MOVWF  08
00F4:  MOVF   55,W
00F5:  BCF    03.5
00F6:  MOVWF  08
.................... 		LCD_en_write();  
00F7:  CALL   0CC
.................... 		data_temp=data_temp << 4;  
00F8:  BSF    03.5
00F9:  SWAPF  54,F
00FA:  MOVLW  F0
00FB:  ANDWF  54,F
.................... 		OUTPUT_D(data_temp);  
00FC:  MOVLW  00
00FD:  MOVWF  08
00FE:  MOVF   54,W
00FF:  BCF    03.5
0100:  MOVWF  08
.................... 		LCD_en_write();  
0101:  CALL   0CC
.................... 	}  
....................   
.................... 	else                                             //command  
.................... 	{  
0102:  GOTO   11F
0103:  BSF    03.5
.................... 		OUTPUT_LOW(rs);                              //RS=0  
0104:  BCF    03.5
0105:  BCF    67.0
0106:  MOVF   67,W
0107:  BSF    03.5
0108:  MOVWF  07
0109:  BCF    03.5
010A:  BCF    07.0
.................... 		//OUTPUT_D(data <<4);                       // LCD_DATA_PORT &= 0X0F;  
.................... 		OUTPUT_D(data_temp & 0xf0);                 //LCD_DATA_PORT |= command_temp&0xf0;//send high 4bit  
010B:  BSF    03.5
010C:  MOVF   54,W
010D:  ANDLW  F0
010E:  MOVWF  55
010F:  MOVLW  00
0110:  MOVWF  08
0111:  MOVF   55,W
0112:  BCF    03.5
0113:  MOVWF  08
.................... 		LCD_en_write();  
0114:  CALL   0CC
.................... 		data_temp=data_temp << 4;  
0115:  BSF    03.5
0116:  SWAPF  54,F
0117:  MOVLW  F0
0118:  ANDWF  54,F
.................... 		OUTPUT_D(data_temp);  
0119:  MOVLW  00
011A:  MOVWF  08
011B:  MOVF   54,W
011C:  BCF    03.5
011D:  MOVWF  08
.................... 		LCD_en_write();  
011E:  CALL   0CC
.................... 	}  
.................... }  
011F:  RETLW  00
....................   
....................   
.................... void LCD_set_xy( unsigned char x, unsigned char y )  
.................... {  
.................... 	unsigned char address;  
.................... 	if (y == 0) address = 0x80 + x;  
*
016D:  BSF    03.5
016E:  MOVF   50,F
016F:  BTFSS  03.2
0170:  GOTO   175
0171:  MOVLW  80
0172:  ADDWF  4F,W
0173:  MOVWF  51
.................... 	else   
.................... 		address = 0xc0 + x;  
0174:  GOTO   178
0175:  MOVLW  C0
0176:  ADDWF  4F,W
0177:  MOVWF  51
.................... 	LCD_write_char( 0, address );  
0178:  CLRF   52
0179:  MOVF   51,W
017A:  MOVWF  53
017B:  BCF    03.5
017C:  CALL   0DD
.................... }  
017D:  RETLW  00
....................   
....................   
.................... void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)  
.................... {  
.................... 	LCD_set_xy( X, Y );  
017E:  BSF    03.5
017F:  MOVF   4C,W
0180:  MOVWF  4F
0181:  MOVF   4D,W
0182:  MOVWF  50
0183:  BCF    03.5
0184:  CALL   16D
....................   
.................... 	while (*s)   
.................... 	{  
0185:  BSF    03.5
0186:  MOVF   4E,W
0187:  MOVWF  04
0188:  MOVF   00,F
0189:  BTFSC  03.2
018A:  GOTO   19A
.................... 		LCD_write_char( 1, *s );  
018B:  MOVF   4E,W
018C:  MOVWF  04
018D:  MOVF   00,W
018E:  MOVWF  4F
018F:  MOVLW  01
0190:  MOVWF  52
0191:  MOVF   4F,W
0192:  MOVWF  53
0193:  BCF    03.5
0194:  CALL   0DD
.................... 		s ++;  
0195:  BSF    03.5
0196:  INCF   4E,F
.................... 	}  
0197:  BCF    03.5
0198:  GOTO   185
0199:  BSF    03.5
.................... }  
019A:  BCF    03.5
019B:  RETLW  00
....................   
.................... /*void strcpy(char *s1, char *s2)         //used in LCD  
....................   {  
....................   while(*s1++ = *s2++)   ;  
....................   }*/  
....................   
.................... void LCD_init()  
.................... {  
.................... 	delay_ms(15);                    //init  
*
0120:  MOVLW  0F
0121:  BSF    03.5
0122:  MOVWF  55
0123:  BCF    03.5
0124:  CALL   0B9
.................... 	LCD_write_char(0,0x28);          //显示模式设置(不检测忙信号)//  
0125:  BSF    03.5
0126:  CLRF   52
0127:  MOVLW  28
0128:  MOVWF  53
0129:  BCF    03.5
012A:  CALL   0DD
.................... 	delay_ms(5);                     //共三次,确保可靠复位 //  
012B:  MOVLW  05
012C:  BSF    03.5
012D:  MOVWF  55
012E:  BCF    03.5
012F:  CALL   0B9
.................... 	LCD_write_char(0,0x28);  
0130:  BSF    03.5
0131:  CLRF   52
0132:  MOVLW  28

⌨️ 快捷键说明

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