CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

PIC18F26K22 UNDER FLOW ERROR

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
rudy



Joined: 27 Apr 2008
Posts: 167

View user's profile Send private message Send e-mail MSN Messenger

PIC18F26K22 UNDER FLOW ERROR
PostPosted: Tue Jan 18, 2022 6:18 am     Reply with quote

Hi guys! This is too much for me, I need help.

I am developing a new code for my clock, using the 18F26k22 and an 8 bits LCD routine. Everything was just fine, until I added the external RB0 ISR, that’s receives an 1Hz clock pulse from RTC. At this point, the program starts to show strange behaviors, and I start the MPLAB SIM to check what is going wrong.

All code works fine, but when I set PC to the EXTERNAL ISR, the debugger shows the following error:

CORE-E0002: Stack under flow error occurred from instruction at 0x0000ac

Really don’t have any idea of what is going wrong!

This is my list!

Code:

---  C:\Program Files (x86)\PICC\devices\18F26K22.h  ---------------------------------------------
1:                 //////////// Standard Header file for the PIC18F26K22 device ////////////////
2:                 ///////////////////////////////////////////////////////////////////////////
3:                 ////        (C) Copyright 1996, 2014 Custom Computer Services          ////
4:                 //// This source code may only be used by licensed users of the CCS C  ////
5:                 //// compiler.  This source code may only be distributed to other      ////
6:                 //// licensed users of the CCS C compiler.  No other use, reproduction ////
7:                 //// or distribution is permitted without written permission.          ////
8:                 //// Derivative programs created using this software in object code    ////
9:                 //// form are not restricted in any way.                               ////
10:                ///////////////////////////////////////////////////////////////////////////
11:                #device PIC18F26K22
  0410    C044     MOVFF 0x44, 0x1
  0414    C043     MOVFF 0x43, 0
  0418    6643     TSTFSZ 0x43, ACCESS
  041A    2A01     INCF 0x1, F, ACCESS
  041C    0009     TBLRD*+
  041E    CFF5     MOVFF 0xff5, 0xfee
  0422    2E00     DECFSZ 0, F, ACCESS
  0424    D7FB     BRA 0x41c
  0426    2E01     DECFSZ 0x1, F, ACCESS
  0428    D7F9     BRA 0x41c
  042A    6AF8     CLRF 0xff8, ACCESS
  042C    EF8F     GOTO 0x51e
---  C:\Users\m-a-c\Documents\CLOCK\SOFTWARE\PIC18F26K22\CLOCK_N.c  ------------------------------
1:                 #include <18F26K22.h>
  0000    EFEA     GOTO 0x5d4
  0008    6E04     MOVWF 0x4, ACCESS
  000A    CFD8     MOVFF 0xfd8, 0x5
  000E    CFE0     MOVFF 0xfe0, 0x6
  0012    0100     MOVLB 0
  0014    CFE9     MOVFF 0xfe9, 0xc
  0018    CFEA     MOVFF 0xfea, 0x7
  001C    CFE1     MOVFF 0xfe1, 0x8
  0020    CFE2     MOVFF 0xfe2, 0x9
  0024    CFD9     MOVFF 0xfd9, 0xa
  0028    CFDA     MOVFF 0xfda, 0xb
  002C    CFF3     MOVFF 0xff3, 0x12
  0030    CFF4     MOVFF 0xff4, 0x13
  0034    CFFA     MOVFF 0xffa, 0x14
  0038    CFF5     MOVFF 0xff5, 0x15
  003C    CFF6     MOVFF 0xff6, 0x16
  0040    CFF7     MOVFF 0xff7, 0x17
  0044    C000     MOVFF 0, 0xe
  0048    C001     MOVFF 0x1, 0xf
  004C    C002     MOVFF 0x2, 0x10
  0050    C003     MOVFF 0x3, 0x11
  0054    A8F2     BTFSS 0xff2, 0x4, ACCESS
  0056    EF30     GOTO 0x60
  005A    B2F2     BTFSC 0xff2, 0x1, ACCESS
  005C    EF57     GOTO 0xae
  0060    C00E     MOVFF 0xe, 0
  0064    C00F     MOVFF 0xf, 0x1
  0068    C010     MOVFF 0x10, 0x2
  006C    C011     MOVFF 0x11, 0x3
  0070    C00C     MOVFF 0xc, 0xfe9
  0074    C007     MOVFF 0x7, 0xfea
  0078    8E07     BSF 0x7, 0x7, ACCESS
  007A    C008     MOVFF 0x8, 0xfe1
  007E    C009     MOVFF 0x9, 0xfe2
  0082    C00A     MOVFF 0xa, 0xfd9
  0086    C00B     MOVFF 0xb, 0xfda
  008A    C012     MOVFF 0x12, 0xff3
  008E    C013     MOVFF 0x13, 0xff4
  0092    C014     MOVFF 0x14, 0xffa
  0096    C015     MOVFF 0x15, 0xff5
  009A    C016     MOVFF 0x16, 0xff6
  009E    C017     MOVFF 0x17, 0xff7
  00A2    5004     MOVF 0x4, W, ACCESS
  00A4    C006     MOVFF 0x6, 0xfe0
  00A8    C005     MOVFF 0x5, 0xfd8
  00AC    0010     RETFIE 0
2:                 #fuses NOWDT, NOFCMEN, NOIESO, NOCPD, NOPROTECT, NOLVP, NODEBUG, PUT, BROWNOUT, NOMCLR
3:                 #use DELAY(INTERNAL=64MHz)
  00D8    6AEA     CLRF 0xfea, ACCESS
  00DA    0E2E     MOVLW 0x2e
  00DC    6EE9     MOVWF 0xfe9, ACCESS
  00DE    50EF     MOVF 0xfef, W, ACCESS
  00E0    E00E     BZ 0xfe
  00E2    0E14     MOVLW 0x14
  00E4    6E01     MOVWF 0x1, ACCESS
  00E6    6A00     CLRF 0, ACCESS
  00E8    2E00     DECFSZ 0, F, ACCESS
  00EA    D7FE     BRA 0xe8
  00EC    2E01     DECFSZ 0x1, F, ACCESS
  00EE    D7FB     BRA 0xe6
  00F0    0EBF     MOVLW 0xbf
  00F2    6E00     MOVWF 0, ACCESS
  00F4    2E00     DECFSZ 0, F, ACCESS
  00F6    D7FE     BRA 0xf4
  00F8    D000     BRA 0xfa
  00FA    2EEF     DECFSZ 0xfef, F, ACCESS
  00FC    D7F2     BRA 0xe2
  00FE    0012     RETURN 0
