Rev 140 | Blame | Last modification | View Log | SVN | RSS feed
MP2COD 4.02, COFF to COD File ConverterCopyright (c) 2006 Microchip Technology Inc.Listing File Generated: Sun Jan 28 14:54:04 2007Address Value Disassembly Source File------- ------- ----------------------- ------------------------------------------------------------------------------- -----/********************************************************************* F:\MCP\projects\CAN\canBase\Source\CAN.c* F:\MCP\projects\CAN\canBase\Source\CAN.c* CAN module F:\MCP\projects\CAN\canBase\Source\CAN.c* F:\MCP\projects\CAN\canBase\Source\CAN.c********************************************************************* F:\MCP\projects\CAN\canBase\Source\CAN.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canBase/Source/CAN.c $ F:\MCP\projects\CAN\canBase\Source\CAN.c* Last changed: $LastChangedDate: 2006-11-14 21:11:28 +0100 (ti, 14 nov 2006) $ F:\MCP\projects\CAN\canBase\Source\CAN.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\canBase\Source\CAN.c* Revision: $Revision: 95 $ F:\MCP\projects\CAN\canBase\Source\CAN.c********************************************************************/ F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c#include <CANdefs.h> F:\MCP\projects\CAN\canBase\Source\CAN.c#include <stackTasks.h> F:\MCP\projects\CAN\canBase\Source\CAN.c#include <CAN.h> F:\MCP\projects\CAN\canBase\Source\CAN.c#include <EEaccess.h> F:\MCP\projects\CAN\canBase\Source\CAN.c#include <funcdefs.h> F:\MCP\projects\CAN\canBase\Source\CAN.c#include <Tick.h> F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cTICK heartbeat; F:\MCP\projects\CAN\canBase\Source\CAN.cstatic int MY_ID = DEFAULT_ID; F:\MCP\projects\CAN\canBase\Source\CAN.cstatic BYTE MY_NID = DEFAULT_NID; F:\MCP\projects\CAN\canBase\Source\CAN.cstatic CAN_MESSAGE outCm; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cstatic void canGetPacket(void); F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c/* F:\MCP\projects\CAN\canBase\Source\CAN.c* Function: canInit F:\MCP\projects\CAN\canBase\Source\CAN.c* F:\MCP\projects\CAN\canBase\Source\CAN.c* Input: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Output: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Pre-conditions: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Affects: Changes can registers. F:\MCP\projects\CAN\canBase\Source\CAN.c* Depends: none. F:\MCP\projects\CAN\canBase\Source\CAN.c*/ F:\MCP\projects\CAN\canBase\Source\CAN.cvoid canInit() F:\MCP\projects\CAN\canBase\Source\CAN.c{ F:\MCP\projects\CAN\canBase\Source\CAN.c001050 0e80 MOVLW 0x80 CANCON = 0x80; //request config mode F:\MCP\projects\CAN\canBase\Source\CAN.c001052 6e6f MOVWF 0x6f,0x0001054 0ee0 MOVLW 0xe0 while ((CANSTAT & 0xE0) != 0x80 ); //wait for config mode request F:\MCP\projects\CAN\canBase\Source\CAN.c001056 146e ANDWF 0x6e,0x0,0x0001058 0880 SUBLW 0x8000105a e001 BZ 0x105e00105c d7fb BRA 0x1054F:\MCP\projects\CAN\canBase\Source\CAN.c// BAUD AND TQS F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// 500Khz@40Mhz (new by the book) F:\MCP\projects\CAN\canBase\Source\CAN.c00105e 0e04 MOVLW 0x4 BRGCON1 = 0x04; F:\MCP\projects\CAN\canBase\Source\CAN.c001060 6e70 MOVWF 0x70,0x0001062 0ed1 MOVLW 0xd1 BRGCON2 = 0xD1; F:\MCP\projects\CAN\canBase\Source\CAN.c001064 6e71 MOVWF 0x71,0x0001066 0e81 MOVLW 0x81 BRGCON3 = 0x81; F:\MCP\projects\CAN\canBase\Source\CAN.c001068 6e72 MOVWF 0x72,0x0F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON1=0; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Sync_Seq = 2 x TQ = 1 F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON1bits.SJW1=0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON1bits.SJW0=1; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Setting BRP. F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON1=BRGCON1|CAN_BRP; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Maximum PHEG1 F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.SEG2PHTS = 1; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Phase_Seg1 = 2 x TQ = 1 F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.SEG1PH2 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.SEG1PH1 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.SEG1PH0 = 1; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Prop_Seq = 2 x TQ = 1 F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.PRSEG2 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.PRSEG1 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON2bits.PRSEG0 = 1; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Enableing bus wake-up F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON3bits.WAKDIS = 0; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Dont use filter when wakeup F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON3bits.WAKFIL = 0; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Phase_Seg2 = 2 x TQ = 1 F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON3bits.SEG2PH2 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON3bits.SEG2PH1 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c//BRGCON3bits.SEG2PH0 = 1; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c00106a 6a77 CLRF 0x77,0x0 ECANCON=0; F:\MCP\projects\CAN\canBase\Source\CAN.c00106c 8e77 BSF 0x77,0x7,0x0 ECANCONbits.MDSEL1 = 1; // 0 For mode 1 F:\MCP\projects\CAN\canBase\Source\CAN.c00106e 9c77 BCF 0x77,0x6,0x0 ECANCONbits.MDSEL0 = 0; // 1 For mode 1 F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// FILTERS AND MASKS F:\MCP\projects\CAN\canBase\Source\CAN.c001070 8c60 BSF 0x60,0x6,0x0 RXB0CONbits.RXM1=1; F:\MCP\projects\CAN\canBase\Source\CAN.c001072 9a60 BCF 0x60,0x5,0x0 RXB0CONbits.RXM0=0; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// INTERRUPTS F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Diable transmit interrupt F:\MCP\projects\CAN\canBase\Source\CAN.c001074 010d MOVLB 0xd TXBIE = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c001076 6bfc CLRF 0xfc,0x1F:\MCP\projects\CAN\canBase\Source\CAN.c//rx any interrupt F:\MCP\projects\CAN\canBase\Source\CAN.c001078 6aa4 CLRF 0xa4,0x0 PIR3 = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c00107a 0e03 MOVLW 0x3 PIE3 = 0b00000011; F:\MCP\projects\CAN\canBase\Source\CAN.c00107c 6ea3 MOVWF 0xa3,0x0F:\MCP\projects\CAN\canBase\Source\CAN.c// High interrupt F:\MCP\projects\CAN\canBase\Source\CAN.c00107e 6ea5 MOVWF 0xa5,0x0 IPR3 =0b00000011; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Programmable buffers interrupt F:\MCP\projects\CAN\canBase\Source\CAN.c001080 69fa SETF 0xfa,0x1 BIE0 = 0xFF; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c//loopback mode or not F:\MCP\projects\CAN\canBase\Source\CAN.c#ifdef CAN_LOOPBACK_MODE F:\MCP\projects\CAN\canBase\Source\CAN.cCANCON = 0x40;//request loopback mode F:\MCP\projects\CAN\canBase\Source\CAN.cwhile ((CANSTAT & 0xE0) != 0x40 );//wait for loopback mode F:\MCP\projects\CAN\canBase\Source\CAN.c#else F:\MCP\projects\CAN\canBase\Source\CAN.c001082 6a6f CLRF 0x6f,0x0 CANCON = 0x00;//request normal mode F:\MCP\projects\CAN\canBase\Source\CAN.c001084 0ee0 MOVLW 0xe0 while ((CANSTAT & 0xE0) != 0x00 );//wait for normal mode F:\MCP\projects\CAN\canBase\Source\CAN.c001086 146e ANDWF 0x6e,0x0,0x0001088 e001 BZ 0x108c00108a d7fc BRA 0x1084#endif F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Init ticker service F:\MCP\projects\CAN\canBase\Source\CAN.c00108c ecd3 CALL 0x1ba6,0x0 tickInit(); F:\MCP\projects\CAN\canBase\Source\CAN.c00108e f00dF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Read ID and NID if exist. F:\MCP\projects\CAN\canBase\Source\CAN.c001090 0e00 MOVLW 0x0 if (EERead(NODE_ID_EE)==NODE_HAS_ID) F:\MCP\projects\CAN\canBase\Source\CAN.c001092 6ee6 MOVWF 0xe6,0x0001094 6ae6 CLRF 0xe6,0x0001096 ec2e CALL 0x1a5c,0x0001098 f00d00109a 52e5 MOVF 0xe5,0x1,0x000109c 52e5 MOVF 0xe5,0x1,0x000109e 082a SUBLW 0x2a0010a0 e12b BNZ 0x10f8{ F:\MCP\projects\CAN\canBase\Source\CAN.c0010a2 0e01 MOVLW 0x1 MY_ID=(((WORD)EERead(NODE_ID_EE + 1))<<8)+EERead(NODE_ID_EE + 2); F:\MCP\projects\CAN\canBase\Source\CAN.c0010a4 6ee6 MOVWF 0xe6,0x00010a6 6ae6 CLRF 0xe6,0x00010a8 ec2e CALL 0x1a5c,0x00010aa f00d0010ac 52e5 MOVF 0xe5,0x1,0x00010ae 52e5 MOVF 0xe5,0x1,0x00010b0 6e00 MOVWF 0x0,0x00010b2 c000 MOVFF 0x0,0x10010b4 f0010010b6 6a00 CLRF 0x0,0x00010b8 c000 MOVFF 0x0,0xfe60010ba ffe60010bc c001 MOVFF 0x1,0xfe60010be ffe60010c0 0e02 MOVLW 0x20010c2 6ee6 MOVWF 0xe6,0x00010c4 6ae6 CLRF 0xe6,0x00010c6 ec2e CALL 0x1a5c,0x00010c8 f00d0010ca 52e5 MOVF 0xe5,0x1,0x00010cc 52e5 MOVF 0xe5,0x1,0x00010ce 52e5 MOVF 0xe5,0x1,0x00010d0 cfe7 MOVFF 0xfe7,0x10010d2 f0010010d4 52e5 MOVF 0xe5,0x1,0x00010d6 cfe7 MOVFF 0xfe7,0x00010d8 f0000010da 0100 MOVLB 0x00010dc 2400 ADDWF 0x0,0x0,0x00010de 6f89 MOVWF 0x89,0x10010e0 0e00 MOVLW 0x00010e2 2001 ADDWFC 0x1,0x0,0x00010e4 6f8a MOVWF 0x8a,0x10010e6 0e03 MOVLW 0x3 MY_NID=EERead(NODE_ID_EE + 3); F:\MCP\projects\CAN\canBase\Source\CAN.c0010e8 6ee6 MOVWF 0xe6,0x00010ea 6ae6 CLRF 0xe6,0x00010ec ec2e CALL 0x1a5c,0x00010ee f00d0010f0 52e5 MOVF 0xe5,0x1,0x00010f2 52e5 MOVF 0xe5,0x1,0x00010f4 0100 MOVLB 0x00010f6 6f8b MOVWF 0x8b,0x1} F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Send user program startup heatbeat F:\MCP\projects\CAN\canBase\Source\CAN.c0010f8 0100 MOVLB 0x0 outCm.funct = FUNCT_BOOTLOADER; F:\MCP\projects\CAN\canBase\Source\CAN.c0010fa 6b64 CLRF 0x64,0x10010fc 0e08 MOVLW 0x8 outCm.funcc = FUNCC_BOOT_HEARTBEAT; F:\MCP\projects\CAN\canBase\Source\CAN.c0010fe 6f65 MOVWF 0x65,0x1001100 6b66 CLRF 0x66,0x1001102 0e01 MOVLW 0x1 outCm.data_length = 1; F:\MCP\projects\CAN\canBase\Source\CAN.c001104 6f6a MOVWF 0x6a,0x1001106 6f6b MOVWF 0x6b,0x1 outCm.data[BOOT_DATA_HEARTBEAT_INDEX] = HEARTBEAT_USER_STARTUP; F:\MCP\projects\CAN\canBase\Source\CAN.c001108 0e02 MOVLW 0x2 while(!canSendMessage(outCm,PRIO_HIGH)); F:\MCP\projects\CAN\canBase\Source\CAN.c00110a 6ee6 MOVWF 0xe6,0x000110c c064 MOVFF 0x64,0xfe600110e ffe6001110 c065 MOVFF 0x65,0xfe6001112 ffe6001114 c066 MOVFF 0x66,0xfe6001116 ffe6001118 c067 MOVFF 0x67,0xfe600111a ffe600111c c068 MOVFF 0x68,0xfe600111e ffe6001120 c069 MOVFF 0x69,0xfe6001122 ffe6001124 c06a MOVFF 0x6a,0xfe6001126 ffe6001128 c06b MOVFF 0x6b,0xfe600112a ffe600112c c06c MOVFF 0x6c,0xfe600112e ffe6001130 c06d MOVFF 0x6d,0xfe6001132 ffe6001134 c06e MOVFF 0x6e,0xfe6001136 ffe6001138 c06f MOVFF 0x6f,0xfe600113a ffe600113c c070 MOVFF 0x70,0xfe600113e ffe6001140 c071 MOVFF 0x71,0xfe6001142 ffe6001144 c072 MOVFF 0x72,0xfe6001146 ffe6001148 d9f3 RCALL 0x153000114a 6e00 MOVWF 0x0,0x000114c 0e10 MOVLW 0x1000114e 5ee1 SUBWF 0xe1,0x1,0x0001150 5000 MOVF 0x0,0x0,0x0001152 0900 IORLW 0x0001154 e101 BNZ 0x1158001156 d7d8 BRA 0x1108F:\MCP\projects\CAN\canBase\Source\CAN.c001158 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c/* F:\MCP\projects\CAN\canBase\Source\CAN.c* Function: canISR F:\MCP\projects\CAN\canBase\Source\CAN.c* F:\MCP\projects\CAN\canBase\Source\CAN.c* Input: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Output: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Pre-conditions: a call to canInit() F:\MCP\projects\CAN\canBase\Source\CAN.c* Affects: interrupt registers and receive data buffers F:\MCP\projects\CAN\canBase\Source\CAN.c* Depends: .. F:\MCP\projects\CAN\canBase\Source\CAN.c*/ F:\MCP\projects\CAN\canBase\Source\CAN.cvoid canISR() F:\MCP\projects\CAN\canBase\Source\CAN.c{ F:\MCP\projects\CAN\canBase\Source\CAN.c00115a 50a4 MOVF 0xa4,0x0,0x0 if (PIR3bits.RXBnIF || PIR3bits.RXB1IF || PIR3bits.RXB0IF) F:\MCP\projects\CAN\canBase\Source\CAN.c00115c 0b02 ANDLW 0x200115e e106 BNZ 0x116c001160 50a4 MOVF 0xa4,0x0,0x0001162 0b02 ANDLW 0x2001164 e103 BNZ 0x116c001166 50a4 MOVF 0xa4,0x0,0x0001168 0b01 ANDLW 0x100116a e016 BZ 0x1198{ F:\MCP\projects\CAN\canBase\Source\CAN.c00116c 0e0f MOVLW 0xf ECANCON=(ECANCON&0b00000)|(0b10000|(CANCON&0x0F)); F:\MCP\projects\CAN\canBase\Source\CAN.c00116e 146f ANDWF 0x6f,0x0,0x0001170 0910 IORLW 0x10001172 6e00 MOVWF 0x0,0x0001174 0e00 MOVLW 0x0001176 1477 ANDWF 0x77,0x0,0x0001178 1000 IORWF 0x0,0x0,0x000117a 6e77 MOVWF 0x77,0x000117c be60 BTFSC 0x60,0x7,0x0 if (RXB0CONbits.RXFUL) canGetPacket(); F:\MCP\projects\CAN\canBase\Source\CAN.c00117e d86a RCALL 0x1254F:\MCP\projects\CAN\canBase\Source\CAN.c001180 a2a4 BTFSS 0xa4,0x1,0x0 if (PIR3bits.RXBnIF) {PIR3bits.RXBnIF = 0; return;} F:\MCP\projects\CAN\canBase\Source\CAN.c001182 d002 BRA 0x1188001184 92a4 BCF 0xa4,0x1,0x0001186 d065 BRA 0x1252001188 a2a4 BTFSS 0xa4,0x1,0x0 if (PIR3bits.RXB1IF) {PIR3bits.RXB1IF = 0; return;} F:\MCP\projects\CAN\canBase\Source\CAN.c00118a d002 BRA 0x119000118c 92a4 BCF 0xa4,0x1,0x000118e d061 BRA 0x1252001190 a0a4 BTFSS 0xa4,0x0,0x0 if (PIR3bits.RXB0IF) {PIR3bits.RXB0IF = 0; return;} F:\MCP\projects\CAN\canBase\Source\CAN.c001192 d002 BRA 0x1198001194 90a4 BCF 0xa4,0x0,0x0001196 d05d BRA 0x1252} F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c001198 ece7 CALL 0x1bce,0x0 tickUpdate(); F:\MCP\projects\CAN\canBase\Source\CAN.c00119a f00dF:\MCP\projects\CAN\canBase\Source\CAN.c00119c ecdd CALL 0x1bba,0x0 if ((tickGet()-heartbeat)>TICK_SECOND*5) F:\MCP\projects\CAN\canBase\Source\CAN.c00119e f00d0011a0 0100 MOVLB 0x00011a2 5160 MOVF 0x60,0x0,0x10011a4 5c12 SUBWF 0x12,0x0,0x00011a6 6e00 MOVWF 0x0,0x00011a8 0100 MOVLB 0x00011aa 5161 MOVF 0x61,0x0,0x10011ac 5813 SUBWFB 0x13,0x0,0x00011ae 6e01 MOVWF 0x1,0x00011b0 0100 MOVLB 0x00011b2 5162 MOVF 0x62,0x0,0x10011b4 5814 SUBWFB 0x14,0x0,0x00011b6 6e02 MOVWF 0x2,0x00011b8 0100 MOVLB 0x00011ba 5163 MOVF 0x63,0x0,0x10011bc 5815 SUBWFB 0x15,0x0,0x00011be 6e03 MOVWF 0x3,0x00011c0 80d8 BSF 0xd8,0x0,0x00011c2 0ef4 MOVLW 0xf40011c4 5400 SUBFWB 0x0,0x0,0x00011c6 0e01 MOVLW 0x10011c8 5401 SUBFWB 0x1,0x0,0x00011ca 0e00 MOVLW 0x00011cc 5402 SUBFWB 0x2,0x0,0x00011ce 0e00 MOVLW 0x00011d0 5403 SUBFWB 0x3,0x0,0x00011d2 e23e BC 0x1250{ F:\MCP\projects\CAN\canBase\Source\CAN.c// Send alive heartbeat F:\MCP\projects\CAN\canBase\Source\CAN.c0011d4 0100 MOVLB 0x0 outCm.funct = FUNCT_BOOTLOADER; F:\MCP\projects\CAN\canBase\Source\CAN.c0011d6 6b64 CLRF 0x64,0x10011d8 0e08 MOVLW 0x8 outCm.funcc = FUNCC_BOOT_HEARTBEAT; F:\MCP\projects\CAN\canBase\Source\CAN.c0011da 0100 MOVLB 0x00011dc 6f65 MOVWF 0x65,0x10011de 6b66 CLRF 0x66,0x10011e0 0100 MOVLB 0x0 outCm.data_length = 1; F:\MCP\projects\CAN\canBase\Source\CAN.c0011e2 0e01 MOVLW 0x10011e4 6f6a MOVWF 0x6a,0x10011e6 0100 MOVLB 0x0 outCm.data[BOOT_DATA_HEARTBEAT_INDEX] = HEARTBEAT_ALIVE; F:\MCP\projects\CAN\canBase\Source\CAN.c0011e8 0e02 MOVLW 0x20011ea 6f6b MOVWF 0x6b,0x10011ec 0e02 MOVLW 0x2 while(!canSendMessage(outCm,PRIO_HIGH)); F:\MCP\projects\CAN\canBase\Source\CAN.c0011ee 6ee6 MOVWF 0xe6,0x00011f0 c064 MOVFF 0x64,0xfe60011f2 ffe60011f4 c065 MOVFF 0x65,0xfe60011f6 ffe60011f8 c066 MOVFF 0x66,0xfe60011fa ffe60011fc c067 MOVFF 0x67,0xfe60011fe ffe6001200 c068 MOVFF 0x68,0xfe6001202 ffe6001204 c069 MOVFF 0x69,0xfe6001206 ffe6001208 c06a MOVFF 0x6a,0xfe600120a ffe600120c c06b MOVFF 0x6b,0xfe600120e ffe6001210 c06c MOVFF 0x6c,0xfe6001212 ffe6001214 c06d MOVFF 0x6d,0xfe6001216 ffe6001218 c06e MOVFF 0x6e,0xfe600121a ffe600121c c06f MOVFF 0x6f,0xfe600121e ffe6001220 c070 MOVFF 0x70,0xfe6001222 ffe6001224 c071 MOVFF 0x71,0xfe6001226 ffe6001228 c072 MOVFF 0x72,0xfe600122a ffe600122c d981 RCALL 0x153000122e 6e00 MOVWF 0x0,0x0001230 0e10 MOVLW 0x10001232 5ee1 SUBWF 0xe1,0x1,0x0001234 5000 MOVF 0x0,0x0,0x0001236 0900 IORLW 0x0001238 e101 BNZ 0x123c00123a d7d8 BRA 0x11ecF:\MCP\projects\CAN\canBase\Source\CAN.c00123c ecdd CALL 0x1bba,0x0 heartbeat = tickGet(); F:\MCP\projects\CAN\canBase\Source\CAN.c00123e f00d001240 c012 MOVFF 0x12,0x60001242 f060001244 c013 MOVFF 0x13,0x61001246 f061001248 c014 MOVFF 0x14,0x6200124a f06200124c c015 MOVFF 0x15,0x6300124e f063} F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c001250 0004 CLRWDT ClrWdt(); F:\MCP\projects\CAN\canBase\Source\CAN.c001252 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c/* F:\MCP\projects\CAN\canBase\Source\CAN.c* Function: canGetPacket F:\MCP\projects\CAN\canBase\Source\CAN.c* F:\MCP\projects\CAN\canBase\Source\CAN.c* Input: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Output: none F:\MCP\projects\CAN\canBase\Source\CAN.c* Pre-conditions: a call to canISR and an packet is available and banked to RXB0 F:\MCP\projects\CAN\canBase\Source\CAN.c* Affects: Calls canParse() function in main for parsing received packet. F:\MCP\projects\CAN\canBase\Source\CAN.c* Depends: none. F:\MCP\projects\CAN\canBase\Source\CAN.c*/ F:\MCP\projects\CAN\canBase\Source\CAN.c001254 cfd9 MOVFF 0xfd9,0xfe6 void canGetPacket() F:\MCP\projects\CAN\canBase\Source\CAN.c001256 ffe6001258 cfe1 MOVFF 0xfe1,0xfd900125a ffd900125c 0e0f MOVLW 0xf00125e 26e1 ADDWF 0xe1,0x1,0x0{ F:\MCP\projects\CAN\canBase\Source\CAN.cCAN_MESSAGE cm; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0SIDH 28 27 26 25 24 23 22 21 F:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0SIDL 20 19 18 xx xx xx 17 16 F:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0EIDH 15 14 13 12 11 10 09 08 F:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0EIDL 07 06 05 04 03 02 01 00 F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c//funct xx xx xx xx 28 27 26 25 F:\MCP\projects\CAN\canBase\Source\CAN.c//funcc xx xx xx xx xx xx 24 23 22 21 20 19 18 17 16 15 F:\MCP\projects\CAN\canBase\Source\CAN.c//nid xx xx 14 13 12 11 10 09 F:\MCP\projects\CAN\canBase\Source\CAN.c//sid xx xx xx xx xx xx xx 08 07 06 05 04 03 02 01 00 F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c001260 0ef0 MOVLW 0xf0 cm.funct=((RXB0SIDH & 0xF0)>>4); F:\MCP\projects\CAN\canBase\Source\CAN.c001262 1461 ANDWF 0x61,0x0,0x0001264 38e8 SWAPF 0xe8,0x0,0x0001266 0b0f ANDLW 0xf001268 6edf MOVWF 0xdf,0x000126a 0e0f MOVLW 0xf cm.funcc=(((WORD)(RXB0SIDH & 0x0F))<<6)+(((WORD)(RXB0SIDL & 0xE0))>>2)+(((WORD)(RXB0SIDL & 0x03))<<1)+(((WORD)(RXB0EIDH & 0x80))>>7); F:\MCP\projects\CAN\canBase\Source\CAN.c00126c 1461 ANDWF 0x61,0x0,0x000126e 6e06 MOVWF 0x6,0x0001270 6a07 CLRF 0x7,0x0001272 0e06 MOVLW 0x6001274 90d8 BCF 0xd8,0x0,0x0001276 3606 RLCF 0x6,0x1,0x0001278 3607 RLCF 0x7,0x1,0x000127a 04e8 DECF 0xe8,0x0,0x000127c e1fb BNZ 0x127400127e 0ee0 MOVLW 0xe0001280 1462 ANDWF 0x62,0x0,0x0001282 6e08 MOVWF 0x8,0x0001284 6a09 CLRF 0x9,0x0001286 90d8 BCF 0xd8,0x0,0x0001288 3209 RRCF 0x9,0x1,0x000128a 3208 RRCF 0x8,0x1,0x000128c 90d8 BCF 0xd8,0x0,0x000128e 3209 RRCF 0x9,0x1,0x0001290 3208 RRCF 0x8,0x1,0x0001292 5006 MOVF 0x6,0x0,0x0001294 2408 ADDWF 0x8,0x0,0x0001296 6e04 MOVWF 0x4,0x0001298 5007 MOVF 0x7,0x0,0x000129a 2009 ADDWFC 0x9,0x0,0x000129c 6e05 MOVWF 0x5,0x000129e 0e03 MOVLW 0x30012a0 1462 ANDWF 0x62,0x0,0x00012a2 6e0a MOVWF 0xa,0x00012a4 6a0b CLRF 0xb,0x00012a6 90d8 BCF 0xd8,0x0,0x00012a8 360a RLCF 0xa,0x1,0x00012aa 360b RLCF 0xb,0x1,0x00012ac 5004 MOVF 0x4,0x0,0x00012ae 240a ADDWF 0xa,0x0,0x00012b0 6e02 MOVWF 0x2,0x00012b2 5005 MOVF 0x5,0x0,0x00012b4 200b ADDWFC 0xb,0x0,0x00012b6 6e03 MOVWF 0x3,0x00012b8 0e80 MOVLW 0x800012ba 1463 ANDWF 0x63,0x0,0x00012bc 6e0c MOVWF 0xc,0x00012be 6a0d CLRF 0xd,0x00012c0 0e07 MOVLW 0x70012c2 90d8 BCF 0xd8,0x0,0x00012c4 320d RRCF 0xd,0x1,0x00012c6 320c RRCF 0xc,0x1,0x00012c8 04e8 DECF 0xe8,0x0,0x00012ca e1fb BNZ 0x12c20012cc 5002 MOVF 0x2,0x0,0x00012ce 240c ADDWF 0xc,0x0,0x00012d0 6e00 MOVWF 0x0,0x00012d2 5003 MOVF 0x3,0x0,0x00012d4 200d ADDWFC 0xd,0x0,0x00012d6 6e01 MOVWF 0x1,0x00012d8 0e01 MOVLW 0x10012da c000 MOVFF 0x0,0xfdb0012dc ffdb0012de 0e02 MOVLW 0x20012e0 c001 MOVFF 0x1,0xfdb0012e2 ffdb0012e4 0e7e MOVLW 0x7e cm.nid=((RXB0EIDH & 0x7E)>>1); F:\MCP\projects\CAN\canBase\Source\CAN.c0012e6 1463 ANDWF 0x63,0x0,0x00012e8 40e8 RRNCF 0xe8,0x0,0x00012ea 0b7f ANDLW 0x7f0012ec 6ee7 MOVWF 0xe7,0x00012ee 0e03 MOVLW 0x30012f0 cfe7 MOVFF 0xfe7,0xfdb0012f2 ffdb0012f4 0e01 MOVLW 0x1 cm.sid=(((WORD)(RXB0EIDH & 0x01))<<8)+RXB0EIDL; F:\MCP\projects\CAN\canBase\Source\CAN.c0012f6 1463 ANDWF 0x63,0x0,0x00012f8 6e02 MOVWF 0x2,0x00012fa c002 MOVFF 0x2,0x30012fc f0030012fe 6a02 CLRF 0x2,0x0001300 5064 MOVF 0x64,0x0,0x0001302 0100 MOVLB 0x0001304 2402 ADDWF 0x2,0x0,0x0001306 6e00 MOVWF 0x0,0x0001308 0e00 MOVLW 0x000130a 2003 ADDWFC 0x3,0x0,0x000130c 6e01 MOVWF 0x1,0x000130e 0e04 MOVLW 0x4001310 c000 MOVFF 0x0,0xfdb001312 ffdb001314 0e05 MOVLW 0x5001316 c001 MOVFF 0x1,0xfdb001318 ffdbF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Data length F:\MCP\projects\CAN\canBase\Source\CAN.c00131a 5065 MOVF 0x65,0x0,0x0 cm.data_length=(RXB0DLCbits.DLC3<<3)+(RXB0DLCbits.DLC2<<2)+(RXB0DLCbits.DLC1<<1)+RXB0DLCbits.DLC0; F:\MCP\projects\CAN\canBase\Source\CAN.c00131c 0b01 ANDLW 0x100131e 6e02 MOVWF 0x2,0x0001320 5065 MOVF 0x65,0x0,0x0001322 0b02 ANDLW 0x2001324 e001 BZ 0x1328001326 0e01 MOVLW 0x1001328 24e8 ADDWF 0xe8,0x0,0x000132a 6e01 MOVWF 0x1,0x000132c 5065 MOVF 0x65,0x0,0x000132e 0b04 ANDLW 0x4001330 e001 BZ 0x1334001332 0e01 MOVLW 0x1001334 0d04 MULLW 0x4001336 cff3 MOVFF 0xff3,0x0001338 f00000133a 5065 MOVF 0x65,0x0,0x000133c 0b08 ANDLW 0x800133e e001 BZ 0x1342001340 0e01 MOVLW 0x1001342 0d08 MULLW 0x8001344 50f3 MOVF 0xf3,0x0,0x0001346 2400 ADDWF 0x0,0x0,0x0001348 2401 ADDWF 0x1,0x0,0x000134a 2402 ADDWF 0x2,0x0,0x000134c 6ee7 MOVWF 0xe7,0x000134e 0e06 MOVLW 0x6001350 cfe7 MOVFF 0xfe7,0xfdb001352 ffdbF:\MCP\projects\CAN\canBase\Source\CAN.c// Data one bye one, for speed F:\MCP\projects\CAN\canBase\Source\CAN.c001354 0e07 MOVLW 0x7 cm.data[0]=RXB0D0; cm.data[1]=RXB0D1; F:\MCP\projects\CAN\canBase\Source\CAN.c001356 cf66 MOVFF 0xf66,0xfdb001358 ffdb00135a 0e08 MOVLW 0x800135c cf67 MOVFF 0xf67,0xfdb00135e ffdb001360 0e09 MOVLW 0x9 cm.data[2]=RXB0D2; cm.data[3]=RXB0D3; F:\MCP\projects\CAN\canBase\Source\CAN.c001362 cf68 MOVFF 0xf68,0xfdb001364 ffdb001366 0e0a MOVLW 0xa001368 cf69 MOVFF 0xf69,0xfdb00136a ffdb00136c 0e0b MOVLW 0xb cm.data[4]=RXB0D4; cm.data[5]=RXB0D5; F:\MCP\projects\CAN\canBase\Source\CAN.c00136e cf6a MOVFF 0xf6a,0xfdb001370 ffdb001372 0e0c MOVLW 0xc001374 cf6b MOVFF 0xf6b,0xfdb001376 ffdb001378 0e0d MOVLW 0xd cm.data[6]=RXB0D6; cm.data[7]=RXB0D7; F:\MCP\projects\CAN\canBase\Source\CAN.c00137a cf6c MOVFF 0xf6c,0xfdb00137c ffdb00137e 0e0e MOVLW 0xe001380 cf6d MOVFF 0xf6d,0xfdb001382 ffdbF:\MCP\projects\CAN\canBase\Source\CAN.c// Clear ful status F:\MCP\projects\CAN\canBase\Source\CAN.c001384 9e60 BCF 0x60,0x7,0x0 RXB0CONbits.RXFUL=0; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Check if FUNCT_BOOTLOADER specific. F:\MCP\projects\CAN\canBase\Source\CAN.c// reset and id change F:\MCP\projects\CAN\canBase\Source\CAN.c001386 50df MOVF 0xdf,0x0,0x0 if (cm.funct==FUNCT_BOOTLOADER) F:\MCP\projects\CAN\canBase\Source\CAN.c001388 e001 BZ 0x138c00138a d0a0 BRA 0x14cc{ F:\MCP\projects\CAN\canBase\Source\CAN.c00138c 0e03 MOVLW 0x3 if (cm.nid==MY_NID && ((((unsigned int)cm.data[BOOT_DATA_RID_HIGH_INDEX])<<8)+cm.data[BOOT_DATA_RID_LOW_INDEX])==MY_ID) F:\MCP\projects\CAN\canBase\Source\CAN.c00138e 50db MOVF 0xdb,0x0,0x0001390 0100 MOVLB 0x0001392 5d8b SUBWF 0x8b,0x0,0x1001394 e001 BZ 0x1398001396 d09a BRA 0x14cc001398 0e0c MOVLW 0xc00139a cfdb MOVFF 0xfdb,0x200139c f00200139e c002 MOVFF 0x2,0x30013a0 f0030013a2 6a02 CLRF 0x2,0x00013a4 0e0b MOVLW 0xb0013a6 50db MOVF 0xdb,0x0,0x00013a8 0100 MOVLB 0x00013aa 2402 ADDWF 0x2,0x0,0x00013ac 6e00 MOVWF 0x0,0x00013ae 0e00 MOVLW 0x00013b0 2003 ADDWFC 0x3,0x0,0x00013b2 6e01 MOVWF 0x1,0x00013b4 0100 MOVLB 0x00013b6 5189 MOVF 0x89,0x0,0x10013b8 1800 XORWF 0x0,0x0,0x00013ba e102 BNZ 0x13c00013bc 518a MOVF 0x8a,0x0,0x10013be 1801 XORWF 0x1,0x0,0x00013c0 e001 BZ 0x13c40013c2 d084 BRA 0x14cc{ F:\MCP\projects\CAN\canBase\Source\CAN.c0013c4 50d9 MOVF 0xd9,0x0,0x0 if (cm.funcc==FUNCC_BOOT_INIT) Reset(); // Reset me. F:\MCP\projects\CAN\canBase\Source\CAN.c0013c6 0f01 ADDLW 0x10013c8 6ee9 MOVWF 0xe9,0x00013ca cfda MOVFF 0xfda,0xfea0013cc ffea0013ce 0e01 MOVLW 0x10013d0 18ee XORWF 0xee,0x0,0x00013d2 e101 BNZ 0x13d60013d4 50ed MOVF 0xed,0x0,0x00013d6 e101 BNZ 0x13da0013d8 00ff RESET0013da 50d9 MOVF 0xd9,0x0,0x0 if (cm.funcc==FUNCC_BOOT_SET_ID) F:\MCP\projects\CAN\canBase\Source\CAN.c0013dc 0f01 ADDLW 0x10013de 6ee9 MOVWF 0xe9,0x00013e0 cfda MOVFF 0xfda,0xfea0013e2 ffea0013e4 0e06 MOVLW 0x60013e6 18ee XORWF 0xee,0x0,0x00013e8 e101 BNZ 0x13ec0013ea 50ed MOVF 0xed,0x0,0x00013ec e16f BNZ 0x14cc{ F:\MCP\projects\CAN\canBase\Source\CAN.c// Change my ID and NID F:\MCP\projects\CAN\canBase\Source\CAN.c0013ee 0e08 MOVLW 0x8 MY_ID=(((WORD)cm.data[BOOT_DATA_NEW_ID_HIGH_INDEX])<<8)+cm.data[BOOT_DATA_NEW_ID_LOW_INDEX]; F:\MCP\projects\CAN\canBase\Source\CAN.c0013f0 cfdb MOVFF 0xfdb,0x00013f2 f0000013f4 c000 MOVFF 0x0,0x10013f6 f0010013f8 6a00 CLRF 0x0,0x00013fa 0e07 MOVLW 0x70013fc 50db MOVF 0xdb,0x0,0x00013fe 0100 MOVLB 0x0001400 2400 ADDWF 0x0,0x0,0x0001402 6f89 MOVWF 0x89,0x1001404 0e00 MOVLW 0x0001406 2001 ADDWFC 0x1,0x0,0x0001408 6f8a MOVWF 0x8a,0x100140a 0e09 MOVLW 0x9 MY_NID=cm.data[BOOT_DATA_NEW_NID_INDEX]; F:\MCP\projects\CAN\canBase\Source\CAN.c00140c cfdb MOVFF 0xfdb,0x8b00140e f08b001410 0e08 MOVLW 0x8 EEWrite(NODE_ID_EE+1,cm.data[BOOT_DATA_NEW_ID_HIGH_INDEX]); F:\MCP\projects\CAN\canBase\Source\CAN.c001412 cfdb MOVFF 0xfdb,0xfe6001414 ffe6001416 0e01 MOVLW 0x1001418 6ee6 MOVWF 0xe6,0x000141a 6ae6 CLRF 0xe6,0x000141c ec53 CALL 0x1aa6,0x000141e f00d001420 52e5 MOVF 0xe5,0x1,0x0001422 52e5 MOVF 0xe5,0x1,0x0001424 52e5 MOVF 0xe5,0x1,0x0001426 0e07 MOVLW 0x7 EEWrite(NODE_ID_EE+2,cm.data[BOOT_DATA_NEW_ID_LOW_INDEX]); F:\MCP\projects\CAN\canBase\Source\CAN.c001428 cfdb MOVFF 0xfdb,0xfe600142a ffe600142c 0e02 MOVLW 0x200142e 6ee6 MOVWF 0xe6,0x0001430 6ae6 CLRF 0xe6,0x0001432 ec53 CALL 0x1aa6,0x0001434 f00d001436 52e5 MOVF 0xe5,0x1,0x0001438 52e5 MOVF 0xe5,0x1,0x000143a 52e5 MOVF 0xe5,0x1,0x000143c 0e09 MOVLW 0x9 EEWrite(NODE_ID_EE+3,cm.data[BOOT_DATA_NEW_NID_INDEX]); F:\MCP\projects\CAN\canBase\Source\CAN.c00143e cfdb MOVFF 0xfdb,0xfe6001440 ffe6001442 0e03 MOVLW 0x3001444 6ee6 MOVWF 0xe6,0x0001446 6ae6 CLRF 0xe6,0x0001448 ec53 CALL 0x1aa6,0x000144a f00d00144c 52e5 MOVF 0xe5,0x1,0x000144e 52e5 MOVF 0xe5,0x1,0x0001450 52e5 MOVF 0xe5,0x1,0x0001452 0e2a MOVLW 0x2a EEWrite(NODE_ID_EE,NODE_HAS_ID); F:\MCP\projects\CAN\canBase\Source\CAN.c001454 6ee6 MOVWF 0xe6,0x0001456 0e00 MOVLW 0x0001458 6ee6 MOVWF 0xe6,0x000145a 6ae6 CLRF 0xe6,0x000145c ec53 CALL 0x1aa6,0x000145e f00d001460 52e5 MOVF 0xe5,0x1,0x0001462 52e5 MOVF 0xe5,0x1,0x0001464 52e5 MOVF 0xe5,0x1,0x0// Send ack with new id. F:\MCP\projects\CAN\canBase\Source\CAN.c001466 0100 MOVLB 0x0 outCm.funct = FUNCT_BOOTLOADER; F:\MCP\projects\CAN\canBase\Source\CAN.c001468 6b64 CLRF 0x64,0x100146a 0e04 MOVLW 0x4 outCm.funcc = FUNCC_BOOT_ACK; F:\MCP\projects\CAN\canBase\Source\CAN.c00146c 0100 MOVLB 0x000146e 6f65 MOVWF 0x65,0x1001470 6b66 CLRF 0x66,0x1001472 0100 MOVLB 0x0 outCm.data_length = 8; F:\MCP\projects\CAN\canBase\Source\CAN.c001474 0e08 MOVLW 0x8001476 6f6a MOVWF 0x6a,0x1001478 0100 MOVLB 0x0 outCm.data[BOOT_DATA_ERR_INDEX] = ACK_ERR_NO_ERROR; F:\MCP\projects\CAN\canBase\Source\CAN.c00147a 6b6f CLRF 0x6f,0x100147c 0e02 MOVLW 0x2 while(!canSendMessage(outCm,PRIO_HIGH)); F:\MCP\projects\CAN\canBase\Source\CAN.c00147e 6ee6 MOVWF 0xe6,0x0001480 c064 MOVFF 0x64,0xfe6001482 ffe6001484 c065 MOVFF 0x65,0xfe6001486 ffe6001488 c066 MOVFF 0x66,0xfe600148a ffe600148c c067 MOVFF 0x67,0xfe600148e ffe6001490 c068 MOVFF 0x68,0xfe6001492 ffe6001494 c069 MOVFF 0x69,0xfe6001496 ffe6001498 c06a MOVFF 0x6a,0xfe600149a ffe600149c c06b MOVFF 0x6b,0xfe600149e ffe60014a0 c06c MOVFF 0x6c,0xfe60014a2 ffe60014a4 c06d MOVFF 0x6d,0xfe60014a6 ffe60014a8 c06e MOVFF 0x6e,0xfe60014aa ffe60014ac c06f MOVFF 0x6f,0xfe60014ae ffe60014b0 c070 MOVFF 0x70,0xfe60014b2 ffe60014b4 c071 MOVFF 0x71,0xfe60014b6 ffe60014b8 c072 MOVFF 0x72,0xfe60014ba ffe60014bc d839 RCALL 0x15300014be 6e00 MOVWF 0x0,0x00014c0 0e10 MOVLW 0x100014c2 5ee1 SUBWF 0xe1,0x1,0x00014c4 5000 MOVF 0x0,0x0,0x00014c6 0900 IORLW 0x00014c8 e101 BNZ 0x14cc0014ca d7d8 BRA 0x147c} F:\MCP\projects\CAN\canBase\Source\CAN.c} F:\MCP\projects\CAN\canBase\Source\CAN.c} F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c//Call main parser F:\MCP\projects\CAN\canBase\Source\CAN.c0014cc cfd9 MOVFF 0xfd9,0xfe9 canParse(cm); F:\MCP\projects\CAN\canBase\Source\CAN.c0014ce ffe90014d0 cfda MOVFF 0xfda,0xfea0014d2 ffea0014d4 cfee MOVFF 0xfee,0xfe60014d6 ffe60014d8 cfee MOVFF 0xfee,0xfe60014da ffe60014dc cfee MOVFF 0xfee,0xfe60014de ffe60014e0 cfee MOVFF 0xfee,0xfe60014e2 ffe60014e4 cfee MOVFF 0xfee,0xfe60014e6 ffe60014e8 cfee MOVFF 0xfee,0xfe60014ea ffe60014ec cfee MOVFF 0xfee,0xfe60014ee ffe60014f0 cfee MOVFF 0xfee,0xfe60014f2 ffe60014f4 cfee MOVFF 0xfee,0xfe60014f6 ffe60014f8 cfee MOVFF 0xfee,0xfe60014fa ffe60014fc cfee MOVFF 0xfee,0xfe60014fe ffe6001500 cfee MOVFF 0xfee,0xfe6001502 ffe6001504 cfee MOVFF 0xfee,0xfe6001506 ffe6001508 cfee MOVFF 0xfee,0xfe600150a ffe600150c cfee MOVFF 0xfee,0xfe600150e ffe6001510 ec1f CALL 0x1a3e,0x0001512 f00d001514 6e00 MOVWF 0x0,0x0001516 0e0f MOVLW 0xf001518 5ee1 SUBWF 0xe1,0x1,0x000151a 5000 MOVF 0x0,0x0,0x000151c 0e0f MOVLW 0xf } F:\MCP\projects\CAN\canBase\Source\CAN.c00151e 5ce1 SUBWF 0xe1,0x0,0x0001520 e202 BC 0x1526001522 6ae1 CLRF 0xe1,0x0001524 52e5 MOVF 0xe5,0x1,0x0001526 6ee1 MOVWF 0xe1,0x0001528 52e5 MOVF 0xe5,0x1,0x000152a cfe7 MOVFF 0xfe7,0xfd900152c ffd900152e 0012 RETURN 0x0F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c/* F:\MCP\projects\CAN\canBase\Source\CAN.c* Function: canSendMessage F:\MCP\projects\CAN\canBase\Source\CAN.c* F:\MCP\projects\CAN\canBase\Source\CAN.c* Input: CAN_MESSAGE to send F:\MCP\projects\CAN\canBase\Source\CAN.c* Output: True if packet scheduled sucess, false otherwise. F:\MCP\projects\CAN\canBase\Source\CAN.c* Pre-conditions: canInit F:\MCP\projects\CAN\canBase\Source\CAN.c* Affects: .. F:\MCP\projects\CAN\canBase\Source\CAN.c* Depends: .. F:\MCP\projects\CAN\canBase\Source\CAN.c*/ F:\MCP\projects\CAN\canBase\Source\CAN.c001530 cfd9 MOVFF 0xfd9,0xfe6 BOOL canSendMessage(CAN_MESSAGE cm,CAN_PRIORITY prio) F:\MCP\projects\CAN\canBase\Source\CAN.c001532 ffe6001534 cfe1 MOVFF 0xfe1,0xfd9001536 ffd9{ F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c001538 010f MOVLB 0xf if ( TXB0CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00011; } F:\MCP\projects\CAN\canBase\Source\CAN.c00153a b740 BTFSC 0x40,0x3,0x100153c d004 BRA 0x154600153e 0e00 MOVLW 0x0001540 1477 ANDWF 0x77,0x0,0x0001542 0903 IORLW 0x3001544 6e77 MOVWF 0x77,0x0001546 010f MOVLB 0xf if ( TXB1CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00100; } F:\MCP\projects\CAN\canBase\Source\CAN.c001548 b730 BTFSC 0x30,0x3,0x100154a d004 BRA 0x155400154c 0e00 MOVLW 0x000154e 1477 ANDWF 0x77,0x0,0x0001550 0904 IORLW 0x4001552 6e77 MOVWF 0x77,0x0001554 010f MOVLB 0xf if ( TXB2CONbits.TXREQ == 0 ) { ECANCON=(ECANCON&0b00000)|0b00101; } F:\MCP\projects\CAN\canBase\Source\CAN.c001556 b720 BTFSC 0x20,0x3,0x1001558 d005 BRA 0x156400155a 0e00 MOVLW 0x000155c 1477 ANDWF 0x77,0x0,0x000155e 0905 IORLW 0x5001560 6e77 MOVWF 0x77,0x0// None of the transmit buffers were empty. F:\MCP\projects\CAN\canBase\Source\CAN.c001562 d002 BRA 0x1568 else { return FALSE;} F:\MCP\projects\CAN\canBase\Source\CAN.c001564 0e00 MOVLW 0x0001566 d0b9 BRA 0x16daF:\MCP\projects\CAN\canBase\Source\CAN.c001568 0eef MOVLW 0xef if (prio<0 || prio>3) prio = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c00156a cfdb MOVFF 0xfdb,0x000156c f00000156e 3400 RLCF 0x0,0x0,0x0001570 e20e BC 0x158e001572 0eef MOVLW 0xef001574 cfdb MOVFF 0xfdb,0x1001576 f001001578 0e03 MOVLW 0x300157a 6ee7 MOVWF 0xe7,0x000157c 1801 XORWF 0x1,0x0,0x000157e aee8 BTFSS 0xe8,0x7,0x0001580 d002 BRA 0x1586001582 3401 RLCF 0x1,0x0,0x0001584 d003 BRA 0x158c001586 50e7 MOVF 0xe7,0x0,0x0001588 80d8 BSF 0xd8,0x0,0x000158a 5401 SUBFWB 0x1,0x0,0x000158c e202 BC 0x159200158e 0eef MOVLW 0xef001590 6adb CLRF 0xdb,0x0F:\MCP\projects\CAN\canBase\Source\CAN.c// Append my id and nid F:\MCP\projects\CAN\canBase\Source\CAN.c001592 0ef3 MOVLW 0xf3 cm.nid = MY_NID; F:\MCP\projects\CAN\canBase\Source\CAN.c001594 c08b MOVFF 0x8b,0xfdb001596 ffdb001598 0ef4 MOVLW 0xf4 cm.sid = MY_ID; F:\MCP\projects\CAN\canBase\Source\CAN.c00159a c089 MOVFF 0x89,0xfdb00159c ffdb00159e 0ef5 MOVLW 0xf50015a0 c08a MOVFF 0x8a,0xfdb0015a2 ffdbF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0SIDH 28 27 26 25 24 23 22 21 F:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0SIDL 20 19 18 xx xx xx 17 16 F:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0EIDH 15 14 13 12 11 10 09 08 F:\MCP\projects\CAN\canBase\Source\CAN.c//RXB0EIDL 07 06 05 04 03 02 01 00 F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c//funct xx xx xx xx 28 27 26 25 F:\MCP\projects\CAN\canBase\Source\CAN.c//funcc xx xx xx xx xx xx 24 23 22 21 20 19 18 17 16 15 F:\MCP\projects\CAN\canBase\Source\CAN.c//nid xx xx 14 13 12 11 10 09 F:\MCP\projects\CAN\canBase\Source\CAN.c//sid xx xx xx xx xx xx xx 08 07 06 05 04 03 02 01 00 F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c0015a4 0ef1 MOVLW 0xf1 RXB0SIDH = (BYTE)((cm.funct & 0x0F)<<4)+(BYTE)((cm.funcc & 0x03C0)>>6); F:\MCP\projects\CAN\canBase\Source\CAN.c0015a6 cfdb MOVFF 0xfdb,0x00015a8 f0000015aa 0ef2 MOVLW 0xf20015ac cfdb MOVFF 0xfdb,0x10015ae f0010015b0 0ec0 MOVLW 0xc00015b2 1600 ANDWF 0x0,0x1,0x00015b4 0e03 MOVLW 0x30015b6 1601 ANDWF 0x1,0x1,0x00015b8 0e06 MOVLW 0x60015ba 90d8 BCF 0xd8,0x0,0x00015bc 3201 RRCF 0x1,0x1,0x00015be 3200 RRCF 0x0,0x1,0x00015c0 04e8 DECF 0xe8,0x0,0x00015c2 e1fb BNZ 0x15ba0015c4 0ef0 MOVLW 0xf00015c6 50db MOVF 0xdb,0x0,0x00015c8 0b0f ANDLW 0xf0015ca 0d10 MULLW 0x100015cc 50f3 MOVF 0xf3,0x0,0x00015ce 2400 ADDWF 0x0,0x0,0x00015d0 6e61 MOVWF 0x61,0x00015d2 0e06 MOVLW 0x6 RXB0SIDL = (BYTE)((cm.funcc & 0x003F)<<2)+(BYTE)((cm.funcc & 0x0006)>>1); F:\MCP\projects\CAN\canBase\Source\CAN.c0015d4 6ee7 MOVWF 0xe7,0x00015d6 0ef1 MOVLW 0xf10015d8 cfdb MOVFF 0xfdb,0x20015da f0020015dc 0ef2 MOVLW 0xf20015de cfdb MOVFF 0xfdb,0x30015e0 f0030015e2 50e7 MOVF 0xe7,0x0,0x00015e4 1602 ANDWF 0x2,0x1,0x00015e6 6a03 CLRF 0x3,0x00015e8 90d8 BCF 0xd8,0x0,0x00015ea 3203 RRCF 0x3,0x1,0x00015ec 3202 RRCF 0x2,0x1,0x00015ee 0e3f MOVLW 0x3f0015f0 6ee7 MOVWF 0xe7,0x00015f2 0ef1 MOVLW 0xf10015f4 cfdb MOVFF 0xfdb,0x00015f6 f0000015f8 0ef2 MOVLW 0xf20015fa cfdb MOVFF 0xfdb,0x10015fc f0010015fe 50e7 MOVF 0xe7,0x0,0x0001600 1600 ANDWF 0x0,0x1,0x0001602 6a01 CLRF 0x1,0x0001604 90d8 BCF 0xd8,0x0,0x0001606 3600 RLCF 0x0,0x1,0x0001608 3601 RLCF 0x1,0x1,0x000160a 90d8 BCF 0xd8,0x0,0x000160c 3600 RLCF 0x0,0x1,0x000160e 3601 RLCF 0x1,0x1,0x0001610 5000 MOVF 0x0,0x0,0x0001612 2402 ADDWF 0x2,0x0,0x0001614 6e62 MOVWF 0x62,0x0001616 0ef4 MOVLW 0xf4 RXB0EIDH = (BYTE)((cm.funcc & 0x0001)<<7)+(BYTE)((cm.nid & 0x3F)<<1)+(BYTE)((cm.sid & 0x0100)>>8); F:\MCP\projects\CAN\canBase\Source\CAN.c001618 cfdb MOVFF 0xfdb,0x200161a f00200161c 0ef5 MOVLW 0xf500161e cfdb MOVFF 0xfdb,0x3001620 f003001622 0e00 MOVLW 0x0001624 1602 ANDWF 0x2,0x1,0x0001626 0e01 MOVLW 0x1001628 1603 ANDWF 0x3,0x1,0x000162a c003 MOVFF 0x3,0x200162c f00200162e 6a03 CLRF 0x3,0x0001630 0e01 MOVLW 0x1001632 6ee7 MOVWF 0xe7,0x0001634 0ef1 MOVLW 0xf1001636 cfdb MOVFF 0xfdb,0x0001638 f00000163a 0ef2 MOVLW 0xf200163c cfdb MOVFF 0xfdb,0x100163e f001001640 50e7 MOVF 0xe7,0x0,0x0001642 1600 ANDWF 0x0,0x1,0x0001644 6a01 CLRF 0x1,0x0001646 0e07 MOVLW 0x7001648 90d8 BCF 0xd8,0x0,0x000164a 3600 RLCF 0x0,0x1,0x000164c 3601 RLCF 0x1,0x1,0x000164e 04e8 DECF 0xe8,0x0,0x0001650 e1fb BNZ 0x1648001652 0ef3 MOVLW 0xf3001654 50db MOVF 0xdb,0x0,0x0001656 0b3f ANDLW 0x3f001658 24e8 ADDWF 0xe8,0x0,0x000165a 2400 ADDWF 0x0,0x0,0x000165c 2402 ADDWF 0x2,0x0,0x000165e 6e63 MOVWF 0x63,0x0001660 0eff MOVLW 0xff RXB0EIDL = (BYTE)((cm.sid & 0x00FF)); F:\MCP\projects\CAN\canBase\Source\CAN.c001662 6ee7 MOVWF 0xe7,0x0001664 0ef4 MOVLW 0xf4001666 cfdb MOVFF 0xfdb,0x0001668 f00000166a 0ef5 MOVLW 0xf500166c cfdb MOVFF 0xfdb,0x100166e f001001670 50e7 MOVF 0xe7,0x0,0x0001672 1600 ANDWF 0x0,0x1,0x0001674 6a01 CLRF 0x1,0x0001676 5000 MOVF 0x0,0x0,0x0001678 6e64 MOVWF 0x64,0x0F:\MCP\projects\CAN\canBase\Source\CAN.c// Data length F:\MCP\projects\CAN\canBase\Source\CAN.c00167a 6a65 CLRF 0x65,0x0 RXB0DLC = 0; F:\MCP\projects\CAN\canBase\Source\CAN.c00167c 0ef6 MOVLW 0xf6 if (cm.data_length>8) RXB0DLC=8; else RXB0DLC=cm.data_length; F:\MCP\projects\CAN\canBase\Source\CAN.c00167e 50db MOVF 0xdb,0x0,0x0001680 0808 SUBLW 0x8001682 e203 BC 0x168a001684 0e08 MOVLW 0x8001686 6e65 MOVWF 0x65,0x0001688 d003 BRA 0x169000168a 0ef6 MOVLW 0xf600168c 50db MOVF 0xdb,0x0,0x000168e 6e65 MOVWF 0x65,0x0F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// NOT Remote request F:\MCP\projects\CAN\canBase\Source\CAN.c_asm F:\MCP\projects\CAN\canBase\Source\CAN.c001690 9c65 BCF 0x65,0x6,0x0 bcf RXB0DLC, 6, 0 F:\MCP\projects\CAN\canBase\Source\CAN.c_endasm F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Data one bye one, for speed F:\MCP\projects\CAN\canBase\Source\CAN.c001692 0ef7 MOVLW 0xf7 RXB0D0=cm.data[0]; RXB0D1=cm.data[1]; F:\MCP\projects\CAN\canBase\Source\CAN.c001694 50db MOVF 0xdb,0x0,0x0001696 6e66 MOVWF 0x66,0x0001698 0ef8 MOVLW 0xf800169a 50db MOVF 0xdb,0x0,0x000169c 6e67 MOVWF 0x67,0x000169e 0ef9 MOVLW 0xf9 RXB0D2=cm.data[2]; RXB0D3=cm.data[3]; F:\MCP\projects\CAN\canBase\Source\CAN.c0016a0 50db MOVF 0xdb,0x0,0x00016a2 6e68 MOVWF 0x68,0x00016a4 0efa MOVLW 0xfa0016a6 50db MOVF 0xdb,0x0,0x00016a8 6e69 MOVWF 0x69,0x00016aa 0efb MOVLW 0xfb RXB0D4=cm.data[4]; RXB0D5=cm.data[5]; F:\MCP\projects\CAN\canBase\Source\CAN.c0016ac 50db MOVF 0xdb,0x0,0x00016ae 6e6a MOVWF 0x6a,0x00016b0 0efc MOVLW 0xfc0016b2 50db MOVF 0xdb,0x0,0x00016b4 6e6b MOVWF 0x6b,0x00016b6 0efd MOVLW 0xfd RXB0D6=cm.data[6]; RXB0D7=cm.data[7]; F:\MCP\projects\CAN\canBase\Source\CAN.c0016b8 50db MOVF 0xdb,0x0,0x00016ba 6e6c MOVWF 0x6c,0x00016bc 0efe MOVLW 0xfe0016be 50db MOVF 0xdb,0x0,0x00016c0 6e6d MOVWF 0x6d,0x0F:\MCP\projects\CAN\canBase\Source\CAN.c// set extended F:\MCP\projects\CAN\canBase\Source\CAN.c0016c2 8662 BSF 0x62,0x3,0x0 RXB0SIDLbits.EXID=1; F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c// Priority F:\MCP\projects\CAN\canBase\Source\CAN.c0016c4 0eef MOVLW 0xef RXB0CON = (RXB0CON & 0b11111100) | prio; F:\MCP\projects\CAN\canBase\Source\CAN.c0016c6 cfdb MOVFF 0xfdb,0xfe60016c8 ffe60016ca 0efc MOVLW 0xfc0016cc 1460 ANDWF 0x60,0x0,0x00016ce 52e5 MOVF 0xe5,0x1,0x00016d0 10e7 IORWF 0xe7,0x0,0x00016d2 6e60 MOVWF 0x60,0x0F:\MCP\projects\CAN\canBase\Source\CAN.c// mark as redy to transmit F:\MCP\projects\CAN\canBase\Source\CAN.c_asm F:\MCP\projects\CAN\canBase\Source\CAN.c0016d4 8660 BSF 0x60,0x3,0x0 bsf RXB0CON, 3, 0 F:\MCP\projects\CAN\canBase\Source\CAN.c_endasm F:\MCP\projects\CAN\canBase\Source\CAN.cF:\MCP\projects\CAN\canBase\Source\CAN.c0016d6 0e01 MOVLW 0x1 return TRUE; F:\MCP\projects\CAN\canBase\Source\CAN.c0016d8 d000 BRA 0x16daF:\MCP\projects\CAN\canBase\Source\CAN.c0016da 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canBase\Source\CAN.c0016dc cfe7 MOVFF 0xfe7,0xfd90016de ffd90016e0 0012 RETURN 0x0/********************************************************************* F:\MCP\projects\CAN\canBase\Source\Tick.c* F:\MCP\projects\CAN\canBase\Source\Tick.c* Ticker module service F:\MCP\projects\CAN\canBase\Source\Tick.c* F:\MCP\projects\CAN\canBase\Source\Tick.c********************************************************************* F:\MCP\projects\CAN\canBase\Source\Tick.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canBase/Source/Tick.c $ F:\MCP\projects\CAN\canBase\Source\Tick.c* Last changed: $LastChangedDate: 2006-11-14 10:55:38 +0100 (ti, 14 nov 2006) $ F:\MCP\projects\CAN\canBase\Source\Tick.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\canBase\Source\Tick.c* Revision: $Revision: 86 $ F:\MCP\projects\CAN\canBase\Source\Tick.c********************************************************************/ F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#define TICK_INCLUDE F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#include <Tick.h> F:\MCP\projects\CAN\canBase\Source\Tick.c#include <Compiler.h> F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#define TICK_TEMP_VALUE_1 ((INSTR_FREQ) / (TICKS_PER_SECOND * TICK_PRESCALE_VALUE)) F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#if TICK_TEMP_VALUE_1 > 60000 F:\MCP\projects\CAN\canBase\Source\Tick.c#error TICK_PER_SECOND value cannot be programmed with current CLOCK_FREQ F:\MCP\projects\CAN\canBase\Source\Tick.c#error Either lower TICK_PER_SECOND or manually configure the Timer F:\MCP\projects\CAN\canBase\Source\Tick.c#endif F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#define TICK_TEMP_VALUE (65535 - TICK_TEMP_VALUE_1) F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#define TICK_COUNTER_HIGH ((TICK_TEMP_VALUE >> 8) & 0xff) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TICK_COUNTER_LOW (TICK_TEMP_VALUE & 0xff) F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c#if (TICK_PRESCALE_VALUE == 2) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (0) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 4 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (1) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 8 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (2) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 16 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (3) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 32 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (4) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 64 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (5) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 128 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (6) F:\MCP\projects\CAN\canBase\Source\Tick.c#elif ( TICK_PRESCALE_VALUE == 256 ) F:\MCP\projects\CAN\canBase\Source\Tick.c#define TIMER_PRESCALE (7) F:\MCP\projects\CAN\canBase\Source\Tick.c#else F:\MCP\projects\CAN\canBase\Source\Tick.c#error Invalid TICK_PRESCALE_VALUE specified. F:\MCP\projects\CAN\canBase\Source\Tick.c#endif F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.cTICK TickCount = 0; // 10ms/unit F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c/* F:\MCP\projects\CAN\canBase\Source\Tick.c* Function: TickInit F:\MCP\projects\CAN\canBase\Source\Tick.c* F:\MCP\projects\CAN\canBase\Source\Tick.c* Input: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Output: Tick manager is initialized. F:\MCP\projects\CAN\canBase\Source\Tick.c* Pre-conditions: TickInit F:\MCP\projects\CAN\canBase\Source\Tick.c* Affects: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Depends: none F:\MCP\projects\CAN\canBase\Source\Tick.c*/ F:\MCP\projects\CAN\canBase\Source\Tick.c#define PERIOD (INSTR_FREQ/256/1000)*TICK_PERIOD_MS F:\MCP\projects\CAN\canBase\Source\Tick.cvoid tickInit(void) F:\MCP\projects\CAN\canBase\Source\Tick.c{ F:\MCP\projects\CAN\canBase\Source\Tick.c// Start the timer. F:\MCP\projects\CAN\canBase\Source\Tick.c001ba6 0e79 MOVLW 0x79 TMR0L = TICK_COUNTER_LOW; F:\MCP\projects\CAN\canBase\Source\Tick.c001ba8 6ed6 MOVWF 0xd6,0x0001baa 0efe MOVLW 0xfe TMR0H = TICK_COUNTER_HIGH; F:\MCP\projects\CAN\canBase\Source\Tick.c001bac 6ed7 MOVWF 0xd7,0x0F:\MCP\projects\CAN\canBase\Source\Tick.c// 16-BIT, internal timer, PSA set to 1:256 F:\MCP\projects\CAN\canBase\Source\Tick.c001bae 0e07 MOVLW 0x7 T0CON = 0b00000000 | TIMER_PRESCALE; F:\MCP\projects\CAN\canBase\Source\Tick.c001bb0 6ed5 MOVWF 0xd5,0x0F:\MCP\projects\CAN\canBase\Source\Tick.c// Start the timer. F:\MCP\projects\CAN\canBase\Source\Tick.c001bb2 8ed5 BSF 0xd5,0x7,0x0 T0CONbits.TMR0ON = 1; F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c001bb4 84f2 BSF 0xf2,0x2,0x0 INTCONbits.TMR0IF = 1; F:\MCP\projects\CAN\canBase\Source\Tick.c001bb6 8af2 BSF 0xf2,0x5,0x0 INTCONbits.TMR0IE = 1; F:\MCP\projects\CAN\canBase\Source\Tick.c001bb8 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c/* F:\MCP\projects\CAN\canBase\Source\Tick.c* Function: TickGet F:\MCP\projects\CAN\canBase\Source\Tick.c* F:\MCP\projects\CAN\canBase\Source\Tick.c* Input: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Output: Current tick value is given, 1 tick represents approximately 10ms F:\MCP\projects\CAN\canBase\Source\Tick.c* Pre-conditions: TickInit F:\MCP\projects\CAN\canBase\Source\Tick.c* Affects: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Depends: none F:\MCP\projects\CAN\canBase\Source\Tick.c*/ F:\MCP\projects\CAN\canBase\Source\Tick.cTICK tickGet(void) F:\MCP\projects\CAN\canBase\Source\Tick.c{ F:\MCP\projects\CAN\canBase\Source\Tick.c001bba c085 MOVFF 0x85,0x12 return TickCount; F:\MCP\projects\CAN\canBase\Source\Tick.c001bbc f012001bbe c086 MOVFF 0x86,0x13001bc0 f013001bc2 c087 MOVFF 0x87,0x14001bc4 f014001bc6 c088 MOVFF 0x88,0x15001bc8 f015001bca d000 BRA 0x1bcc001bcc 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.cF:\MCP\projects\CAN\canBase\Source\Tick.c/* F:\MCP\projects\CAN\canBase\Source\Tick.c* Function: tickUpdate F:\MCP\projects\CAN\canBase\Source\Tick.c* F:\MCP\projects\CAN\canBase\Source\Tick.c* Input: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Output: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Pre-conditions: TickInit F:\MCP\projects\CAN\canBase\Source\Tick.c* Affects: none F:\MCP\projects\CAN\canBase\Source\Tick.c* Depends: none F:\MCP\projects\CAN\canBase\Source\Tick.c*/ F:\MCP\projects\CAN\canBase\Source\Tick.cvoid tickUpdate(void) F:\MCP\projects\CAN\canBase\Source\Tick.c{ F:\MCP\projects\CAN\canBase\Source\Tick.c001bce a4f2 BTFSS 0xf2,0x2,0x0 if(INTCONbits.TMR0IF) F:\MCP\projects\CAN\canBase\Source\Tick.c001bd0 d00b BRA 0x1be8{ F:\MCP\projects\CAN\canBase\Source\Tick.c001bd2 0efe MOVLW 0xfe TMR0H = TICK_COUNTER_HIGH; F:\MCP\projects\CAN\canBase\Source\Tick.c001bd4 6ed7 MOVWF 0xd7,0x0001bd6 0e79 MOVLW 0x79 TMR0L = TICK_COUNTER_LOW; F:\MCP\projects\CAN\canBase\Source\Tick.c001bd8 6ed6 MOVWF 0xd6,0x0F:\MCP\projects\CAN\canBase\Source\Tick.c001bda 0100 MOVLB 0x0 TickCount++; F:\MCP\projects\CAN\canBase\Source\Tick.c001bdc 2b85 INCF 0x85,0x1,0x1001bde 0e00 MOVLW 0x0001be0 2386 ADDWFC 0x86,0x1,0x1001be2 2387 ADDWFC 0x87,0x1,0x1001be4 2388 ADDWFC 0x88,0x1,0x1F:\MCP\projects\CAN\canBase\Source\Tick.c001be6 94f2 BCF 0xf2,0x2,0x0 INTCONbits.TMR0IF = 0; F:\MCP\projects\CAN\canBase\Source\Tick.c} F:\MCP\projects\CAN\canBase\Source\Tick.c001be8 0012 RETURN 0x0 } F:\MCP\projects\CAN\canBase\Source\Tick.c/********************************************************************* F:\MCP\projects\CAN\canLCD\Source\Main.c* F:\MCP\projects\CAN\canLCD\Source\Main.c* Main application F:\MCP\projects\CAN\canLCD\Source\Main.c* F:\MCP\projects\CAN\canLCD\Source\Main.c********************************************************************* F:\MCP\projects\CAN\canLCD\Source\Main.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canLCD/Source/Main.c $ F:\MCP\projects\CAN\canLCD\Source\Main.c* Last changed: $LastChangedDate: 2006-11-21 10:28:39 +0100 (ti, 21 nov 2006) $ F:\MCP\projects\CAN\canLCD\Source\Main.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\canLCD\Source\Main.c* Revision: $Revision: 140 $ F:\MCP\projects\CAN\canLCD\Source\Main.c********************************************************************/ F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#include <compiler.h> F:\MCP\projects\CAN\canLCD\Source\Main.c#include <stackTasks.h> F:\MCP\projects\CAN\canLCD\Source\Main.c#include <Tick.h> F:\MCP\projects\CAN\canLCD\Source\Main.c#include <funcdefs.h> F:\MCP\projects\CAN\canLCD\Source\Main.c#include <CAN.h> F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#ifdef USE_LCD F:\MCP\projects\CAN\canLCD\Source\Main.c#include "lcd.h" F:\MCP\projects\CAN\canLCD\Source\Main.c#endif F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.cstatic void mainInit(void); F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c001904 cfd9 MOVFF 0xfd9,0xfe6 void main() F:\MCP\projects\CAN\canLCD\Source\Main.c001906 ffe6001908 cfe1 MOVFF 0xfe1,0xfd900190a ffd900190c 0e0f MOVLW 0xf00190e 26e1 ADDWF 0xe1,0x1,0x0{ F:\MCP\projects\CAN\canLCD\Source\Main.cstatic TICK t = 0; F:\MCP\projects\CAN\canLCD\Source\Main.cCAN_MESSAGE outCm; F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c// Inits F:\MCP\projects\CAN\canLCD\Source\Main.c001910 d891 RCALL 0x1a34 mainInit(); F:\MCP\projects\CAN\canLCD\Source\Main.c001912 ec28 CALL 0x1050,0x0 canInit(); F:\MCP\projects\CAN\canLCD\Source\Main.c001914 f008F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#ifdef USE_LCD F:\MCP\projects\CAN\canLCD\Source\Main.c001916 ec45 CALL 0x188a,0x0 lcdInit(); F:\MCP\projects\CAN\canLCD\Source\Main.c001918 f00c00191a ecd4 CALL 0x17a8,0x0 lcdClear(); F:\MCP\projects\CAN\canLCD\Source\Main.c00191c f00b00191e 0e4c MOVLW 0x4c lcdPutrs("Welcome!"); F:\MCP\projects\CAN\canLCD\Source\Main.c001920 6ee6 MOVWF 0xe6,0x0001922 0e1c MOVLW 0x1c001924 6ee6 MOVWF 0xe6,0x0001926 ec07 CALL 0x180e,0x0001928 f00c00192a 52e5 MOVF 0xe5,0x1,0x000192c 52e5 MOVF 0xe5,0x1,0x0#endif F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c001976 d7db BRA 0x192e while(1) F:\MCP\projects\CAN\canLCD\Source\Main.c{ F:\MCP\projects\CAN\canLCD\Source\Main.cstatic TICK t = 0; F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c00192e ecdd CALL 0x1bba,0x0 if ((tickGet()-t)>TICK_SECOND) F:\MCP\projects\CAN\canLCD\Source\Main.c001930 f00d001932 0100 MOVLB 0x0001934 5181 MOVF 0x81,0x0,0x1001936 5c12 SUBWF 0x12,0x0,0x0001938 6e00 MOVWF 0x0,0x000193a 5182 MOVF 0x82,0x0,0x100193c 5813 SUBWFB 0x13,0x0,0x000193e 6e01 MOVWF 0x1,0x0001940 5183 MOVF 0x83,0x0,0x1001942 5814 SUBWFB 0x14,0x0,0x0001944 6e02 MOVWF 0x2,0x0001946 5184 MOVF 0x84,0x0,0x1001948 5815 SUBWFB 0x15,0x0,0x000194a 6e03 MOVWF 0x3,0x000194c 80d8 BSF 0xd8,0x0,0x000194e 0e64 MOVLW 0x64001950 5400 SUBFWB 0x0,0x0,0x0001952 0e00 MOVLW 0x0001954 5401 SUBFWB 0x1,0x0,0x0001956 0e00 MOVLW 0x0001958 5402 SUBFWB 0x2,0x0,0x000195a 0e00 MOVLW 0x000195c 5403 SUBFWB 0x3,0x0,0x000195e e20b BC 0x1976{ F:\MCP\projects\CAN\canLCD\Source\Main.c001960 7282 BTG 0x82,0x1,0x0 LED0_IO=~LED0_IO; F:\MCP\projects\CAN\canLCD\Source\Main.c001962 ecdd CALL 0x1bba,0x0 t = tickGet(); F:\MCP\projects\CAN\canLCD\Source\Main.c001964 f00d001966 c012 MOVFF 0x12,0x81001968 f08100196a c013 MOVFF 0x13,0x8200196c f08200196e c014 MOVFF 0x14,0x83001970 f083001972 c015 MOVFF 0x15,0x84001974 f084} F:\MCP\projects\CAN\canLCD\Source\Main.c} F:\MCP\projects\CAN\canLCD\Source\Main.c001978 0e0f MOVLW 0xf } F:\MCP\projects\CAN\canLCD\Source\Main.c00197a 5ce1 SUBWF 0xe1,0x0,0x000197c e202 BC 0x198200197e 6ae1 CLRF 0xe1,0x0001980 52e5 MOVF 0xe5,0x1,0x0001982 6ee1 MOVWF 0xe1,0x0001984 52e5 MOVF 0xe5,0x1,0x0001986 cfe7 MOVFF 0xfe7,0xfd9001988 ffd900198a 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#pragma interrupt high_isr F:\MCP\projects\CAN\canLCD\Source\Main.c00198c cfda MOVFF 0xfda,0xfe4 void high_isr(void) F:\MCP\projects\CAN\canLCD\Source\Main.c00198e ffe4001990 cfe2 MOVFF 0xfe2,0xfda001992 ffda001994 cfe9 MOVFF 0xfe9,0xfe4001996 ffe4001998 cfea MOVFF 0xfea,0xfe400199a ffe400199c cff6 MOVFF 0xff6,0xfe400199e ffe40019a0 cff7 MOVFF 0xff7,0xfe40019a2 ffe40019a4 cff5 MOVFF 0xff5,0xfe40019a6 ffe40019a8 cff3 MOVFF 0xff3,0xfe40019aa ffe40019ac cff4 MOVFF 0xff4,0xfe40019ae ffe40019b0 cffa MOVFF 0xffa,0xfe40019b2 ffe40019b4 ee00 LFSR 0x0,0xe0019b6 f00e0019b8 0e0b MOVLW 0xb0019ba 04e8 DECF 0xe8,0x0,0x00019bc e303 BNC 0x19c40019be cfee MOVFF 0xfee,0xfe40019c0 ffe40019c2 d7fb BRA 0x19ba0019c4 ee00 LFSR 0x0,0x00019c6 f0000019c8 0e0e MOVLW 0xe0019ca 04e8 DECF 0xe8,0x0,0x00019cc e303 BNC 0x19d40019ce cfee MOVFF 0xfee,0xfe40019d0 ffe40019d2 d7fb BRA 0x19ca0019d4 52e6 MOVF 0xe6,0x1,0x0{ F:\MCP\projects\CAN\canLCD\Source\Main.c0019d6 ecad CALL 0x115a,0x0 canISR(); F:\MCP\projects\CAN\canLCD\Source\Main.c0019d8 f0080019da 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.c0019dc ee00 LFSR 0x0,0xd0019de f00d0019e0 0e0e MOVLW 0xe0019e2 04e8 DECF 0xe8,0x0,0x00019e4 e303 BNC 0x19ec0019e6 cfe5 MOVFF 0xfe5,0xfed0019e8 ffed0019ea d7fb BRA 0x19e20019ec ee00 LFSR 0x0,0x180019ee f0180019f0 0e0b MOVLW 0xb0019f2 04e8 DECF 0xe8,0x0,0x00019f4 e303 BNC 0x19fc0019f6 cfe5 MOVFF 0xfe5,0xfed0019f8 ffed0019fa d7fb BRA 0x19f20019fc cfe5 MOVFF 0xfe5,0xffa0019fe fffa001a00 cfe5 MOVFF 0xfe5,0xff4001a02 fff4001a04 cfe5 MOVFF 0xfe5,0xff3001a06 fff3001a08 cfe5 MOVFF 0xfe5,0xff5001a0a fff5001a0c cfe5 MOVFF 0xfe5,0xff7001a0e fff7001a10 cfe5 MOVFF 0xfe5,0xff6001a12 fff6001a14 cfe5 MOVFF 0xfe5,0xfea001a16 ffea001a18 cfe5 MOVFF 0xfe5,0xfe9001a1a ffe9001a1c cfe5 MOVFF 0xfe5,0xfda001a1e ffda001a20 0011 RETFIE 0x1F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#pragma interrupt low_isr F:\MCP\projects\CAN\canLCD\Source\Main.c001a22 cfda MOVFF 0xfda,0xfe4 void low_isr(void) F:\MCP\projects\CAN\canLCD\Source\Main.c001a24 ffe4001a26 cfe2 MOVFF 0xfe2,0xfda001a28 ffda001a2a 52e6 MOVF 0xe6,0x1,0x0{ F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c001a2c 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.c001a2e cfe5 MOVFF 0xfe5,0xfda001a30 ffda001a32 0011 RETFIE 0x1F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c/* F:\MCP\projects\CAN\canLCD\Source\Main.c* Function: mainInit F:\MCP\projects\CAN\canLCD\Source\Main.c* F:\MCP\projects\CAN\canLCD\Source\Main.c* Input: none F:\MCP\projects\CAN\canLCD\Source\Main.c* Output: none F:\MCP\projects\CAN\canLCD\Source\Main.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\Main.c* Affects: Se code F:\MCP\projects\CAN\canLCD\Source\Main.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\Main.c*/ F:\MCP\projects\CAN\canLCD\Source\Main.cvoid mainInit() F:\MCP\projects\CAN\canLCD\Source\Main.c{ F:\MCP\projects\CAN\canLCD\Source\Main.c001a34 9294 BCF 0x94,0x1,0x0 LED0_TRIS=0; F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c// Enable Interrupts F:\MCP\projects\CAN\canLCD\Source\Main.c001a36 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIEH = 1; F:\MCP\projects\CAN\canLCD\Source\Main.c001a38 8cf2 BSF 0xf2,0x6,0x0 INTCONbits.GIEL = 1; F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c// Enable interrupt prirority F:\MCP\projects\CAN\canLCD\Source\Main.c001a3a 8ed0 BSF 0xd0,0x7,0x0 RCONbits.IPEN=1; F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c001a3c 0012 RETURN 0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c/* F:\MCP\projects\CAN\canLCD\Source\Main.c* Function: canParse F:\MCP\projects\CAN\canLCD\Source\Main.c* F:\MCP\projects\CAN\canLCD\Source\Main.c* Input: Received can message F:\MCP\projects\CAN\canLCD\Source\Main.c* Output: none F:\MCP\projects\CAN\canLCD\Source\Main.c* Pre-conditions: canInit and received packet. F:\MCP\projects\CAN\canLCD\Source\Main.c* Affects: Sensors/actuators/etc. See code. F:\MCP\projects\CAN\canLCD\Source\Main.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\Main.c*/ F:\MCP\projects\CAN\canLCD\Source\Main.c001a3e cfd9 MOVFF 0xfd9,0xfe6 void canParse(CAN_MESSAGE cm) F:\MCP\projects\CAN\canLCD\Source\Main.c001a40 ffe6001a42 cfe1 MOVFF 0xfe1,0xfd9001a44 ffd9001a46 0e0f MOVLW 0xf001a48 26e1 ADDWF 0xe1,0x1,0x0{ F:\MCP\projects\CAN\canLCD\Source\Main.cCAN_MESSAGE outCm; F:\MCP\projects\CAN\canLCD\Source\Main.c001a4a 5ce1 SUBWF 0xe1,0x0,0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.c001a4c e202 BC 0x1a52001a4e 6ae1 CLRF 0xe1,0x0001a50 52e5 MOVF 0xe5,0x1,0x0001a52 6ee1 MOVWF 0xe1,0x0001a54 52e5 MOVF 0xe5,0x1,0x0001a56 cfe7 MOVFF 0xfe7,0xfd9001a58 ffd9001a5a 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c// Below are mandantory when using bootloader F:\MCP\projects\CAN\canLCD\Source\Main.c// define DEBUG_MODE to use without bootloader. F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#ifndef DEBUG_MODE F:\MCP\projects\CAN\canLCD\Source\Main.cextern void _startup (void); F:\MCP\projects\CAN\canLCD\Source\Main.c#pragma code _RESET_INTERRUPT_VECTOR = 0x001000 F:\MCP\projects\CAN\canLCD\Source\Main.cvoid _reset (void) F:\MCP\projects\CAN\canLCD\Source\Main.c{ F:\MCP\projects\CAN\canLCD\Source\Main.c001000 ef1a GOTO 0x1c34 _asm goto _startup _endasm F:\MCP\projects\CAN\canLCD\Source\Main.c001002 f00e001004 0012 RETURN 0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.c#pragma code F:\MCP\projects\CAN\canLCD\Source\Main.c#endif F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#pragma code _HIGH_INTERRUPT_VECTOR = 0x001008 F:\MCP\projects\CAN\canLCD\Source\Main.cvoid _high_ISR (void) F:\MCP\projects\CAN\canLCD\Source\Main.c{ F:\MCP\projects\CAN\canLCD\Source\Main.c001008 efc6 GOTO 0x198c _asm GOTO high_isr _endasm F:\MCP\projects\CAN\canLCD\Source\Main.c00100a f00c00100c 0012 RETURN 0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.c#pragma code F:\MCP\projects\CAN\canLCD\Source\Main.cF:\MCP\projects\CAN\canLCD\Source\Main.c#pragma code _LOW_INTERRUPT_VECTOR = 0x001018 F:\MCP\projects\CAN\canLCD\Source\Main.cvoid _low_ISR (void) F:\MCP\projects\CAN\canLCD\Source\Main.c{ F:\MCP\projects\CAN\canLCD\Source\Main.c001018 ef11 GOTO 0x1a22 _asm GOTO low_isr _endasm F:\MCP\projects\CAN\canLCD\Source\Main.c00101a f00d00101c 0012 RETURN 0x0 } F:\MCP\projects\CAN\canLCD\Source\Main.c#pragma code F:\MCP\projects\CAN\canLCD\Source\Main.c/********************************************************************* F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c* Functions for reading and writing to EEPROM. F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c********************************************************************* F:\MCP\projects\CAN\Include\EEAccess.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/Include/EEAccess.c $ F:\MCP\projects\CAN\Include\EEAccess.c* Last changed: $LastChangedDate: 2006-11-20 21:31:03 +0100 (må, 20 nov 2006) $ F:\MCP\projects\CAN\Include\EEAccess.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\Include\EEAccess.c* Revision: $Revision: 139 $ F:\MCP\projects\CAN\Include\EEAccess.c********************************************************************/ F:\MCP\projects\CAN\Include\EEAccess.c#include <p18cxxx.h> F:\MCP\projects\CAN\Include\EEAccess.c#include <EEaccess.h> F:\MCP\projects\CAN\Include\EEAccess.cF:\MCP\projects\CAN\Include\EEAccess.c/* F:\MCP\projects\CAN\Include\EEAccess.c* Function: EERead F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c* Input: WORD address to read from. F:\MCP\projects\CAN\Include\EEAccess.c* Output: Byte read. F:\MCP\projects\CAN\Include\EEAccess.c* Pre-conditions: none F:\MCP\projects\CAN\Include\EEAccess.c* Affects: none. F:\MCP\projects\CAN\Include\EEAccess.c* Depends: none. F:\MCP\projects\CAN\Include\EEAccess.c*/ F:\MCP\projects\CAN\Include\EEAccess.c001a5c cfd9 MOVFF 0xfd9,0xfe6 BYTE EERead(WORD addr) F:\MCP\projects\CAN\Include\EEAccess.c001a5e ffe6001a60 cfe1 MOVFF 0xfe1,0xfd9001a62 ffd9{ F:\MCP\projects\CAN\Include\EEAccess.c001a64 0efd MOVLW 0xfd EEADRH=(BYTE)(addr>>8); F:\MCP\projects\CAN\Include\EEAccess.c001a66 cfdb MOVFF 0xfdb,0x0001a68 f000001a6a 0efe MOVLW 0xfe001a6c cfdb MOVFF 0xfdb,0x1001a6e f001001a70 c001 MOVFF 0x1,0x0001a72 f000001a74 6a01 CLRF 0x1,0x0001a76 5000 MOVF 0x0,0x0,0x0001a78 6eaa MOVWF 0xaa,0x0001a7a 0eff MOVLW 0xff EEADR=(BYTE)(addr & 0xFF); F:\MCP\projects\CAN\Include\EEAccess.c001a7c 6ee7 MOVWF 0xe7,0x0001a7e 0efd MOVLW 0xfd001a80 cfdb MOVFF 0xfdb,0x0001a82 f000001a84 0efe MOVLW 0xfe001a86 cfdb MOVFF 0xfdb,0x1001a88 f001001a8a 50e7 MOVF 0xe7,0x0,0x0001a8c 1600 ANDWF 0x0,0x1,0x0001a8e 6a01 CLRF 0x1,0x0001a90 5000 MOVF 0x0,0x0,0x0001a92 6ea9 MOVWF 0xa9,0x0001a94 9ea6 BCF 0xa6,0x7,0x0 EECON1bits.EEPGD=0; F:\MCP\projects\CAN\Include\EEAccess.c001a96 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS=0; F:\MCP\projects\CAN\Include\EEAccess.c001a98 80a6 BSF 0xa6,0x0,0x0 EECON1bits.RD=1; F:\MCP\projects\CAN\Include\EEAccess.c001a9a 50a8 MOVF 0xa8,0x0,0x0 return EEDATA; F:\MCP\projects\CAN\Include\EEAccess.c001a9c d000 BRA 0x1a9e001a9e 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\Include\EEAccess.c001aa0 cfe7 MOVFF 0xfe7,0xfd9001aa2 ffd9001aa4 0012 RETURN 0x0F:\MCP\projects\CAN\Include\EEAccess.cF:\MCP\projects\CAN\Include\EEAccess.c/* F:\MCP\projects\CAN\Include\EEAccess.c* Function: EEWrite F:\MCP\projects\CAN\Include\EEAccess.c* F:\MCP\projects\CAN\Include\EEAccess.c* Input: WORD address to write to and BYTE data to write. F:\MCP\projects\CAN\Include\EEAccess.c* Output: none. F:\MCP\projects\CAN\Include\EEAccess.c* Pre-conditions: none F:\MCP\projects\CAN\Include\EEAccess.c* Affects: none. F:\MCP\projects\CAN\Include\EEAccess.c* Depends: none. F:\MCP\projects\CAN\Include\EEAccess.c*/ F:\MCP\projects\CAN\Include\EEAccess.c001aa6 cfd9 MOVFF 0xfd9,0xfe6 void EEWrite(WORD addr,BYTE data) F:\MCP\projects\CAN\Include\EEAccess.c001aa8 ffe6001aaa cfe1 MOVFF 0xfe1,0xfd9001aac ffd9{ F:\MCP\projects\CAN\Include\EEAccess.c001aae 98a1 BCF 0xa1,0x4,0x0 PIR2bits.EEIF=0; F:\MCP\projects\CAN\Include\EEAccess.c001ab0 0efd MOVLW 0xfd EEADRH=(BYTE)(addr>>8); F:\MCP\projects\CAN\Include\EEAccess.c001ab2 cfdb MOVFF 0xfdb,0x0001ab4 f000001ab6 0efe MOVLW 0xfe001ab8 cfdb MOVFF 0xfdb,0x1001aba f001001abc c001 MOVFF 0x1,0x0001abe f000001ac0 6a01 CLRF 0x1,0x0001ac2 5000 MOVF 0x0,0x0,0x0001ac4 6eaa MOVWF 0xaa,0x0001ac6 0eff MOVLW 0xff EEADR=(BYTE)(addr & 0xFF); F:\MCP\projects\CAN\Include\EEAccess.c001ac8 6ee7 MOVWF 0xe7,0x0001aca 0efd MOVLW 0xfd001acc cfdb MOVFF 0xfdb,0x0001ace f000001ad0 0efe MOVLW 0xfe001ad2 cfdb MOVFF 0xfdb,0x1001ad4 f001001ad6 50e7 MOVF 0xe7,0x0,0x0001ad8 1600 ANDWF 0x0,0x1,0x0001ada 6a01 CLRF 0x1,0x0001adc 5000 MOVF 0x0,0x0,0x0001ade 6ea9 MOVWF 0xa9,0x0001ae0 0efc MOVLW 0xfc EEDATA=data; F:\MCP\projects\CAN\Include\EEAccess.c001ae2 50db MOVF 0xdb,0x0,0x0001ae4 6ea8 MOVWF 0xa8,0x0001ae6 9ea6 BCF 0xa6,0x7,0x0 EECON1bits.EEPGD=0; F:\MCP\projects\CAN\Include\EEAccess.c001ae8 9ca6 BCF 0xa6,0x6,0x0 EECON1bits.CFGS=0; F:\MCP\projects\CAN\Include\EEAccess.c001aea 84a6 BSF 0xa6,0x2,0x0 EECON1bits.WREN=1; F:\MCP\projects\CAN\Include\EEAccess.c001aec 9ef2 BCF 0xf2,0x7,0x0 INTCONbits.GIE=0; F:\MCP\projects\CAN\Include\EEAccess.c001aee 0e55 MOVLW 0x55 EECON2=0x55; F:\MCP\projects\CAN\Include\EEAccess.c001af0 6ea7 MOVWF 0xa7,0x0001af2 0eaa MOVLW 0xaa EECON2=0xAA; F:\MCP\projects\CAN\Include\EEAccess.c001af4 6ea7 MOVWF 0xa7,0x0001af6 82a6 BSF 0xa6,0x1,0x0 EECON1bits.WR=1; F:\MCP\projects\CAN\Include\EEAccess.c001af8 8ef2 BSF 0xf2,0x7,0x0 INTCONbits.GIE=1; F:\MCP\projects\CAN\Include\EEAccess.c001afa a8a1 BTFSS 0xa1,0x4,0x0 while(!PIR2bits.EEIF); F:\MCP\projects\CAN\Include\EEAccess.c001afc d7fe BRA 0x1afa001afe 94a6 BCF 0xa6,0x2,0x0 EECON1bits.WREN=0; F:\MCP\projects\CAN\Include\EEAccess.c001b00 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\Include\EEAccess.c001b02 cfe7 MOVFF 0xfe7,0xfd9001b04 ffd9001b06 0012 RETURN 0x0/********************************************************************* F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* LCD routines (HD44780) F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c********************************************************************* F:\MCP\projects\CAN\canLCD\Source\lcd.c* FileName: $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canLCD/Source/lcd.c $ F:\MCP\projects\CAN\canLCD\Source\lcd.c* Last changed: $LastChangedDate: 2006-11-21 10:28:39 +0100 (ti, 21 nov 2006) $ F:\MCP\projects\CAN\canLCD\Source\lcd.c* By: $LastChangedBy: johboh $ F:\MCP\projects\CAN\canLCD\Source\lcd.c* Revision: $Revision: 140 $ F:\MCP\projects\CAN\canLCD\Source\lcd.c********************************************************************/ F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c#include <lcd.h> F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c#ifdef USE_LCD F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cstatic void lcdWrite(BYTE c); F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c#define LCD_STROBE ((LCD_EN_IO = 1),(LCD_EN_IO = 0)) F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.cOBS OBS OBS OBS!! F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cDELAYS ARE FOR 40Mhz (10Mhz PLL4) F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cDefinitions needed: F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cLCD_RS_TRIS and LCD_RS_IO F:\MCP\projects\CAN\canLCD\Source\lcd.cLCD_EN_TRIS and LCD_EN_IO F:\MCP\projects\CAN\canLCD\Source\lcd.cLCD_DATA_4_TRIS and LCD_DATA_4_IO F:\MCP\projects\CAN\canLCD\Source\lcd.cLCD_DATA_5_TRIS and LCD_DATA_5_IO F:\MCP\projects\CAN\canLCD\Source\lcd.cLCD_DATA_6_TRIS and LCD_DATA_6_IO F:\MCP\projects\CAN\canLCD\Source\lcd.cLCD_DATA_7_TRIS and LCD_DATA_7_IO F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdWrite F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: Byte to write. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: Write to the dislay F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.c0016e2 cfd9 MOVFF 0xfd9,0xfe6 void lcdWrite(BYTE c) F:\MCP\projects\CAN\canLCD\Source\lcd.c0016e4 ffe60016e6 cfe1 MOVFF 0xfe1,0xfd90016e8 ffd9{ F:\MCP\projects\CAN\canLCD\Source\lcd.c0016ea 0efe MOVLW 0xfe LCD_DATA_4_IO=((c)&0b10000)>>4; F:\MCP\projects\CAN\canLCD\Source\lcd.c0016ec 50db MOVF 0xdb,0x0,0x00016ee 0b10 ANDLW 0x100016f0 38e8 SWAPF 0xe8,0x0,0x00016f2 0b0f ANDLW 0xf0016f4 b0e8 BTFSC 0xe8,0x0,0x00016f6 8094 BSF 0x94,0x0,0x00016f8 a0e8 BTFSS 0xe8,0x0,0x00016fa 9094 BCF 0x94,0x0,0x00016fc 0efe MOVLW 0xfe LCD_DATA_5_IO=((c)&0b100000)>>5; F:\MCP\projects\CAN\canLCD\Source\lcd.c0016fe 50db MOVF 0xdb,0x0,0x0001700 0b20 ANDLW 0x20001702 0be0 ANDLW 0xe0001704 38e8 SWAPF 0xe8,0x0,0x0001706 40e8 RRNCF 0xe8,0x0,0x0001708 b0e8 BTFSC 0xe8,0x0,0x000170a 8294 BSF 0x94,0x1,0x000170c a0e8 BTFSS 0xe8,0x0,0x000170e 9294 BCF 0x94,0x1,0x0001710 0e06 MOVLW 0x6 LCD_DATA_6_IO=((c)&0b1000000)>>6; F:\MCP\projects\CAN\canLCD\Source\lcd.c001712 6e00 MOVWF 0x0,0x0001714 0efe MOVLW 0xfe001716 50db MOVF 0xdb,0x0,0x0001718 0b40 ANDLW 0x4000171a c000 MOVFF 0x0,0xfe700171c ffe700171e 52e7 MOVF 0xe7,0x1,0x0001720 e004 BZ 0x172a001722 42e8 RRNCF 0xe8,0x1,0x0001724 0b7f ANDLW 0x7f001726 06e7 DECF 0xe7,0x1,0x0001728 e1fc BNZ 0x172200172a b0e8 BTFSC 0xe8,0x0,0x000172c 8494 BSF 0x94,0x2,0x000172e a0e8 BTFSS 0xe8,0x0,0x0001730 9494 BCF 0x94,0x2,0x0001732 0efe MOVLW 0xfe LCD_DATA_7_IO=((c)&0b10000000)>>7; F:\MCP\projects\CAN\canLCD\Source\lcd.c001734 50db MOVF 0xdb,0x0,0x0001736 0b80 ANDLW 0x80001738 44e8 RLNCF 0xe8,0x0,0x000173a 0b01 ANDLW 0x100173c b0e8 BTFSC 0xe8,0x0,0x000173e 8694 BSF 0x94,0x3,0x0001740 a0e8 BTFSS 0xe8,0x0,0x0001742 9694 BCF 0x94,0x3,0x0001744 8a92 BSF 0x92,0x5,0x0 LCD_STROBE; F:\MCP\projects\CAN\canLCD\Source\lcd.c001746 9a92 BCF 0x92,0x5,0x0001748 0efe MOVLW 0xfe LCD_DATA_4_IO=((c)&0b1); F:\MCP\projects\CAN\canLCD\Source\lcd.c00174a 50db MOVF 0xdb,0x0,0x000174c 0b01 ANDLW 0x100174e b0e8 BTFSC 0xe8,0x0,0x0001750 8094 BSF 0x94,0x0,0x0001752 a0e8 BTFSS 0xe8,0x0,0x0001754 9094 BCF 0x94,0x0,0x0001756 0efe MOVLW 0xfe LCD_DATA_5_IO=((c)&0b10)>>1; F:\MCP\projects\CAN\canLCD\Source\lcd.c001758 50db MOVF 0xdb,0x0,0x000175a 0b02 ANDLW 0x200175c 40e8 RRNCF 0xe8,0x0,0x000175e 0b7f ANDLW 0x7f001760 b0e8 BTFSC 0xe8,0x0,0x0001762 8294 BSF 0x94,0x1,0x0001764 a0e8 BTFSS 0xe8,0x0,0x0001766 9294 BCF 0x94,0x1,0x0001768 0efe MOVLW 0xfe LCD_DATA_6_IO=((c)&0b100)>>2; F:\MCP\projects\CAN\canLCD\Source\lcd.c00176a 50db MOVF 0xdb,0x0,0x000176c 0b04 ANDLW 0x400176e 40e8 RRNCF 0xe8,0x0,0x0001770 40e8 RRNCF 0xe8,0x0,0x0001772 0b3f ANDLW 0x3f001774 b0e8 BTFSC 0xe8,0x0,0x0001776 8494 BSF 0x94,0x2,0x0001778 a0e8 BTFSS 0xe8,0x0,0x000177a 9494 BCF 0x94,0x2,0x000177c 0efe MOVLW 0xfe LCD_DATA_7_IO=((c)&0b1000)>>3; F:\MCP\projects\CAN\canLCD\Source\lcd.c00177e 50db MOVF 0xdb,0x0,0x0001780 0b08 ANDLW 0x8001782 40e8 RRNCF 0xe8,0x0,0x0001784 40e8 RRNCF 0xe8,0x0,0x0001786 40e8 RRNCF 0xe8,0x0,0x0001788 0b1f ANDLW 0x1f00178a b0e8 BTFSC 0xe8,0x0,0x000178c 8694 BSF 0x94,0x3,0x000178e a0e8 BTFSS 0xe8,0x0,0x0001790 9694 BCF 0x94,0x3,0x0001792 8a92 BSF 0x92,0x5,0x0 LCD_STROBE; F:\MCP\projects\CAN\canLCD\Source\lcd.c001794 9a92 BCF 0x92,0x5,0x0001796 0e08 MOVLW 0x8 Delay100TCYx(8); // 80uS F:\MCP\projects\CAN\canLCD\Source\lcd.c001798 6ee6 MOVWF 0xe6,0x000179a ec0c CALL 0x1c18,0x000179c f00e00179e 52e5 MOVF 0xe5,0x1,0x00017a0 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.c0017a2 cfe7 MOVFF 0xfe7,0xfd90017a4 ffd90017a6 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdClear F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: Clear the display F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.cvoid lcdClear(void) F:\MCP\projects\CAN\canLCD\Source\lcd.c{ F:\MCP\projects\CAN\canLCD\Source\lcd.c0017a8 9892 BCF 0x92,0x4,0x0 LCD_RS_IO = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c0017aa 0e01 MOVLW 0x1 lcdWrite(0x1); // Clear the Display F:\MCP\projects\CAN\canLCD\Source\lcd.c0017ac 6ee6 MOVWF 0xe6,0x00017ae df99 RCALL 0x16e20017b0 52e5 MOVF 0xe5,0x1,0x00017b2 0e02 MOVLW 0x2 Delay10KTCYx(2); // 2ms F:\MCP\projects\CAN\canLCD\Source\lcd.c0017b4 6ee6 MOVWF 0xe6,0x00017b6 ecf5 CALL 0x1bea,0x00017b8 f00d0017ba 52e5 MOVF 0xe5,0x1,0x00017bc 0e02 MOVLW 0x2 lcdWrite(0x02); // Home the display F:\MCP\projects\CAN\canLCD\Source\lcd.c0017be 6ee6 MOVWF 0xe6,0x00017c0 df90 RCALL 0x16e20017c2 52e5 MOVF 0xe5,0x1,0x00017c4 0e02 MOVLW 0x2 Delay10KTCYx(2); // 2ms F:\MCP\projects\CAN\canLCD\Source\lcd.c0017c6 6ee6 MOVWF 0xe6,0x00017c8 ecf5 CALL 0x1bea,0x00017ca f00d0017cc 52e5 MOVF 0xe5,0x1,0x00017ce 0012 RETURN 0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdPuts F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: string to write. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.c0017d0 cfd9 MOVFF 0xfd9,0xfe6 void lcdPuts(char * s) F:\MCP\projects\CAN\canLCD\Source\lcd.c0017d2 ffe60017d4 cfe1 MOVFF 0xfe1,0xfd90017d6 ffd9{ F:\MCP\projects\CAN\canLCD\Source\lcd.c0017d8 8892 BSF 0x92,0x4,0x0 LCD_RS_IO = 1; // write characters F:\MCP\projects\CAN\canLCD\Source\lcd.c0017da 0efd MOVLW 0xfd while(*s) lcdWrite(*s++); F:\MCP\projects\CAN\canLCD\Source\lcd.c0017dc cfdb MOVFF 0xfdb,0xfe90017de ffe90017e0 0efe MOVLW 0xfe0017e2 cfdb MOVFF 0xfdb,0xfea0017e4 ffea0017e6 50ef MOVF 0xef,0x0,0x00017e8 e00e BZ 0x18060017ea 0efd MOVLW 0xfd0017ec cfdb MOVFF 0xfdb,0xfe90017ee ffe90017f0 2adb INCF 0xdb,0x1,0x00017f2 0efe MOVLW 0xfe0017f4 cfdb MOVFF 0xfdb,0xfea0017f6 ffea0017f8 e301 BNC 0x17fc0017fa 2adb INCF 0xdb,0x1,0x00017fc 50ef MOVF 0xef,0x0,0x00017fe 6ee6 MOVWF 0xe6,0x0001800 df70 RCALL 0x16e2001802 52e5 MOVF 0xe5,0x1,0x0001804 d7ea BRA 0x17da001806 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.c001808 cfe7 MOVFF 0xfe7,0xfd900180a ffd900180c 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdPutrs F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: string to write. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.c00180e cfd9 MOVFF 0xfd9,0xfe6 void lcdPutrs(const rom char *s) F:\MCP\projects\CAN\canLCD\Source\lcd.c001810 ffe6001812 cfe1 MOVFF 0xfe1,0xfd9001814 ffd9{ F:\MCP\projects\CAN\canLCD\Source\lcd.c001816 8892 BSF 0x92,0x4,0x0 LCD_RS_IO = 1; // write characters F:\MCP\projects\CAN\canLCD\Source\lcd.c001818 0efd MOVLW 0xfd while(*s) lcdWrite(*s++); F:\MCP\projects\CAN\canLCD\Source\lcd.c00181a cfdb MOVFF 0xfdb,0xff600181c fff600181e 0efe MOVLW 0xfe001820 cfdb MOVFF 0xfdb,0xff7001822 fff7001824 0008 TBLRD001826 50f5 MOVF 0xf5,0x0,0x0001828 e00f BZ 0x184800182a 0efd MOVLW 0xfd00182c cfdb MOVFF 0xfdb,0xff600182e fff6001830 2adb INCF 0xdb,0x1,0x0001832 0efe MOVLW 0xfe001834 cfdb MOVFF 0xfdb,0xff7001836 fff7001838 e301 BNC 0x183c00183a 2adb INCF 0xdb,0x1,0x000183c 0008 TBLRD00183e 50f5 MOVF 0xf5,0x0,0x0001840 6ee6 MOVWF 0xe6,0x0001842 df4f RCALL 0x16e2001844 52e5 MOVF 0xe5,0x1,0x0001846 d7e8 BRA 0x1818001848 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.c00184a cfe7 MOVFF 0xfe7,0xfd900184c ffd900184e 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdPutc F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: char to write. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.c001850 cfd9 MOVFF 0xfd9,0xfe6 void lcdPutc(char c) F:\MCP\projects\CAN\canLCD\Source\lcd.c001852 ffe6001854 cfe1 MOVFF 0xfe1,0xfd9001856 ffd9{ F:\MCP\projects\CAN\canLCD\Source\lcd.c001858 8892 BSF 0x92,0x4,0x0 LCD_RS_IO=1; // write character F:\MCP\projects\CAN\canLCD\Source\lcd.c00185a 0efe MOVLW 0xfe lcdWrite(c); F:\MCP\projects\CAN\canLCD\Source\lcd.c00185c cfdb MOVFF 0xfdb,0xfe600185e ffe6001860 df40 RCALL 0x16e2001862 52e5 MOVF 0xe5,0x1,0x0001864 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.c001866 cfe7 MOVFF 0xfe7,0xfd9001868 ffd900186a 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdGoto F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: Position to goto F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.c00186c cfd9 MOVFF 0xfd9,0xfe6 void lcdGoto(BYTE pos) F:\MCP\projects\CAN\canLCD\Source\lcd.c00186e ffe6001870 cfe1 MOVFF 0xfe1,0xfd9001872 ffd9{ F:\MCP\projects\CAN\canLCD\Source\lcd.c001874 9892 BCF 0x92,0x4,0x0 LCD_RS_IO = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c001876 0efe MOVLW 0xfe lcdWrite(0x80+pos); // sets the DDRAM Address F:\MCP\projects\CAN\canLCD\Source\lcd.c001878 50db MOVF 0xdb,0x0,0x000187a 0f80 ADDLW 0x8000187c 6ee6 MOVWF 0xe6,0x000187e df31 RCALL 0x16e2001880 52e5 MOVF 0xe5,0x1,0x0001882 52e5 MOVF 0xe5,0x1,0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.c001884 cfe7 MOVFF 0xfe7,0xfd9001886 ffd9001888 0012 RETURN 0x0F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c/* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Function: lcdInit F:\MCP\projects\CAN\canLCD\Source\lcd.c* F:\MCP\projects\CAN\canLCD\Source\lcd.c* Input: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Output: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Pre-conditions: none F:\MCP\projects\CAN\canLCD\Source\lcd.c* Affects: none. F:\MCP\projects\CAN\canLCD\Source\lcd.c* Depends: Setup to use 4 bit mode F:\MCP\projects\CAN\canLCD\Source\lcd.c*/ F:\MCP\projects\CAN\canLCD\Source\lcd.cvoid lcdInit(void) F:\MCP\projects\CAN\canLCD\Source\lcd.c{ F:\MCP\projects\CAN\canLCD\Source\lcd.c// Setup IO (all output) F:\MCP\projects\CAN\canLCD\Source\lcd.c00188a 9880 BCF 0x80,0x4,0x0 LCD_RS_TRIS = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c00188c 9a80 BCF 0x80,0x5,0x0 LCD_EN_TRIS = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c00188e 9082 BCF 0x82,0x0,0x0 LCD_DATA_4_TRIS = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c001890 9282 BCF 0x82,0x1,0x0 LCD_DATA_5_TRIS = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c001892 9482 BCF 0x82,0x2,0x0 LCD_DATA_6_TRIS = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.c001894 9682 BCF 0x82,0x3,0x0 LCD_DATA_7_TRIS = 0; F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c001896 9892 BCF 0x92,0x4,0x0 LCD_RS_IO = 0; // write control bytes F:\MCP\projects\CAN\canLCD\Source\lcd.c001898 0e0f MOVLW 0xf Delay10KTCYx(15); // power on delay, 15ms F:\MCP\projects\CAN\canLCD\Source\lcd.c00189a 6ee6 MOVWF 0xe6,0x000189c ecf5 CALL 0x1bea,0x000189e f00d0018a0 52e5 MOVF 0xe5,0x1,0x00018a2 0e03 MOVLW 0x3 lcdWrite(0x3); // attention! F:\MCP\projects\CAN\canLCD\Source\lcd.c0018a4 6ee6 MOVWF 0xe6,0x00018a6 df1d RCALL 0x16e20018a8 52e5 MOVF 0xe5,0x1,0x00018aa 0e05 MOVLW 0x5 Delay10KTCYx(5); // 5ms F:\MCP\projects\CAN\canLCD\Source\lcd.c0018ac 6ee6 MOVWF 0xe6,0x00018ae ecf5 CALL 0x1bea,0x00018b0 f00d0018b2 52e5 MOVF 0xe5,0x1,0x00018b4 8a92 BSF 0x92,0x5,0x0 LCD_STROBE; F:\MCP\projects\CAN\canLCD\Source\lcd.c0018b6 9a92 BCF 0x92,0x5,0x00018b8 0e0a MOVLW 0xa Delay100TCYx(10); // 100us F:\MCP\projects\CAN\canLCD\Source\lcd.c0018ba 6ee6 MOVWF 0xe6,0x00018bc ec0c CALL 0x1c18,0x00018be f00e0018c0 52e5 MOVF 0xe5,0x1,0x00018c2 8a92 BSF 0x92,0x5,0x0 LCD_STROBE; F:\MCP\projects\CAN\canLCD\Source\lcd.c0018c4 9a92 BCF 0x92,0x5,0x00018c6 0e05 MOVLW 0x5 Delay10KTCYx(5); // 5ms F:\MCP\projects\CAN\canLCD\Source\lcd.c0018c8 6ee6 MOVWF 0xe6,0x00018ca ecf5 CALL 0x1bea,0x00018cc f00d0018ce 52e5 MOVF 0xe5,0x1,0x00018d0 0e02 MOVLW 0x2 lcdWrite(0x2); // set 4 bit mode F:\MCP\projects\CAN\canLCD\Source\lcd.c0018d2 6ee6 MOVWF 0xe6,0x00018d4 df06 RCALL 0x16e20018d6 52e5 MOVF 0xe5,0x1,0x00018d8 0e04 MOVLW 0x4 Delay100TCYx(4); // 40 us F:\MCP\projects\CAN\canLCD\Source\lcd.c0018da 6ee6 MOVWF 0xe6,0x00018dc ec0c CALL 0x1c18,0x00018de f00e0018e0 52e5 MOVF 0xe5,0x1,0x00018e2 0e28 MOVLW 0x28 lcdWrite(0x28); // 4 bit mode, 1/16 duty, 5x8 font F:\MCP\projects\CAN\canLCD\Source\lcd.c0018e4 6ee6 MOVWF 0xe6,0x00018e6 defd RCALL 0x16e20018e8 52e5 MOVF 0xe5,0x1,0x00018ea 0e08 MOVLW 0x8 lcdWrite(0x08); // display off F:\MCP\projects\CAN\canLCD\Source\lcd.c0018ec 6ee6 MOVWF 0xe6,0x00018ee def9 RCALL 0x16e20018f0 52e5 MOVF 0xe5,0x1,0x00018f2 0e0c MOVLW 0xc lcdWrite(0x0C); // display on, unblink curson off F:\MCP\projects\CAN\canLCD\Source\lcd.c0018f4 6ee6 MOVWF 0xe6,0x00018f6 def5 RCALL 0x16e20018f8 52e5 MOVF 0xe5,0x1,0x00018fa 0e06 MOVLW 0x6 lcdWrite(0x06); // entry mode F:\MCP\projects\CAN\canLCD\Source\lcd.c0018fc 6ee6 MOVWF 0xe6,0x00018fe def1 RCALL 0x16e2001900 52e5 MOVF 0xe5,0x1,0x0001902 0012 RETURN 0x0 } F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c#endif F:\MCP\projects\CAN\canLCD\Source\lcd.cF:\MCP\projects\CAN\canLCD\Source\lcd.c