?? scar.lst
字號:
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 + -