4:                 
5:                 #use FAST_IO(A)
6:                 //#use FAST_IO(B)
7:                 #use FAST_IO(C)
8:                 //#use FAST_IO(D)
9:                 #use FAST_IO(E)
10:               
11:                #byte PORTA=0xF80
12:                #byte PORTB=0xF81
13:                #byte PORTC=0xF82
14:                //#byte PORTD=0xF83
15:                #byte PORTE=0xF84
16:               
17:                #bit LCD_WR=PORTB.1   //LCR WRITE PIN     
18:                #bit LCD_RS=PORTB.2   //LCD REGISTER / COMMAND   
19:                #bit LCD_REST=PORTB.3 //LCD RESET PIN
20:                #bit LCD_CS=PORTB.4   //LCD CHIP SELECT PIN     
21:               
22:                //VARIÁVEIS DE SISTEMA
23:                int PAGE=0, CCD, AUX0, AUX1, AUX2;
24:                int FLAG0=0, FLAG1=0, FLAG2=0;
25:                long COLLOR;
26:               
27:                //VARIÁVEIS DE RELÓGIO
28:                int HORAS=0, MINUTOS=0, SEGUNDOS, DOW, DAY, MONTH, YEAR;
29:                int HV1=0XFF, HV2=0XFF, MV1=0XFF, MV2=0XFF;
30:               
31:                #bit TIKTAK=FLAG0.0 //FLAG PARA DESENHAR PONTOS DO RELÓGIO
32:                #bit CLK=FLAG0.1 //FLAG DE PONTOS DO RELÓGIO
33:               
34:                #bit LCK0=FLAG2.0 //LOCKS HLINE DRAWING CLOCK SCREEN
35:               
36:                //INCLUDES
37:                 #include<BITMAP.c>
38:                 #include<LCD_CMD.c>
39:                 #include<LCD_SCREENS.c>
40:               
41:                void main()
  05D4    6AF8     CLRF 0xff8, ACCESS
  05D6    9ED0     BCF 0xfd0, 0x7, ACCESS
  05D8    8E07     BSF 0x7, 0x7, ACCESS
  05DA    0E70     MOVLW 0x70
  05DC    6ED3     MOVWF 0xfd3, ACCESS
  05DE    8C9B     BSF 0xf9b, 0x6, ACCESS
  05E0    9E9B     BCF 0xf9b, 0x7, ACCESS
  05E2    6A19     CLRF 0x19, ACCESS
  05E4    6A1E     CLRF 0x1e, ACCESS
  05E6    6A1F     CLRF 0x1f, ACCESS
  05E8    6A20     CLRF 0x20, ACCESS
  05EA    6A23     CLRF 0x23, ACCESS
  05EC    6A24     CLRF 0x24, ACCESS
  05EE    682A     SETF 0x2a, ACCESS
  05F0    682B     SETF 0x2b, ACCESS
  05F2    682C     SETF 0x2c, ACCESS
  05F4    682D     SETF 0x2d, ACCESS
  05F6    010F     MOVLB 0xf
  05F8    6B38     CLRF 0x38, BANKED
  05FA    6B39     CLRF 0x39, BANKED
  05FC    6B3A     CLRF 0x3a, BANKED
  05FE    6B3B     CLRF 0x3b, BANKED
  0600    6B3C     CLRF 0x3c, BANKED
  0602    0101     MOVLB 0x1
  0604    6B88     CLRF 0x88, BANKED
  0606    6A77     CLRF 0xf77, ACCESS
  0608    6A78     CLRF 0xf78, ACCESS
  060A    6A79     CLRF 0xf79, ACCESS
42:                   {
43:                   PORT_B_PULLUPS(FALSE);
  060C    6A61     CLRF 0xf61, ACCESS
44:                      SETUP_ADC_PORTS(NO_ANALOGS);
  060E    50C1     MOVF 0xfc1, W, ACCESS
  0610    0BF0     ANDLW 0xf0
  0612    6EC1     MOVWF 0xfc1, ACCESS
  0614    0E00     MOVLW 0
  0616    010F     MOVLB 0xf
  0618    6F38     MOVWF 0x38, BANKED
  061A    6F3C     MOVWF 0x3c, BANKED
  061C    6F39     MOVWF 0x39, BANKED
  061E    6F3A     MOVWF 0x3a, BANKED
  0620    6F3B     MOVWF 0x3b, BANKED
45:                    SETUP_COMPARATOR(NC_NC_NC_NC);
  0622    6A77     CLRF 0xf77, ACCESS
  0624    0E04     MOVLW 0x4
  0626    6E78     MOVWF 0xf78, ACCESS
  0628    6E79     MOVWF 0xf79, ACCESS
46:                      SETUP_COUNTERS(RTCC_INTERNAL,RTCC_DIV_1);
  062A    90D1     BCF 0xfd1, 0, ACCESS
  062C    0E88     MOVLW 0x88
  062E    6ED5     MOVWF 0xfd5, ACCESS
47:                    SETUP_TIMER_1(T1_DISABLED|T1_DIV_BY_8);
  0630    0E30     MOVLW 0x30
  0632    6ECD     MOVWF 0xfcd, ACCESS
  0634    6ACC     CLRF 0xfcc, ACCESS
48:                    SETUP_TIMER_2(T2_DISABLED,0XFF,16);
  0636    0E78     MOVLW 0x78
  0638    6EBA     MOVWF 0xfba, ACCESS
  063A    0EFF     MOVLW 0xff
  063C    6EBB     MOVWF 0xfbb, ACCESS
49:                   SETUP_TIMER_3(T3_DISABLED);
  063E    6AB4     CLRF 0xfb4, ACCESS
  0640    6AB1     CLRF 0xfb1, ACCESS
50:                      SET_TRIS_A(0b11111111); 
  0642    6E92     MOVWF 0xf92, ACCESS
51:                      SET_TRIS_B(0b11100001);
  0644    0EE1     MOVLW 0xe1
  0646    6E93     MOVWF 0xf93, ACCESS
52:                      SET_TRIS_C(0b00000000);
  0648    0E00     MOVLW 0
  064A    6E94     MOVWF 0xf94, ACCESS
53:                //    SET_TRIS_D(0b11111111);
54:                      SET_TRIS_E(0b11111111);
  064C    8096     BSF 0xf96, 0, ACCESS
  064E    8296     BSF 0xf96, 0x1, ACCESS
  0650    8496     BSF 0xf96, 0x2, ACCESS
  0652    8696     BSF 0xf96, 0x3, ACCESS
55:                      EXT_INT_EDGE(L_TO_H);
  0654    8CF1     BSF 0xff1, 0x6, ACCESS
56:                      ENABLE_INTERRUPTS(INT_EXT);   //ENABLE RTC INTERRUPTS
  0656    88F2     BSF 0xff2, 0x4, ACCESS
57:                //    ENABLE_INTERRUPTS(INT_CCP1); //INABLE INFRARED INTERRUPTION
58:                   ENABLE_INTERRUPTS(GLOBAL); //ENABLE GLOBAL INTERRUPTS
  0658    0EC0     MOVLW 0xc0
  065A    12F2     IORWF 0xff2, F, ACCESS
59:                            
60:                      LCD_INIT();
  065C    0100     MOVLB 0
  065E    D55F     BRA 0x11e
61:                //  START_SCN();
62:                //  DELAY_MS(5000);
63:                     CCD=7;
  0660    0E07     MOVLW 0x7
  0662    6E1A     MOVWF 0x1a, ACCESS
64:                   LCD_FILL(0, 0, 480, 320); //CLEAR LCD
  0664    6A2F     CLRF 0x2f, ACCESS
  0666    6A2E     CLRF 0x2e, ACCESS
  0668    6A31     CLRF 0x31, ACCESS
  066A    6A30     CLRF 0x30, ACCESS
  066C    0E01     MOVLW 0x1
  066E    6E33     MOVWF 0x33, ACCESS
  0670    0EE0     MOVLW 0xe0
  0672    6E32     MOVWF 0x32, ACCESS
  0674    0E01     MOVLW 0x1
  0676    6E35     MOVWF 0x35, ACCESS
  0678    0E40     MOVLW 0x40
  067A    6E34     MOVWF 0x34, ACCESS
  067C    DE8D     RCALL 0x398
65:                loop:
66:                    while(1) //INICIALIZAÇÃO
67:                      {
68:                      if(CLK)CLOCK_SCN();
  067E    B21E     BTFSC 0x1e, 0x1, ACCESS
  0680    D780     BRA 0x582
  0682    D7FD     BRA 0x67e
69:                      }
70:                goto loop;
  0684    D7FC     BRA 0x67e
71:                   }
72:                #INT_EXT   //RTC INTERRUPTION SERVICE ROUTINE
73:                void RB0_ISR(void)
  0686    0003     SLEEP
