  | 
	  | 
		 
	 
	
		| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		
			rudy
 
 
  Joined: 27 Apr 2008 Posts: 168
  
			
			 
			 
			 
			
			
			
			 
			
			
  
		  | 
		
			
				| PIC18F26K22 UNDER FLOW ERROR | 
			 
			
				 Posted: Tue Jan 18, 2022 6:18 am     | 
				     | 
			 
			
				
  | 
			 
			
				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: 9589 Location: Greensville,Ontario 
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Tue Jan 18, 2022 7:04 am     | 
				     | 
			 
			
				
  | 
			 
			
				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: 168
  
			
			 
			 
			 
			
			
			
			 
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Tue Jan 18, 2022 7:07 am     | 
				     | 
			 
			
				
  | 
			 
			
				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: 168
  
			
			 
			 
			 
			
			
			
			 
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Tue Jan 18, 2022 7:42 am     | 
				     | 
			 
			
				
  | 
			 
			
				Somehow! it is solved!
 
 
Really don't know what happened! | 
			 
		  | 
	 
	
		  | 
	 
	
		
			PCM programmer
 
 
  Joined: 06 Sep 2003 Posts: 21708
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Tue Jan 18, 2022 9:00 am     | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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: 168
  
			
			 
			 
			 
			
			
			
			 
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Tue Jan 18, 2022 9:05 am     | 
				     | 
			 
			
				
  | 
			 
			
				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. | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
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
  
		 |