CCS PCM C Compiler, Version 4.106, 47914 23-3-13 19:05Filename: C:\Users\Honza\Documents\pic\blik\main.lstROM used: 236 words (3%)Largest free fragment is 2048RAM used: 6 (2%) at main() level9 (2%) worst caseStack: 1 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 0660003: NOP.................... #include "main.h".................... #include <16F887.h>.................... //////// Standard Header file for the PIC16F887 device ////////////////.................... #device PIC16F887.................... #list........................................ #device adc=8........................................ #FUSES NOWDT //No Watch Dog Timer.................... #FUSES INTRC //Internal RC Osc.................... #FUSES NOPUT //No Power Up Timer.................... #FUSES MCLR //Master Clear pin enabled.................... #FUSES NOPROTECT //Code not protected from reading.................... #FUSES NOCPD //No EE protection.................... #FUSES NOBROWNOUT //No brownout reset.................... #FUSES IESO //Internal External Switch Over mode enabled.................... #FUSES FCMEN //Fail-safe clock monitor enabled.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O.................... #FUSES NODEBUG //No Debug mode for ICD.................... #FUSES NOWRT //Program memory not write protected.................... #FUSES BORV40 //Brownout reset at 4.0V........................................ #use delay(clock=8000000)................................................................................ #define LCD_ENABLE_PIN PIN_E0 ////.................... #define LCD_RS_PIN PIN_E1 ////.................... #define LCD_RW_PIN PIN_E2 ////.................... #define LCD_DATA4 PIN_D4 ////.................... #define LCD_DATA5 PIN_D5 ////.................... #define LCD_DATA6 PIN_D6 ////.................... #define LCD_DATA7 PIN_D7.................... #include <lcd.c>.................... ///////////////////////////////////////////////////////////////////////////////.................... //// LCD.C ////.................... //// Driver for common LCD modules ////.................... //// ////.................... //// lcd_init() Must be called before any other function. ////.................... //// ////.................... //// lcd_putc(c) Will display c on the next position of the LCD. ////.................... //// \a Set cursor position to upper left ////.................... //// \f Clear display, set cursor to upper left ////.................... //// \n Go to start of second line ////.................... //// \b Move back one position ////.................... //// If LCD_EXTENDED_NEWLINE is defined, the \n character ////.................... //// will erase all remanining characters on the current ////.................... //// line, and move the cursor to the beginning of the next ////.................... //// line. ////.................... //// If LCD_EXTENDED_NEWLINE is defined, the \r character ////.................... //// will move the cursor to the start of the current ////.................... //// line. ////.................... //// ////.................... //// lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1) ////.................... //// ////.................... //// lcd_getc(x,y) Returns character at position x,y on LCD ////.................... //// ////.................... //// CONFIGURATION ////.................... //// The LCD can be configured in one of two ways: a.) port access or ////.................... //// b.) pin access. Port access requires the entire 7 bit interface ////.................... //// connected to one GPIO port, and the data bits (D4:D7 of the LCD) ////.................... //// connected to sequential pins on the GPIO. Pin access ////.................... //// has no requirements, all 7 bits of the control interface can ////.................... //// can be connected to any GPIO using several ports. ////.................... //// ////.................... //// To use port access, #define LCD_DATA_PORT to the SFR location of ////.................... //// of the GPIO port that holds the interface, -AND- edit LCD_PIN_MAP ////.................... //// of this file to configure the pin order. If you are using a ////.................... //// baseline PIC (PCB), then LCD_OUTPUT_MAP and LCD_INPUT_MAP also must ////.................... //// be defined. ////.................... //// ////.................... //// Example of port access: ////.................... //// #define LCD_DATA_PORT getenv("SFR:PORTD") ////.................... //// ////.................... //// To use pin access, the following pins must be defined: ////.................... //// LCD_ENABLE_PIN ////.................... //// LCD_RS_PIN ////.................... //// LCD_RW_PIN ////.................... //// LCD_DATA4 ////.................... //// LCD_DATA5 ////.................... //// LCD_DATA6 ////.................... //// LCD_DATA7 ////.................... //// ////.................... //// Example of pin access: ////.................... //// #define LCD_ENABLE_PIN PIN_E0 ////.................... //// #define LCD_RS_PIN PIN_E1 ////.................... //// #define LCD_RW_PIN PIN_E2 ////.................... //// #define LCD_DATA4 PIN_D4 ////.................... //// #define LCD_DATA5 PIN_D5 ////.................... //// #define LCD_DATA6 PIN_D6 ////.................... //// #define LCD_DATA7 PIN_D7 ////.................... //// ////.................... ///////////////////////////////////////////////////////////////////////////////.................... //// (C) Copyright 1996,2010 Custom Computer Services ////.................... //// This source code may only be used by licensed users of the CCS C ////.................... //// compiler. This source code may only be distributed to other ////.................... //// licensed users of the CCS C compiler. No other use, reproduction ////.................... //// or distribution is permitted without written permission. ////.................... //// Derivative programs created using this software in object code ////.................... //// form are not restricted in any way. ////.................... ///////////////////////////////////////////////////////////////////////////........................................ // define the pinout..................... // only required if port access is being used..................... typedef struct.................... { // This structure is overlayed.................... BOOLEAN enable; // on to an I/O port to gain.................... BOOLEAN rs; // access to the LCD pins..................... BOOLEAN rw; // The bits are allocated from.................... BOOLEAN unused; // low order up. ENABLE will.................... int data : 4; // be LSB pin of that port..................... #if defined(__PCD__) // The port used will be LCD_DATA_PORT..................... int reserved: 8;.................... #endif.................... } LCD_PIN_MAP;........................................ // this is to improve compatability with previous LCD drivers that accepted.................... // a define labeled 'use_portb_lcd' that configured the LCD onto port B..................... #if ((defined(use_portb_lcd)) && (use_portb_lcd==TRUE)).................... #define LCD_DATA_PORT getenv("SFR:PORTB").................... #endif........................................ #if defined(__PCB__).................... // these definitions only need to be modified for baseline PICs..................... // all other PICs use LCD_PIN_MAP or individual LCD_xxx pin definitions..................... /* EN, RS, RW, UNUSED, DATA */.................... const LCD_PIN_MAP LCD_OUTPUT_MAP = {0, 0, 0, 0, 0};.................... const LCD_PIN_MAP LCD_INPUT_MAP = {0, 0, 0, 0, 0xF};.................... #endif........................................ ////////////////////// END CONFIGURATION ///////////////////////////////////........................................ #ifndef LCD_ENABLE_PIN.................... #define lcd_output_enable(x) lcdlat.enable=x.................... #define lcd_enable_tris() lcdtris.enable=0.................... #else.................... #define lcd_output_enable(x) output_bit(LCD_ENABLE_PIN, x).................... #define lcd_enable_tris() output_drive(LCD_ENABLE_PIN).................... #endif........................................ #ifndef LCD_RS_PIN.................... #define lcd_output_rs(x) lcdlat.rs=x.................... #define lcd_rs_tris() lcdtris.rs=0.................... #else.................... #define lcd_output_rs(x) output_bit(LCD_RS_PIN, x).................... #define lcd_rs_tris() output_drive(LCD_RS_PIN).................... #endif........................................ #ifndef LCD_RW_PIN.................... #define lcd_output_rw(x) lcdlat.rw=x.................... #define lcd_rw_tris() lcdtris.rw=0.................... #else.................... #define lcd_output_rw(x) output_bit(LCD_RW_PIN, x).................... #define lcd_rw_tris() output_drive(LCD_RW_PIN).................... #endif........................................ // original version of this library incorrectly labeled LCD_DATA0 as LCD_DATA4,.................... // LCD_DATA1 as LCD_DATA5, and so on. this block of code makes the driver.................... // compatible with any code written for the original library.................... #if (defined(LCD_DATA0) && defined(LCD_DATA1) && defined(LCD_DATA2) && defined(LCD_DATA3) && !defined(LCD_DATA4) && !defined(LCD_DATA5) && !defined(LCD_DATA6) && !defined(LCD_DATA7)).................... #define LCD_DATA4 LCD_DATA0.................... #define LCD_DATA5 LCD_DATA1.................... #define LCD_DATA6 LCD_DATA2.................... #define LCD_DATA7 LCD_DATA3.................... #endif........................................ #ifndef LCD_DATA4.................... #ifndef LCD_DATA_PORT.................... #if defined(__PCB__).................... #define LCD_DATA_PORT 0x06 //portb.................... #define set_tris_lcd(x) set_tris_b(x).................... #else.................... #if defined(PIN_D0).................... #define LCD_DATA_PORT getenv("SFR:PORTD") //portd.................... #else.................... #define LCD_DATA_PORT getenv("SFR:PORTB") //portb.................... #endif.................... #endif.................... #endif........................................ #if defined(__PCB__).................... LCD_PIN_MAP lcd, lcdlat;.................... #byte lcd = LCD_DATA_PORT.................... #byte lcdlat = LCD_DATA_PORT.................... #elif defined(__PCM__).................... LCD_PIN_MAP lcd, lcdlat, lcdtris;.................... #byte lcd = LCD_DATA_PORT.................... #byte lcdlat = LCD_DATA_PORT.................... #byte lcdtris = LCD_DATA_PORT+0x80.................... #elif defined(__PCH__).................... LCD_PIN_MAP lcd, lcdlat, lcdtris;.................... #byte lcd = LCD_DATA_PORT.................... #byte lcdlat = LCD_DATA_PORT+9.................... #byte lcdtris = LCD_DATA_PORT+0x12.................... #elif defined(__PCD__).................... LCD_PIN_MAP lcd, lcdlat, lcdtris;.................... #word lcd = LCD_DATA_PORT.................... #word lcdlat = LCD_DATA_PORT+2.................... #word lcdtris = LCD_DATA_PORT-0x02.................... #endif.................... #endif //LCD_DATA4 not defined........................................ #ifndef LCD_TYPE.................... #define LCD_TYPE 2 // 0=5x7, 1=5x10, 2=2 lines.................... #endif........................................ #ifndef LCD_LINE_TWO.................... #define LCD_LINE_TWO 0x40 // LCD RAM address for the second line.................... #endif........................................ #ifndef LCD_LINE_LENGTH.................... #define LCD_LINE_LENGTH 20.................... #endif........................................ BYTE const LCD_INIT_STRING[4] = {0x20 | (LCD_TYPE << 2), 0xc, 1, 6};.................... // These bytes need to be sent to the LCD.................... // to start it up......................................... BYTE lcd_read_nibble(void);........................................ BYTE lcd_read_byte(void).................... {.................... BYTE low,high;........................................ #if defined(__PCB__).................... set_tris_lcd(LCD_INPUT_MAP);.................... #else.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... output_float(LCD_DATA4);.................... output_float(LCD_DATA5);.................... output_float(LCD_DATA6);.................... output_float(LCD_DATA7);.................... #else.................... lcdtris.data = 0xF;.................... #endif.................... #endif........................................ lcd_output_rw(1);.................... delay_cycles(1);.................... lcd_output_enable(1);.................... delay_cycles(1);.................... high = lcd_read_nibble();........................................ lcd_output_enable(0);.................... delay_cycles(1);.................... lcd_output_enable(1);.................... delay_us(1);.................... low = lcd_read_nibble();........................................ lcd_output_enable(0);........................................ #if defined(__PCB__).................... set_tris_lcd(LCD_OUTPUT_MAP);.................... #else.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... output_drive(LCD_DATA4);.................... output_drive(LCD_DATA5);.................... output_drive(LCD_DATA6);.................... output_drive(LCD_DATA7);.................... #else.................... lcdtris.data = 0x0;.................... #endif.................... #endif........................................ return( (high<<4) | low);.................... }........................................ BYTE lcd_read_nibble(void).................... {.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... BYTE n = 0x00;........................................ /* Read the data port */.................... n |= input(LCD_DATA4);.................... n |= input(LCD_DATA5) << 1;.................... n |= input(LCD_DATA6) << 2;.................... n |= input(LCD_DATA7) << 3;........................................ return(n);.................... #else.................... return(lcd.data);.................... #endif.................... }........................................ void lcd_send_nibble(BYTE n).................... {.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... /* Write to the data port */.................... output_bit(LCD_DATA4, bit_test(n, 0));.................... output_bit(LCD_DATA5, bit_test(n, 1));.................... output_bit(LCD_DATA6, bit_test(n, 2));.................... output_bit(LCD_DATA7, bit_test(n, 3));.................... #else.................... lcdlat.data = n;.................... #endif........................................ delay_cycles(1);.................... lcd_output_enable(1);.................... delay_us(2);.................... lcd_output_enable(0);.................... }........................................ void lcd_send_byte(BYTE address, BYTE n).................... {.................... #if defined(__PCB__).................... set_tris_lcd(LCD_OUTPUT_MAP);.................... #else.................... lcd_enable_tris();.................... lcd_rs_tris();.................... lcd_rw_tris();.................... #endif........................................ lcd_output_rs(0);.................... while ( bit_test(lcd_read_byte(),7) ) ;.................... lcd_output_rs(address);.................... delay_cycles(1);.................... lcd_output_rw(0);.................... delay_cycles(1);.................... lcd_output_enable(0);.................... lcd_send_nibble(n >> 4);.................... lcd_send_nibble(n & 0xf);.................... }........................................ #if defined(LCD_EXTENDED_NEWLINE).................... unsigned int8 g_LcdX, g_LcdY;.................... #endif........................................ void lcd_init(void).................... {.................... BYTE i;........................................ #if defined(__PCB__).................... set_tris_lcd(LCD_OUTPUT_MAP);.................... #else.................... #if (defined(LCD_DATA4) && defined(LCD_DATA5) && defined(LCD_DATA6) && defined(LCD_DATA7)).................... output_drive(LCD_DATA4);.................... output_drive(LCD_DATA5);.................... output_drive(LCD_DATA6);.................... output_drive(LCD_DATA7);.................... #else.................... lcdtris.data = 0x0;.................... #endif.................... lcd_enable_tris();.................... lcd_rs_tris();.................... lcd_rw_tris();.................... #endif........................................ lcd_output_rs(0);.................... lcd_output_rw(0);.................... lcd_output_enable(0);........................................ delay_ms(15);.................... for(i=1;i<=3;++i).................... {.................... lcd_send_nibble(3);.................... delay_ms(5);.................... }........................................ lcd_send_nibble(2);.................... for(i=0;i<=3;++i).................... lcd_send_byte(0,LCD_INIT_STRING[i]);........................................ #if defined(LCD_EXTENDED_NEWLINE).................... g_LcdX = 0;.................... g_LcdY = 0;.................... #endif.................... }........................................ void lcd_gotoxy(BYTE x, BYTE y).................... {.................... BYTE address;........................................ if(y!=1).................... address=LCD_LINE_TWO;.................... else.................... address=0;........................................ address+=x-1;.................... lcd_send_byte(0,0x80|address);........................................ #if defined(LCD_EXTENDED_NEWLINE).................... g_LcdX = x - 1;.................... g_LcdY = y - 1;.................... #endif.................... }........................................ void lcd_putc(char c).................... {.................... switch (c).................... {.................... case '\a' : lcd_gotoxy(1,1); break;........................................ case '\f' : lcd_send_byte(0,1);.................... delay_ms(2);.................... #if defined(LCD_EXTENDED_NEWLINE).................... g_LcdX = 0;.................... g_LcdY = 0;.................... #endif.................... break;........................................ #if defined(LCD_EXTENDED_NEWLINE).................... case '\r' : lcd_gotoxy(1, g_LcdY+1); break;.................... case '\n' :.................... while (g_LcdX++ < LCD_LINE_LENGTH).................... {.................... lcd_send_byte(1, ' ');.................... }.................... lcd_gotoxy(1, g_LcdY+2);.................... break;.................... #else.................... case '\n' : lcd_gotoxy(1,2); break;.................... #endif........................................ case '\b' : lcd_send_byte(0,0x10); break;........................................ #if defined(LCD_EXTENDED_NEWLINE).................... default :.................... if (g_LcdX < LCD_LINE_LENGTH).................... {.................... lcd_send_byte(1, c);.................... g_LcdX++;.................... }.................... break;.................... #else.................... default : lcd_send_byte(1,c); break;.................... #endif.................... }.................... }........................................ char lcd_getc(BYTE x, BYTE y).................... {.................... char value;........................................ lcd_gotoxy(x,y);.................... while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low.................... lcd_output_rs(1);.................... value = lcd_read_byte();.................... lcd_output_rs(0);........................................ return(value);.................... }............................................................ #define ONE_WIRE_PIN PIN_C7.................... #use rs232(uart1, baud=9600)........................................ void main().................... {*0066: CLRF 040067: BCF 03.70068: MOVLW 1F0069: ANDWF 03,F006A: MOVLW 71006B: BSF 03.5006C: MOVWF 0F006D: MOVF 0F,W006E: BSF 03.6006F: BCF 07.30070: MOVLW 0C0071: BCF 03.60072: MOVWF 190073: MOVLW A20074: MOVWF 180075: MOVLW 900076: BCF 03.50077: MOVWF 180078: BSF 03.50079: BSF 03.6007A: MOVF 09,W007B: ANDLW C0007C: MOVWF 09007D: BCF 03.6007E: BCF 1F.4007F: BCF 1F.50080: MOVLW 000081: BSF 03.60082: MOVWF 080083: BCF 03.50084: CLRF 070085: CLRF 080086: CLRF 09........................................ setup_adc_ports(NO_ANALOGS|VSS_VDD);*008A: BSF 03.5008B: BSF 03.6008C: MOVF 09,W008D: ANDLW C0008E: MOVWF 09008F: BCF 03.60090: BCF 1F.40091: BCF 1F.50092: MOVLW 000093: BSF 03.60094: MOVWF 08.................... setup_adc(ADC_CLOCK_DIV_2);0095: BCF 03.50096: BCF 03.60097: BCF 1F.60098: BCF 1F.70099: BSF 03.5009A: BCF 1F.7009B: BCF 03.5009C: BSF 1F.0.................... setup_spi(SPI_SS_DISABLED);009D: BCF 14.5009E: BCF 20.5009F: MOVF 20,W00A0: BSF 03.500A1: MOVWF 0700A2: BCF 03.500A3: BSF 20.400A4: MOVF 20,W00A5: BSF 03.500A6: MOVWF 0700A7: BCF 03.500A8: BCF 20.300A9: MOVF 20,W00AA: BSF 03.500AB: MOVWF 0700AC: MOVLW 0100AD: BCF 03.500AE: MOVWF 1400AF: MOVLW 0000B0: BSF 03.500B1: MOVWF 14.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);00B2: MOVF 01,W00B3: ANDLW C700B4: IORLW 0800B5: MOVWF 01.................... setup_timer_1(T1_DISABLED);00B6: BCF 03.500B7: CLRF 10.................... setup_timer_2(T2_DISABLED,0,1);00B8: MOVLW 0000B9: MOVWF 7800BA: MOVWF 1200BB: MOVLW 0000BC: BSF 03.500BD: MOVWF 12.................... setup_ccp1(CCP_OFF);00BE: BCF 03.500BF: BSF 20.200C0: MOVF 20,W00C1: BSF 03.500C2: MOVWF 0700C3: BCF 03.500C4: CLRF 1700C5: BSF 03.500C6: CLRF 1B00C7: CLRF 1C00C8: MOVLW 0100C9: MOVWF 1D.................... setup_comparator(NC_NC_NC_NC); // This device COMP currently not supported by the PICWizard00CA: BCF 03.500CB: BSF 03.600CC: CLRF 0700CD: CLRF 0800CE: CLRF 09.................... setup_oscillator(OSC_8MHZ);00CF: MOVLW 7100D0: BSF 03.500D1: BCF 03.600D2: MOVWF 0F00D3: MOVF 0F,W............................................................ printf("Simple Thermomether",);00D4: MOVLW 0400D5: BCF 03.500D6: BSF 03.600D7: MOVWF 0D00D8: MOVLW 0000D9: MOVWF 0F00DA: BCF 03.600DB: CALL 01E.................... printf("(c) Kaklik 2013\r\n");00DC: MOVLW 0E00DD: BSF 03.600DE: MOVWF 0D00DF: MOVLW 0000E0: MOVWF 0F00E1: BCF 03.600E2: CALL 01E.................... printf("www.mlab.cz\r\n");00E3: MOVLW 1700E4: BSF 03.600E5: MOVWF 0D00E6: MOVLW 0000E7: MOVWF 0F00E8: BCF 03.600E9: CALL 01E............................................................ while (TRUE).................... {........................................ }00EA: GOTO 0EA........................................ }00EB: SLEEPConfiguration Fuses:Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUGWord 2: 3FFF NOWRT BORV40