74:                   {
75:                   SEGUNDOS++;
  00AE    2A25     INCF 0x25, F, ACCESS
76:                   if(SEGUNDOS==60)
  00B0    5025     MOVF 0x25, W, ACCESS
  00B2    083C     SUBLW 0x3c
  00B4    E104     BNZ 0xbe
77:                      {
78:                      SEGUNDOS=0;
  00B6    6A25     CLRF 0x25, ACCESS
79:                      MINUTOS++;
  00B8    2A24     INCF 0x24, F, ACCESS
80:                      LCK0=0;
  00BA    9020     BCF 0x20, 0, ACCESS
81:                      TIKTAK=0; //sincroniza pontos do relógio
  00BC    901E     BCF 0x1e, 0, ACCESS
82:                      }
83:                   if(MINUTOS==60)
  00BE    5024     MOVF 0x24, W, ACCESS
  00C0    083C     SUBLW 0x3c
  00C2    E102     BNZ 0xc8
84:                        {
85:                      MINUTOS=0;
  00C4    6A24     CLRF 0x24, ACCESS
86:                      HORAS++;
  00C6    2A23     INCF 0x23, F, ACCESS
87:                      }
88:                   if(HORAS==24)HORAS=0;
  00C8    5023     MOVF 0x23, W, ACCESS
  00CA    0818     SUBLW 0x18
  00CC    E101     BNZ 0xd0
  00CE    6A23     CLRF 0x23, ACCESS
89:                //   if(!HORAS&&!MINUTOS&&SEGUNDOS==5)RTC_GDT=1; //GET NEW DATE WHEN CLOCK IS SHOWED
90:                   CLK=1;   
  00D0    821E     BSF 0x1e, 0x1, ACCESS
  00D2    92F2     BCF 0xff2, 0x1, ACCESS
  00D4    EF30     GOTO 0x60
---  C:\Users\m-a-c\Documents\CLOCK\SOFTWARE\PIC18F46K22\LCD_CMD.c  ------------------------------
1:                 void COLLOR_SELECT() //SET LCD COLLOR
2:                    {
3:                    if(CCD==1)COLLOR=0XFFFF; //WHITE
  02CE    2C1A     DECFSZ 0x1a, W, ACCESS
  02D0    D002     BRA 0x2d6
  02D2    6822     SETF 0x22, ACCESS
  02D4    6821     SETF 0x21, ACCESS
4:                    if(CCD==2)COLLOR=0X001F; //BLUE
  02D6    501A     MOVF 0x1a, W, ACCESS
  02D8    0802     SUBLW 0x2
  02DA    E103     BNZ 0x2e2
  02DC    6A22     CLRF 0x22, ACCESS
  02DE    0E1F     MOVLW 0x1f
  02E0    6E21     MOVWF 0x21, ACCESS
5:                    if(CCD==3)COLLOR=0XF800; //RED
  02E2    501A     MOVF 0x1a, W, ACCESS
  02E4    0803     SUBLW 0x3
  02E6    E103     BNZ 0x2ee
  02E8    0EF8     MOVLW 0xf8
  02EA    6E22     MOVWF 0x22, ACCESS
  02EC    6A21     CLRF 0x21, ACCESS
6:                    if(CCD==4)COLLOR=0XFFE0; //YELLOW
  02EE    501A     MOVF 0x1a, W, ACCESS
  02F0    0804     SUBLW 0x4
  02F2    E103     BNZ 0x2fa
  02F4    6822     SETF 0x22, ACCESS
  02F6    0EE0     MOVLW 0xe0
  02F8    6E21     MOVWF 0x21, ACCESS
7:                    if(CCD==5)COLLOR=0X07E0; //GREEN
  02FA    501A     MOVF 0x1a, W, ACCESS
  02FC    0805     SUBLW 0x5
  02FE    E104     BNZ 0x308
  0300    0E07     MOVLW 0x7
  0302    6E22     MOVWF 0x22, ACCESS
  0304    0EE0     MOVLW 0xe0
  0306    6E21     MOVWF 0x21, ACCESS
8:                    if(CCD==6)COLLOR=0X07FF; //CYAN
  0308    501A     MOVF 0x1a, W, ACCESS
  030A    0806     SUBLW 0x6
  030C    E103     BNZ 0x314
  030E    0E07     MOVLW 0x7
  0310    6E22     MOVWF 0x22, ACCESS
  0312    6821     SETF 0x21, ACCESS
9:                    if(CCD==7)COLLOR=0X0000; //BLACK
  0314    501A     MOVF 0x1a, W, ACCESS
  0316    0807     SUBLW 0x7
  0318    E102     BNZ 0x31e
  031A    6A22     CLRF 0x22, ACCESS
  031C    6A21     CLRF 0x21, ACCESS
10:                   if(CCD==8)COLLOR=0XF81F; //MAGENTA
  031E    501A     MOVF 0x1a, W, ACCESS
  0320    0808     SUBLW 0x8
  0322    E104     BNZ 0x32c
  0324    0EF8     MOVLW 0xf8
  0326    6E22     MOVWF 0x22, ACCESS
  0328    0E1F     MOVLW 0x1f
  032A    6E21     MOVWF 0x21, ACCESS
11:                   if(CCD==9)COLLOR=0x7BEF; //DARKGREY
  032C    501A     MOVF 0x1a, W, ACCESS
  032E    0809     SUBLW 0x9
  0330    E104     BNZ 0x33a
  0332    0E7B     MOVLW 0x7b
  0334    6E22     MOVWF 0x22, ACCESS
  0336    0EEF     MOVLW 0xef
  0338    6E21     MOVWF 0x21, ACCESS
  033A    0012     RETURN 0
12:                   //NAVY=0x000F
13:                   //DARKGREEN=0x03E0
14:                   //DARKCYAN=0x03EF
15:                   //MAROON=0x7800
16:                   //PURPLE=0x780F
17:                   //OLIVE=0x7BE0
18:                   //LIGHTGREY=0xC618
19:                   //DARKGREY=0x7BEF
20:                   //BLUE=0x001F
21:                   //GREEN=0x07E0
22:                   //CYAN=0x07FF
23:                   //RED=0xF800
24:                   //MAGENTA=0xF81F
25:                   //YELLOW=0xFFE0
26:                   //WHITE=0xFFFF
27:                   //ORANGE=0xFD20
28:                   //GREENYELLOW=0xAFE5
29:                   //PINK=0xFC18
30:                   }
31:                void LCD_BUS(int C)
32:                   {
33:                    PORTC=C;
  0100    C053     MOVFF 0x53, 0xf82
34:                    LCD_WR=0;
  0104    9281     BCF 0xf81, 0x1, ACCESS
35:                    LCD_WR=1;
  0106    8281     BSF 0xf81, 0x1, ACCESS
  0108    0012     RETURN 0
36:                   }
37:                void LCD_COM(int VH) 
38:                   {
39:                   LCD_RS=0; 
  010A    9481     BCF 0xf81, 0x2, ACCESS
40:                     LCD_BUS(VH);
  010C    C050     MOVFF 0x50, 0x53
  0110    DFF7     RCALL 0x100
  0112    0012     RETURN 0
41:                   }
42:                void LCD_DATA(int VH)
43:                   {
44:                   LCD_RS=1;
  0114    8481     BSF 0xf81, 0x2, ACCESS
45:                     LCD_BUS(VH);
  0116    C052     MOVFF 0x52, 0x53
  011A    DFF2     RCALL 0x100
  011C    0012     RETURN 0
46:                   }
47:                void LCD_ADD(long x1, long y1, long x2, long y2)
48:                   {
49:                   LCD_COM(0X2A);
  033C    0E2A     MOVLW 0x2a
  033E    6E50     MOVWF 0x50, ACCESS
  0340    DEE4     RCALL 0x10a
50:                   LCD_DATA(x1>>8);
  0342    C049     MOVFF 0x49, 0x50
  0346    6A51     CLRF 0x51, ACCESS
  0348    C049     MOVFF 0x49, 0x52
  034C    DEE3     RCALL 0x114
51:                   LCD_DATA(x1);
  034E    C048     MOVFF 0x48, 0x52
  0352    DEE0     RCALL 0x114
52:                   LCD_DATA(x2>>8);
  0354    C04D     MOVFF 0x4d, 0x50
  0358    6A51     CLRF 0x51, ACCESS
  035A    C04D     MOVFF 0x4d, 0x52
  035E    DEDA     RCALL 0x114
53:                   LCD_DATA(x2);
  0360    C04C     MOVFF 0x4c, 0x52
  0364    DED7     RCALL 0x114
54:                   LCD_COM(0X2B);
  0366    0E2B     MOVLW 0x2b
  0368    6E50     MOVWF 0x50, ACCESS
  036A    DECF     RCALL 0x10a
55:                   LCD_DATA(y1>>8);
  036C    C04B     MOVFF 0x4b, 0x50
  0370    6A51     CLRF 0x51, ACCESS
  0372    C04B     MOVFF 0x4b, 0x52
  0376    DECE     RCALL 0x114
56:                   LCD_DATA(y1);
  0378    C04A     MOVFF 0x4a, 0x52
  037C    DECB     RCALL 0x114
57:                   LCD_DATA(y2>>8);
  037E    C04F     MOVFF 0x4f, 0x50
  0382    6A51     CLRF 0x51, ACCESS
  0384    C04F     MOVFF 0x4f, 0x52
  0388    DEC5     RCALL 0x114
58:                   LCD_DATA(y2);
  038A    C04E     MOVFF 0x4e, 0x52
  038E    DEC2     RCALL 0x114
59:                   LCD_COM(0X2C);               
  0390    0E2C     MOVLW 0x2c
  0392    6E50     MOVWF 0x50, ACCESS
  0394    DEBA     RCALL 0x10a
  0396    0012     RETURN 0
60:                   }
61:                void LCD_HLINE(long x, long y, long l)                   
62:                   {
63:                     long i, j;
64:                     COLLOR_SELECT();
65:                     LCD_COM(0X2C); //write_memory_start
66:                     LCD_RS=1;
67:                     LCD_CS=0;
68:                     l=l+x;
69:                     LCD_ADD(x, y, l, y);
70:                     j=l*2;
71:                     for(i=1; i<=j; i++)
72:                        {
73:                       LCD_DATA(COLLOR>>8);
74:                       LCD_DATA(COLLOR);
75:                        }
76:                     LCD_CS=1;   
77:                   }
78:                void LCD_VLINE(long x, long y, long l)       
79:                   {
80:                     long i, j;
81:                     COLLOR_SELECT();
82:                     LCD_COM(0X2C); //write_memory_start
83:                     LCD_RS=1;
84:                     LCD_CS=0;
85:                     l=l+y;
86:                     LCD_ADD(x, y, x, l);
87:                     j=l*2;
88:                     for(i=1; i<=j; i++)
89:                        {
90:                       LCD_DATA(COLLOR>>8);
91:                       LCD_DATA(COLLOR);
92:                        }
93:                     LCD_CS=1;   
94:                   }
95:                void LCD_FILL(long x, long y, long x1, long y1)                   
96:                   {
97:                     long i, m;
98:                     COLLOR_SELECT();
  0398    DF9A     RCALL 0x2ce
99:                     LCD_COM(0X2C); //write_memory_start
  039A    0E2C     MOVLW 0x2c
  039C    6E50     MOVWF 0x50, ACCESS
  039E    DEB5     RCALL 0x10a
100:                    LCD_RS=1;
  03A0    8481     BSF 0xf81, 0x2, ACCESS
101:                    LCD_CS=0;
  03A2    9881     BCF 0xf81, 0x4, ACCESS
102:                    LCD_ADD(x, y, x1, y1);
  03A4    C02F     MOVFF 0x2f, 0x49
  03A8    C02E     MOVFF 0x2e, 0x48
  03AC    C031     MOVFF 0x31, 0x4b
  03B0    C030     MOVFF 0x30, 0x4a
  03B4    C033     MOVFF 0x33, 0x4d
  03B8    C032     MOVFF 0x32, 0x4c
  03BC    C035     MOVFF 0x35, 0x4f
  03C0    C034     MOVFF 0x34, 0x4e
  03C4    DFBB     RCALL 0x33c
103:                    for(i=0; i<x1; i++)
  03C6    6A37     CLRF 0x37, ACCESS
  03C8    6A36     CLRF 0x36, ACCESS
  03CA    5037     MOVF 0x37, W, ACCESS
  03CC    5C33     SUBWF 0x33, W, ACCESS
  03CE    E31E     BNC 0x40c
  03D0    E103     BNZ 0x3d8
  03D2    5032     MOVF 0x32, W, ACCESS
  03D4    5C36     SUBWF 0x36, W, ACCESS
  03D6    E21A     BC 0x40c
104:                       {
105:                      for(m=0; m<y1; m++)
  03D8    6A39     CLRF 0x39, ACCESS
  03DA    6A38     CLRF 0x38, ACCESS
  03DC    5039     MOVF 0x39, W, ACCESS
  03DE    5C35     SUBWF 0x35, W, ACCESS
  03E0    E311     BNC 0x404
  03E2    E103     BNZ 0x3ea
  03E4    5034     MOVF 0x34, W, ACCESS
  03E6    5C38     SUBWF 0x38, W, ACCESS
  03E8    E20D     BC 0x404
106:                         {
107:                           LCD_DATA(COLLOR>>8);
  03EA    C022     MOVFF 0x22, 0x3a
  03EE    6A3B     CLRF 0x3b, ACCESS
  03F0    C022     MOVFF 0x22, 0x52
  03F4    DE8F     RCALL 0x114
108:                           LCD_DATA(COLLOR);
  03F6    C021     MOVFF 0x21, 0x52
  03FA    DE8C     RCALL 0x114
  03FC    2A38     INCF 0x38, F, ACCESS
  03FE    B4D8     BTFSC 0xfd8, 0x2, ACCESS
  0400    2A39     INCF 0x39, F, ACCESS
  0402    D7EC     BRA 0x3dc
109:                         }
  0404    2A36     INCF 0x36, F, ACCESS
  0406    B4D8     BTFSC 0xfd8, 0x2, ACCESS
  0408    2A37     INCF 0x37, F, ACCESS
  040A    D7DF     BRA 0x3ca
110:                      }   
111:                    LCD_CS=1;   
  040C    8881     BSF 0xf81, 0x4, ACCESS
  040E    0012     RETURN 0
112:                  }   
113:               void LCD_PX(long x, long y)   
114:                  {   
115:                    LCD_COM(0X2C); //write_memory_start
  0430    0E2C     MOVLW 0x2c
  0432    6E50     MOVWF 0x50, ACCESS
  0434    DE6A     RCALL 0x10a
116:                     LCD_RS=1;
  0436    8481     BSF 0xf81, 0x2, ACCESS
117:                    LCD_CS=0;
  0438    9881     BCF 0xf81, 0x4, ACCESS
118:                  LCD_ADD(x, y, x, y);
  043A    C045     MOVFF 0x45, 0x49
  043E    C044     MOVFF 0x44, 0x48
  0442    C047     MOVFF 0x47, 0x4b
  0446    C046     MOVFF 0x46, 0x4a
  044A    C045     MOVFF 0x45, 0x4d
  044E    C044     MOVFF 0x44, 0x4c
  0452    C047     MOVFF 0x47, 0x4f
  0456    C046     MOVFF 0x46, 0x4e
  045A    DF70     RCALL 0x33c
119:                   LCD_COM(0x2A); // Column address set
  045C    0E2A     MOVLW 0x2a
  045E    6E50     MOVWF 0x50, ACCESS
  0460    DE54     RCALL 0x10a
120:                   LCD_DATA(x>>8);
  0462    C045     MOVFF 0x45, 0x48
  0466    6A49     CLRF 0x49, ACCESS
  0468    C045     MOVFF 0x45, 0x52
  046C    DE53     RCALL 0x114
121:                   LCD_DATA(x);
  046E    C044     MOVFF 0x44, 0x52
  0472    DE50     RCALL 0x114
122:                   LCD_COM(0X2B); // Row address set
  0474    0E2B     MOVLW 0x2b
  0476    6E50     MOVWF 0x50, ACCESS
  0478    DE48     RCALL 0x10a
123:                   LCD_DATA(y>>8);
  047A    C047     MOVFF 0x47, 0x48
  047E    6A49     CLRF 0x49, ACCESS
  0480    C047     MOVFF 0x47, 0x52
  0484    DE47     RCALL 0x114
124:                   LCD_DATA(y);
  0486    C046     MOVFF 0x46, 0x52
  048A    DE44     RCALL 0x114
125:                   LCD_COM(0X2C); // Write to RAM
  048C    0E2C     MOVLW 0x2c
  048E    6E50     MOVWF 0x50, ACCESS
  0490    DE3C     RCALL 0x10a
126:                   LCD_DATA(COLLOR>>8);
  0492    C022     MOVFF 0x22, 0x48
  0496    6A49     CLRF 0x49, ACCESS
  0498    C022     MOVFF 0x22, 0x52
  049C    DE3B     RCALL 0x114
127:                   LCD_DATA(COLLOR);
  049E    C021     MOVFF 0x21, 0x52
  04A2    DE38     RCALL 0x114
128:                   LCD_CS=1;
  04A4    8881     BSF 0xf81, 0x4, ACCESS
  04A6    EFB3     GOTO 0x566
129:                    }
130:               void LCD_DRAW(rom int *btm, long x, long y, long w, long h)
131:                  {
132:                  int i, k, _byte, _w;
133:                  long _x, _y, _z;
134:                  COLLOR_SELECT();
  04AA    DF11     RCALL 0x2ce
135:                  _z=0;
  04AC    6A41     CLRF 0x41, ACCESS
  04AE    6A40     CLRF 0x40, ACCESS
136:                  for(_y=0; _y<h; _y++)
  04B0    6A3F     CLRF 0x3f, ACCESS
  04B2    6A3E     CLRF 0x3e, ACCESS
  04B4    503F     MOVF 0x3f, W, ACCESS
  04B6    5C37     SUBWF 0x37, W, ACCESS
  04B8    E362     BNC 0x57e
  04BA    E103     BNZ 0x4c2
  04BC    5036     MOVF 0x36, W, ACCESS
  04BE    5C3E     SUBWF 0x3e, W, ACCESS
  04C0    E25E     BC 0x57e
137:                     {
138:                     _x=x;
  04C2    C031     MOVFF 0x31, 0x3d
  04C6    C030     MOVFF 0x30, 0x3c
139:                     for(_w=0; _w<(w+7)/8; _w++)   
  04CA    6A3B     CLRF 0x3b, ACCESS
  04CC    0E07     MOVLW 0x7
  04CE    2434     ADDWF 0x34, W, ACCESS
  04D0    6E42     MOVWF 0x42, ACCESS
  04D2    0E00     MOVLW 0
  04D4    2035     ADDWFC 0x35, W, ACCESS
  04D6    6E43     MOVWF 0x43, ACCESS
  04D8    3043     RRCF 0x43, W, ACCESS
  04DA    6E03     MOVWF 0x3, ACCESS
  04DC    3042     RRCF 0x42, W, ACCESS
  04DE    6E02     MOVWF 0x2, ACCESS
  04E0    3203     RRCF 0x3, F, ACCESS
  04E2    3202     RRCF 0x2, F, ACCESS
  04E4    3203     RRCF 0x3, F, ACCESS
  04E6    3202     RRCF 0x2, F, ACCESS
  04E8    0E1F     MOVLW 0x1f
  04EA    1603     ANDWF 0x3, F, ACCESS
  04EC    C002     MOVFF 0x2, 0x1
  04F0    5203     MOVF 0x3, F, ACCESS
  04F2    E103     BNZ 0x4fa
  04F4    5001     MOVF 0x1, W, ACCESS
  04F6    5C3B     SUBWF 0x3b, W, ACCESS
  04F8    E23E     BC 0x576
140:                        {
141:                        _byte=btm[_z];
  04FA    5040     MOVF 0x40, W, ACCESS
  04FC    242E     ADDWF 0x2e, W, ACCESS
  04FE    6E01     MOVWF 0x1, ACCESS
  0500    5041     MOVF 0x41, W, ACCESS
  0502    202F     ADDWFC 0x2f, W, ACCESS
  0504    6E03     MOVWF 0x3, ACCESS
  0506    5001     MOVF 0x1, W, ACCESS
  0508    6EF6     MOVWF 0xff6, ACCESS
  050A    C003     MOVFF 0x3, 0xff7
  050E    6AF8     CLRF 0xff8, ACCESS
  0510    6AEA     CLRF 0xfea, ACCESS
  0512    0E42     MOVLW 0x42
  0514    6EE9     MOVWF 0xfe9, ACCESS
  0516    6A44     CLRF 0x44, ACCESS
  0518    0E01     MOVLW 0x1
  051A    6E43     MOVWF 0x43, ACCESS
  051C    D779     BRA 0x410
  051E    C042     MOVFF 0x42, 0x3a
142:                        _z++;
  0522    2A40     INCF 0x40, F, ACCESS
  0524    B4D8     BTFSC 0xfd8, 0x2, ACCESS
  0526    2A41     INCF 0x41, F, ACCESS
143:                        k=7;
  0528    0E07     MOVLW 0x7
  052A    6E39     MOVWF 0x39, ACCESS
144:                        for(i=0; i<8; i++)
  052C    6A38     CLRF 0x38, ACCESS
  052E    5038     MOVF 0x38, W, ACCESS
  0530    0807     SUBLW 0x7
  0532    E31F     BNC 0x572
145:                           {
146:                           if(bit_test(_byte,k))
  0534    C03A     MOVFF 0x3a, 0
  0538    5039     MOVF 0x39, W, ACCESS
  053A    6E01     MOVWF 0x1, ACCESS
  053C    E004     BZ 0x546
  053E    90D8     BCF 0xfd8, 0, ACCESS
  0540    3200     RRCF 0, F, ACCESS
  0542    2E01     DECFSZ 0x1, F, ACCESS
  0544    D7FC     BRA 0x53e
  0546    A000     BTFSS 0, 0, ACCESS
  0548    D00E     BRA 0x566
147:                              {
148:                              LCD_PX(_x, y+_y);
  054A    503E     MOVF 0x3e, W, ACCESS
  054C    2432     ADDWF 0x32, W, ACCESS
  054E    6E42     MOVWF 0x42, ACCESS
  0550    503F     MOVF 0x3f, W, ACCESS
  0552    2033     ADDWFC 0x33, W, ACCESS
  0554    6E43     MOVWF 0x43, ACCESS
  0556    C03D     MOVFF 0x3d, 0x45
  055A    C03C     MOVFF 0x3c, 0x44
  055E    6E47     MOVWF 0x47, ACCESS
  0560    C042     MOVFF 0x42, 0x46
  0564    D765     BRA 0x430
149:                              }
150:                           k--;
  0566    0639     DECF 0x39, F, ACCESS
151:                           _x++;
  0568    2A3C     INCF 0x3c, F, ACCESS
  056A    B4D8     BTFSC 0xfd8, 0x2, ACCESS
  056C    2A3D     INCF 0x3d, F, ACCESS
  056E    2A38     INCF 0x38, F, ACCESS
  0570    D7DE     BRA 0x52e
152:                           }
  0572    2A3B     INCF 0x3b, F, ACCESS
  0574    D7AB     BRA 0x4cc
153:                        }
  0576    2A3E     INCF 0x3e, F, ACCESS
  0578    B4D8     BTFSC 0xfd8, 0x2, ACCESS
  057A    2A3F     INCF 0x3f, F, ACCESS
  057C    D79B     BRA 0x4b4
154:                     }
  057E    EFD6     GOTO 0x5ac
155:                  }
156:               void LCD_PLT(int SWT, long x, long Y)
157:                  {
158:                  switch(SWT)
159:                     {
160:                     //BIG FONT - 0 a 9
161:                        case 0: //ZERO BIG FONT      
162:                        LCD_DRAW(ZERO, x, y, 69, 120);
163:                      break;
164:                     case 1: //UM BIG FONT
165:                        LCD_DRAW(UM, x, y, 69, 120);
166:                      break;
167:                       case 2:   //DOIS BIG FONT
168:                        LCD_DRAW(DOIS, x, y, 69, 120);
169:                     break;
170:                     case 3:   //TRES BIG FONT
171:                        LCD_DRAW(TRES, x, y, 69, 120);
172:                     break;      
173:                       case 4:   //QUATRO BIG FONT
174:                          LCD_DRAW(QUATRO, x, y, 69, 120);
175:                      break;
176:                       case 5:   //CINCO BIG FONT
177:                          LCD_DRAW(CINCO, x, y, 69, 120);
178:                      break;
179:                       case 6:   //SEIS BIG FONT
180:                          LCD_DRAW(SEIS, x, y, 69, 120);
181:                      break;
182:                       case 7:   //SETE BIG FONT
183:                          LCD_DRAW(SETE, x, y, 69, 120);
184:                      break;
185:                       case 8:   //SETE BIG FONT
186:                          LCD_DRAW(OITO, x, y, 69, 120);
187:                      break;
188:                       case 9:   //SETE BIG FONT
189:                          LCD_DRAW(NOVE, x, y, 69, 120);
190:                      break;
191:                      //SMALL FONT 1      
192:                       }
193:                  }   
194:               void LCD_INIT()
195:                  {
196:                  LCD_REST=1;
  011E    8681     BSF 0xf81, 0x3, ACCESS
197:                  delay_ms(5);
  0120    0E05     MOVLW 0x5
  0122    6E2E     MOVWF 0x2e, ACCESS
  0124    DFD9     RCALL 0xd8
198:                  LCD_REST=0;
  0126    9681     BCF 0xf81, 0x3, ACCESS
199:                  delay_ms(15);
  0128    0E0F     MOVLW 0xf
  012A    6E2E     MOVWF 0x2e, ACCESS
  012C    DFD5     RCALL 0xd8
200:                  LCD_REST=1;
  012E    8681     BSF 0xf81, 0x3, ACCESS
201:                  delay_ms(15);
  0130    0E0F     MOVLW 0xf
  0132    6E2E     MOVWF 0x2e, ACCESS
  0134    DFD1     RCALL 0xd8
202:                  LCD_CS=1;
  0136    8881     BSF 0xf81, 0x4, ACCESS
203:                  LCD_WR=1;
  0138    8281     BSF 0xf81, 0x1, ACCESS
204:                  LCD_CS=0;
  013A    9881     BCF 0xf81, 0x4, ACCESS
205:                     
206:                  LCD_COM(0XF7);
  013C    0EF7     MOVLW 0xf7
  013E    6E50     MOVWF 0x50, ACCESS
  0140    DFE4     RCALL 0x10a
207:                  LCD_DATA(0XA9);
  0142    0EA9     MOVLW 0xa9
  0144    6E52     MOVWF 0x52, ACCESS
  0146    DFE6     RCALL 0x114
208:                  LCD_DATA(0X51);
  0148    0E51     MOVLW 0x51
  014A    6E52     MOVWF 0x52, ACCESS
  014C    DFE3     RCALL 0x114
209:                  LCD_DATA(0X2C);
  014E    0E2C     MOVLW 0x2c
  0150    6E52     MOVWF 0x52, ACCESS
  0152    DFE0     RCALL 0x114
210:                  LCD_DATA(0X82);
  0154    0E82     MOVLW 0x82
  0156    6E52     MOVWF 0x52, ACCESS
  0158    DFDD     RCALL 0x114
211:               
212:                  LCD_COM(0XC0);
  015A    0EC0     MOVLW 0xc0
  015C    6E50     MOVWF 0x50, ACCESS
  015E    DFD5     RCALL 0x10a
213:                  LCD_DATA(0X11);
  0160    0E11     MOVLW 0x11
  0162    6E52     MOVWF 0x52, ACCESS
  0164    DFD7     RCALL 0x114
214:                  LCD_DATA(0X09);
  0166    0E09     MOVLW 0x9
  0168    6E52     MOVWF 0x52, ACCESS
  016A    DFD4     RCALL 0x114
215:                  LCD_COM(0XC1);
  016C    0EC1     MOVLW 0xc1
  016E    6E50     MOVWF 0x50, ACCESS
  0170    DFCC     RCALL 0x10a
216:                  LCD_DATA(0X41);
  0172    0E41     MOVLW 0x41
  0174    6E52     MOVWF 0x52, ACCESS
  0176    DFCE     RCALL 0x114
217:                  LCD_COM(0XC5);
  0178    0EC5     MOVLW 0xc5
  017A    6E50     MOVWF 0x50, ACCESS
  017C    DFC6     RCALL 0x10a
218:                  LCD_DATA(0X00);
  017E    6A52     CLRF 0x52, ACCESS
  0180    DFC9     RCALL 0x114
219:                  LCD_DATA(0X0A);
  0182    0E0A     MOVLW 0xa
  0184    6E52     MOVWF 0x52, ACCESS
  0186    DFC6     RCALL 0x114
220:                  LCD_DATA(0X80);
  0188    0E80     MOVLW 0x80
  018A    6E52     MOVWF 0x52, ACCESS
  018C    DFC3     RCALL 0x114
221:                  LCD_COM(0XB1);
  018E    0EB1     MOVLW 0xb1
  0190    6E50     MOVWF 0x50, ACCESS
  0192    DFBB     RCALL 0x10a
222:                  LCD_DATA(0XA0);
  0194    0EA0     MOVLW 0xa0
  0196    6E52     MOVWF 0x52, ACCESS
  0198    DFBD     RCALL 0x114
223:                  LCD_DATA(0X11);
  019A    0E11     MOVLW 0x11
  019C    6E52     MOVWF 0x52, ACCESS
  019E    DFBA     RCALL 0x114
224:                  LCD_COM(0XB4);
  01A0    0EB4     MOVLW 0xb4
  01A2    6E50     MOVWF 0x50, ACCESS
  01A4    DFB2     RCALL 0x10a
225:                  LCD_DATA(0X02);
  01A6    0E02     MOVLW 0x2
  01A8    6E52     MOVWF 0x52, ACCESS
  01AA    DFB4     RCALL 0x114
226:                  LCD_COM(0XB6);
  01AC    0EB6     MOVLW 0xb6
  01AE    6E50     MOVWF 0x50, ACCESS
  01B0    DFAC     RCALL 0x10a
227:                  LCD_DATA(0X02);
  01B2    0E02     MOVLW 0x2
  01B4    6E52     MOVWF 0x52, ACCESS
  01B6    DFAE     RCALL 0x114
228:                  LCD_DATA(0X22);
  01B8    0E22     MOVLW 0x22
  01BA    6E52     MOVWF 0x52, ACCESS
  01BC    DFAB     RCALL 0x114
229:                  LCD_COM(0XB7);
  01BE    0EB7     MOVLW 0xb7
  01C0    6E50     MOVWF 0x50, ACCESS
  01C2    DFA3     RCALL 0x10a
230:                  LCD_DATA(0Xc6);
  01C4    0EC6     MOVLW 0xc6
  01C6    6E52     MOVWF 0x52, ACCESS
  01C8    DFA5     RCALL 0x114
231:                  LCD_COM(0XBE);
  01CA    0EBE     MOVLW 0xbe
  01CC    6E50     MOVWF 0x50, ACCESS
  01CE    DF9D     RCALL 0x10a
232:                  LCD_DATA(0X00);
  01D0    6A52     CLRF 0x52, ACCESS
  01D2    DFA0     RCALL 0x114
233:                  LCD_DATA(0X04);
  01D4    0E04     MOVLW 0x4
  01D6    6E52     MOVWF 0x52, ACCESS
  01D8    DF9D     RCALL 0x114
234:                  LCD_COM(0XE9);
  01DA    0EE9     MOVLW 0xe9
  01DC    6E50     MOVWF 0x50, ACCESS
  01DE    DF95     RCALL 0x10a
235:                  LCD_DATA(0X00);
  01E0    6A52     CLRF 0x52, ACCESS
  01E2    DF98     RCALL 0x114
236:                  LCD_COM(0X36);
  01E4    0E36     MOVLW 0x36
  01E6    6E50     MOVWF 0x50, ACCESS
  01E8    DF90     RCALL 0x10a
237:                  LCD_DATA(0XB8); //HORIZONTAL
  01EA    0EB8     MOVLW 0xb8
  01EC    6E52     MOVWF 0x52, ACCESS
  01EE    DF92     RCALL 0x114
238:                  //  LCD_DATA(0X08); //VERTICAL
239:                  
240:                  //SET DBI
241:                  LCD_COM(0X3A);
  01F0    0E3A     MOVLW 0x3a
  01F2    6E50     MOVWF 0x50, ACCESS
  01F4    DF8A     RCALL 0x10a
242:                  LCD_DATA(0X55);
  01F6    0E55     MOVLW 0x55
  01F8    6E52     MOVWF 0x52, ACCESS
  01FA    DF8C     RCALL 0x114
243:                  
244:                  LCD_COM(0XE0);
  01FC    0EE0     MOVLW 0xe0
  01FE    6E50     MOVWF 0x50, ACCESS
  0200    DF84     RCALL 0x10a
245:                  LCD_DATA(0X00);
  0202    6A52     CLRF 0x52, ACCESS
  0204    DF87     RCALL 0x114
246:                  LCD_DATA(0X07);
  0206    0E07     MOVLW 0x7
  0208    6E52     MOVWF 0x52, ACCESS
  020A    DF84     RCALL 0x114
247:                  LCD_DATA(0X10);
  020C    0E10     MOVLW 0x10
  020E    6E52     MOVWF 0x52, ACCESS
  0210    DF81     RCALL 0x114
248:                  LCD_DATA(0X09);
  0212    0E09     MOVLW 0x9
  0214    6E52     MOVWF 0x52, ACCESS
  0216    DF7E     RCALL 0x114
249:                  LCD_DATA(0X17);
  0218    0E17     MOVLW 0x17
  021A    6E52     MOVWF 0x52, ACCESS
  021C    DF7B     RCALL 0x114
250:                  LCD_DATA(0X0B);
  021E    0E0B     MOVLW 0xb
  0220    6E52     MOVWF 0x52, ACCESS
  0222    DF78     RCALL 0x114
251:                  LCD_DATA(0X41);
  0224    0E41     MOVLW 0x41
  0226    6E52     MOVWF 0x52, ACCESS
  0228    DF75     RCALL 0x114
252:                  LCD_DATA(0X89);
  022A    0E89     MOVLW 0x89
  022C    6E52     MOVWF 0x52, ACCESS
  022E    DF72     RCALL 0x114
253:                  LCD_DATA(0X4B);
  0230    0E4B     MOVLW 0x4b
  0232    6E52     MOVWF 0x52, ACCESS
  0234    DF6F     RCALL 0x114
254:                  LCD_DATA(0X0A);
  0236    0E0A     MOVLW 0xa
  0238    6E52     MOVWF 0x52, ACCESS
  023A    DF6C     RCALL 0x114
255:                  LCD_DATA(0X0C);
  023C    0E0C     MOVLW 0xc
  023E    6E52     MOVWF 0x52, ACCESS
  0240    DF69     RCALL 0x114
256:                  LCD_DATA(0X0E);
  0242    0E0E     MOVLW 0xe
  0244    6E52     MOVWF 0x52, ACCESS
  0246    DF66     RCALL 0x114
257:                  LCD_DATA(0X18);
  0248    0E18     MOVLW 0x18
  024A    6E52     MOVWF 0x52, ACCESS
  024C    DF63     RCALL 0x114
258:                  LCD_DATA(0X1B);
  024E    0E1B     MOVLW 0x1b
  0250    6E52     MOVWF 0x52, ACCESS
  0252    DF60     RCALL 0x114
259:                  LCD_DATA(0X0F);
  0254    0E0F     MOVLW 0xf
  0256    6E52     MOVWF 0x52, ACCESS
  0258    DF5D     RCALL 0x114
260:                  LCD_COM(0XE1);
  025A    0EE1     MOVLW 0xe1
  025C    6E50     MOVWF 0x50, ACCESS
  025E    DF55     RCALL 0x10a
261:                  LCD_DATA(0X00);
  0260    6A52     CLRF 0x52, ACCESS
  0262    DF58     RCALL 0x114
262:                  LCD_DATA(0X17);
  0264    0E17     MOVLW 0x17
  0266    6E52     MOVWF 0x52, ACCESS
  0268    DF55     RCALL 0x114
263:                  LCD_DATA(0X1A);
  026A    0E1A     MOVLW 0x1a
  026C    6E52     MOVWF 0x52, ACCESS
  026E    DF52     RCALL 0x114
264:                  LCD_DATA(0X04);
  0270    0E04     MOVLW 0x4
  0272    6E52     MOVWF 0x52, ACCESS
  0274    DF4F     RCALL 0x114
265:                  LCD_DATA(0X0E);
  0276    0E0E     MOVLW 0xe
  0278    6E52     MOVWF 0x52, ACCESS
  027A    DF4C     RCALL 0x114
266:                  LCD_DATA(0X06);
  027C    0E06     MOVLW 0x6
  027E    6E52     MOVWF 0x52, ACCESS
  0280    DF49     RCALL 0x114
267:                  LCD_DATA(0X2F);
  0282    0E2F     MOVLW 0x2f
  0284    6E52     MOVWF 0x52, ACCESS
  0286    DF46     RCALL 0x114
268:                  LCD_DATA(0X45);
  0288    0E45     MOVLW 0x45
  028A    6E52     MOVWF 0x52, ACCESS
  028C    DF43     RCALL 0x114
269:                  LCD_DATA(0X43);
  028E    0E43     MOVLW 0x43
  0290    6E52     MOVWF 0x52, ACCESS
  0292    DF40     RCALL 0x114
270:                  LCD_DATA(0X02);
  0294    0E02     MOVLW 0x2
  0296    6E52     MOVWF 0x52, ACCESS
  0298    DF3D     RCALL 0x114
271:                  LCD_DATA(0X0A);
  029A    0E0A     MOVLW 0xa
  029C    6E52     MOVWF 0x52, ACCESS
  029E    DF3A     RCALL 0x114
272:                  LCD_DATA(0X09);
  02A0    0E09     MOVLW 0x9
  02A2    6E52     MOVWF 0x52, ACCESS
  02A4    DF37     RCALL 0x114
273:                  LCD_DATA(0X32);
  02A6    0E32     MOVLW 0x32
  02A8    6E52     MOVWF 0x52, ACCESS
  02AA    DF34     RCALL 0x114
274:                  LCD_DATA(0X36);
  02AC    0E36     MOVLW 0x36
  02AE    6E52     MOVWF 0x52, ACCESS
  02B0    DF31     RCALL 0x114
275:                  LCD_DATA(0X0F);
  02B2    0E0F     MOVLW 0xf
  02B4    6E52     MOVWF 0x52, ACCESS
  02B6    DF2E     RCALL 0x114
276:                  
277:                  LCD_COM(0X11);
  02B8    0E11     MOVLW 0x11
  02BA    6E50     MOVWF 0x50, ACCESS
  02BC    DF26     RCALL 0x10a
278:                  delay_ms(120);
  02BE    0E78     MOVLW 0x78
  02C0    6E2E     MOVWF 0x2e, ACCESS
  02C2    DF0A     RCALL 0xd8
279:                  LCD_COM(0X29);
  02C4    0E29     MOVLW 0x29
  02C6    6E50     MOVWF 0x50, ACCESS
  02C8    DF20     RCALL 0x10a
  02CA    EF30     GOTO 0x660
---  C:\Users\m-a-c\Documents\CLOCK\SOFTWARE\PIC18F46K22\LCD_SCREENS.c  --------------------------
1:                 void START_SCN()
2:                    {
3:                       CCD=9;
4:                    LCD_FILL(0, 0, 480, 320);
5:                    CCD=1; //WHITE
6:                    LCD_FILL(0, 0, 60, 325);
7:                    CCD=4; //YELLOW
8:                    LCD_FILL(61, 0, 121, 320);
9:                    CCD=6; //CYAN
10:                   LCD_FILL(122, 0, 182, 320);
11:                   CCD=5; //GREEN
12:                   LCD_FILL(183, 0, 243, 320);
13:                   CCD=8; //MAGENTA
14:                   LCD_FILL(244, 0, 304, 320);
15:                   CCD=3; //RED
16:                   LCD_FILL(305, 0, 365, 320);
17:                   CCD=2; //BLUE
18:                   LCD_FILL(366, 0, 426, 320);
19:                   }
20:                void CLOCK_SCN()
21:                   {
22:                //   if(!LCK0)
23:                //      {
24:                //      CCD=1;
25:                //      AUX0=HORAS/10;
26:                //      AUX1=HORAS-AUX0*10;
27:                //      LCD_PLT(AUX0, 65, 18); //HORAS PRIMEIRO DÍGITO
28:                //      LCD_PLT(AUX1, 150, 18); //HORAS SEGUNDO DÍGITO
29:                //      AUX0=MINUTOS/10;
30:                //      AUX1=MINUTOS-AUX0*10;
31:                //      LCD_PLT(AUX0, 260, 18); //MINUTOS PRIMEIRO DÍGITO
32:                //      LCD_PLT(AUX1, 345, 18); //MINUTOS SEGUNDO DÍGITO
33:                //      LCD_HLINE(0, 159, 480);
34:                //      LCD_HLINE(0, 160, 480);
35:                //      LCD_HLINE(0, 161, 480);
36:                //      }
37:                   if(TIKTAK)
  0582    A01E     BTFSS 0x1e, 0, ACCESS
  0584    D014     BRA 0x5ae
38:                      {
39:                      CCD=1;
  0586    0E01     MOVLW 0x1
  0588    6E1A     MOVWF 0x1a, ACCESS
40:                      LCD_DRAW(CLK_DP, 229, 49, 21, 58); //ACENDE PONTOS DO RELOGIO
  058A    0ED5     MOVLW 0xd5
  058C    6E2F     MOVWF 0x2f, ACCESS
  058E    0E22     MOVLW 0x22
  0590    6E2E     MOVWF 0x2e, ACCESS
  0592    6A31     CLRF 0x31, ACCESS
  0594    0EE5     MOVLW 0xe5
  0596    6E30     MOVWF 0x30, ACCESS
  0598    6A33     CLRF 0x33, ACCESS
  059A    0E31     MOVLW 0x31
  059C    6E32     MOVWF 0x32, ACCESS
  059E    6A35     CLRF 0x35, ACCESS
  05A0    0E15     MOVLW 0x15
  05A2    6E34     MOVWF 0x34, ACCESS
  05A4    6A37     CLRF 0x37, ACCESS
  05A6    0E3A     MOVLW 0x3a
  05A8    6E36     MOVWF 0x36, ACCESS
  05AA    D77F     BRA 0x4aa
41:                      }
  05AC    D00F     BRA 0x5cc
42:                   else
43:                      {
44:                      CCD=7;   //BLACK
  05AE    0E07     MOVLW 0x7
  05B0    6E1A     MOVWF 0x1a, ACCESS
45:                      LCD_Fill(229, 49, 21, 58); //APAGA PONTOS DO RELOGIO
  05B2    6A2F     CLRF 0x2f, ACCESS
  05B4    0EE5     MOVLW 0xe5
  05B6    6E2E     MOVWF 0x2e, ACCESS
  05B8    6A31     CLRF 0x31, ACCESS
  05BA    0E31     MOVLW 0x31
  05BC    6E30     MOVWF 0x30, ACCESS
  05BE    6A33     CLRF 0x33, ACCESS
  05C0    0E15     MOVLW 0x15
  05C2    6E32     MOVWF 0x32, ACCESS
  05C4    6A35     CLRF 0x35, ACCESS
  05C6    0E3A     MOVLW 0x3a
  05C8    6E34     MOVWF 0x34, ACCESS
  05CA    DEE6     RCALL 0x398
46:                      }
47:                   TIKTAK=!TIKTAK;
  05CC    701E     BTG 0x1e, 0, ACCESS
48:                //   LCK0=1;   
49:                   CLK=0;
  05CE    921E     BCF 0x1e, 0x1, ACCESS
  05D0    EF41     GOTO 0x682


And this is my program so far:

Code:

#include <18F46K22.h>
#fuses NOWDT, NOFCMEN, NOIESO, NOCPD, NOPROTECT, NOLVP, NODEBUG, PUT, BROWNOUT, NOMCLR
#use DELAY(INTERNAL=64MHz)

#use FAST_IO(A)
//#use FAST_IO(B)
#use FAST_IO(C)
//#use FAST_IO(D)
#use FAST_IO(E)

#byte PORTA=0xF80
#byte PORTB=0xF81
#byte PORTC=0xF82
//#byte PORTD=0xF83
#byte PORTE=0xF84

#bit LCD_WR=PORTB.1   //LCR WRITE PIN     
#bit LCD_RS=PORTB.2   //LCD REGISTER / COMMAND   
#bit LCD_REST=PORTB.3 //LCD RESET PIN
#bit LCD_CS=PORTB.4   //LCD CHIP SELECT PIN     

//VARIÁVEIS DE SISTEMA
int PAGE=0, CCD, AUX0, AUX1, AUX2;
int FLAG0=0, FLAG1=0, FLAG2=0;
long COLLOR;

//VARIÁVEIS DE RELÓGIO
int HORAS=0, MINUTOS=0, SEGUNDOS, DOW, DAY, MONTH, YEAR;
int HV1=0XFF, HV2=0XFF, MV1=0XFF, MV2=0XFF;

#bit TIKTAK=FLAG0.0 //FLAG PARA DESENHAR PONTOS DO RELÓGIO
#bit CLK=FLAG0.1 //FLAG DE PONTOS DO RELÓGIO

#bit LCK0=FLAG2.0 //LOCKS HLINE DRAWING CLOCK SCREEN

//INCLUDES
 #include<BITMAP.c>
 #include<LCD_CMD.c>
 #include<LCD_SCREENS.c>

void main()
   {
   PORT_B_PULLUPS(FALSE);
      SETUP_ADC_PORTS(NO_ANALOGS);
    SETUP_COMPARATOR(NC_NC_NC_NC);
      SETUP_COUNTERS(RTCC_INTERNAL,RTCC_DIV_1);
    SETUP_TIMER_1(T1_DISABLED|T1_DIV_BY_8);
    SETUP_TIMER_2(T2_DISABLED,0XFF,16);
   SETUP_TIMER_3(T3_DISABLED);
      SET_TRIS_A(0b11111111); 
      SET_TRIS_B(0b11100001);
      SET_TRIS_C(0b00000000);
//    SET_TRIS_D(0b11111111);
      SET_TRIS_E(0b11111111);
      EXT_INT_EDGE(L_TO_H);
      ENABLE_INTERRUPTS(INT_EXT);   //ENABLE RTC INTERRUPTS
//    ENABLE_INTERRUPTS(INT_CCP1); //INABLE INFRARED INTERRUPTION
   ENABLE_INTERRUPTS(GLOBAL); //ENABLE GLOBAL INTERRUPTS
            
      LCD_INIT();
//  START_SCN();
//  DELAY_MS(5000);
     CCD=7;
   LCD_FILL(0, 0, 480, 320); //CLEAR LCD
loop:
    while(1) //INICIALIZAÇÃO
      {
      if(CLK)CLOCK_SCN();
      }
goto loop;
   }
#INT_EXT   //RTC INTERRUPTION SERVICE ROUTINE
void RB0_ISR(void)
   {
   SEGUNDOS++;
   if(SEGUNDOS==60)
      {
      SEGUNDOS=0;
      MINUTOS++;
      LCK0=0;
      TIKTAK=0; //sincroniza pontos do relógio
      }
   if(MINUTOS==60)
        {
      MINUTOS=0;
      HORAS++;
      }
   if(HORAS==24)HORAS=0;
//   if(!HORAS&&!MINUTOS&&SEGUNDOS==5)RTC_GDT=1; //GET NEW DATE WHEN CLOCK IS SHOWED
   CLK=1;   
   }


Don't have any idea how to solve this, and never get this error before. May be something is wrong in the EXT ISR configuration, I don't know, please help me!

Regards.
temtronic



Joined: 01 Jul 2010
Posts: 9081
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Jan 18, 2022 7:04 am     Reply with quote

you enable an interrupt for the CCP but I don't see the 'handler', the 'INT_CCP{}..... code If you don't have the ISR code, eventually the PIC program will crash.

you say you use an RTC, which one ? also why update sec,min,hrs in the ISR why not just read the RTC.Also most(all ?) require a 'setup' or 'initialization' .
rudy



Joined: 27 Apr 2008
Posts: 167

View user's profile Send private message Send e-mail MSN Messenger

PostPosted: Tue Jan 18, 2022 7:07 am     Reply with quote

Hum.....

The CCP interrupt is commented, it is not enable.

I just GET the time at the beginning, them I update the clock by 1Hz output.

Please don't pay attention to this now ok? Just want to know this strange behavior.

Regards;
rudy



Joined: 27 Apr 2008
Posts: 167

View user's profile Send private message Send e-mail MSN Messenger

PostPosted: Tue Jan 18, 2022 7:42 am     Reply with quote

Somehow! it is solved!

Really don't know what happened!
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jan 18, 2022 9:00 am     Reply with quote

Quote:
Somehow! it is solved!

What if the problem reoccurs when the product is in production and
is in the hands of customers ? What if it's an intermittent problem ?

A proper engineer would not want this or allow it. A proper engineer
would want to find out why the problem occurred, and fix it.
rudy



Joined: 27 Apr 2008
Posts: 167

View user's profile Send private message Send e-mail MSN Messenger

PostPosted: Tue Jan 18, 2022 9:05 am     Reply with quote

You are right!

But this is only for me, my use, not to sell to anybody!

The problem were in the include file, the device I choose was 18F46K22, and not the 18F26K22. When I changed to correct device, the problem vanishes.

My mistake as usual.....

Sorry, and thank all of you!

Regards.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group