CCS PCM C Compiler, Version 4.106, 47914 23-3-13 19:05
Filename: C:\Users\Honza\Documents\pic\blik\main.lst
ROM used: 236 words (3%)
Largest free fragment is 2048
RAM used: 6 (2%) at main() level
9 (2%) worst case
Stack: 1 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 066
0003: 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 04
0067: BCF 03.7
0068: MOVLW 1F
0069: ANDWF 03,F
006A: MOVLW 71
006B: BSF 03.5
006C: MOVWF 0F
006D: MOVF 0F,W
006E: BSF 03.6
006F: BCF 07.3
0070: MOVLW 0C
0071: BCF 03.6
0072: MOVWF 19
0073: MOVLW A2
0074: MOVWF 18
0075: MOVLW 90
0076: BCF 03.5
0077: MOVWF 18
0078: BSF 03.5
0079: BSF 03.6
007A: MOVF 09,W
007B: ANDLW C0
007C: MOVWF 09
007D: BCF 03.6
007E: BCF 1F.4
007F: BCF 1F.5
0080: MOVLW 00
0081: BSF 03.6
0082: MOVWF 08
0083: BCF 03.5
0084: CLRF 07
0085: CLRF 08
0086: CLRF 09
....................
.................... setup_adc_ports(NO_ANALOGS|VSS_VDD);
*
008A: BSF 03.5
008B: BSF 03.6
008C: MOVF 09,W
008D: ANDLW C0
008E: MOVWF 09
008F: BCF 03.6
0090: BCF 1F.4
0091: BCF 1F.5
0092: MOVLW 00
0093: BSF 03.6
0094: MOVWF 08
.................... setup_adc(ADC_CLOCK_DIV_2);
0095: BCF 03.5
0096: BCF 03.6
0097: BCF 1F.6
0098: BCF 1F.7
0099: BSF 03.5
009A: BCF 1F.7
009B: BCF 03.5
009C: BSF 1F.0
.................... setup_spi(SPI_SS_DISABLED);
009D: BCF 14.5
009E: BCF 20.5
009F: MOVF 20,W
00A0: BSF 03.5
00A1: MOVWF 07
00A2: BCF 03.5
00A3: BSF 20.4
00A4: MOVF 20,W
00A5: BSF 03.5
00A6: MOVWF 07
00A7: BCF 03.5
00A8: BCF 20.3
00A9: MOVF 20,W
00AA: BSF 03.5
00AB: MOVWF 07
00AC: MOVLW 01
00AD: BCF 03.5
00AE: MOVWF 14
00AF: MOVLW 00
00B0: BSF 03.5
00B1: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
00B2: MOVF 01,W
00B3: ANDLW C7
00B4: IORLW 08
00B5: MOVWF 01
.................... setup_timer_1(T1_DISABLED);
00B6: BCF 03.5
00B7: CLRF 10
.................... setup_timer_2(T2_DISABLED,0,1);
00B8: MOVLW 00
00B9: MOVWF 78
00BA: MOVWF 12
00BB: MOVLW 00
00BC: BSF 03.5
00BD: MOVWF 12
.................... setup_ccp1(CCP_OFF);
00BE: BCF 03.5
00BF: BSF 20.2
00C0: MOVF 20,W
00C1: BSF 03.5
00C2: MOVWF 07
00C3: BCF 03.5
00C4: CLRF 17
00C5: BSF 03.5
00C6: CLRF 1B
00C7: CLRF 1C
00C8: MOVLW 01
00C9: MOVWF 1D
.................... setup_comparator(NC_NC_NC_NC); // This device COMP currently not supported by the PICWizard
00CA: BCF 03.5
00CB: BSF 03.6
00CC: CLRF 07
00CD: CLRF 08
00CE: CLRF 09
.................... setup_oscillator(OSC_8MHZ);
00CF: MOVLW 71
00D0: BSF 03.5
00D1: BCF 03.6
00D2: MOVWF 0F
00D3: MOVF 0F,W
....................
....................
.................... printf("Simple Thermomether",);
00D4: MOVLW 04
00D5: BCF 03.5
00D6: BSF 03.6
00D7: MOVWF 0D
00D8: MOVLW 00
00D9: MOVWF 0F
00DA: BCF 03.6
00DB: CALL 01E
.................... printf("(c) Kaklik 2013\r\n");
00DC: MOVLW 0E
00DD: BSF 03.6
00DE: MOVWF 0D
00DF: MOVLW 00
00E0: MOVWF 0F
00E1: BCF 03.6
00E2: CALL 01E
.................... printf("www.mlab.cz\r\n");
00E3: MOVLW 17
00E4: BSF 03.6
00E5: MOVWF 0D
00E6: MOVLW 00
00E7: MOVWF 0F
00E8: BCF 03.6
00E9: CALL 01E
....................
....................
.................... while (TRUE)
.................... {
....................
.................... }
00EA: GOTO 0EA
....................
.................... }
00EB: SLEEP
Configuration Fuses:
Word 1: 2CF5 INTRC NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP NODEBUG
Word 2: 3FFF NOWRT BORV40