TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jeremylf en 30 de Noviembre de 2011, 07:28:05

Título: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 30 de Noviembre de 2011, 07:28:05
He estado peleando con este PIC horas para hacerlo función que me lleno de alegría por haberlo conseguido  :mrgreen: Les cuento:

El PIC que tengo es un PIC12LF1822, cuando mi padre lo pidio, hace como un año atras, ya no habia en stock en digikey el PIC12F1822. Bueno, primero, me quite un peso de encima al saber que el susodicho PIC era en formato DIP8; pues pensé que era SOIC y me daba flojera tener que hacerle una PCB para poder ponerlo en el protoboard, soldar, etc. Luego, no me gustaba mucho la idea de que fuera LF, ya saben...

Entonces, manos a la obra, el PIC al protoboard, vss y vdd con su 104, un led para test (blink) y conectado directamente el pickit2. Ya me habia asegurado que mi programador (el pickit2) podia programar este PIC (en su version LF no se olviden =D); que, porcierto, solo lo soporta con su propio programa (Pickit 2 Programmer.exe o como quieran llamarle), ya que el MPALB dice que no lo soporta (mas info: AQUI (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en027813))

Luego, con mi CCS v4.112 creo mi programa muy basico (blink ya saben) con su datasheet siempre a la mano. Configurando fusibles y demas... Compilo, todo bien, el pickit2 lo reconoce, programo, ok. Pero no funciona  :D He pasado mas de 5 horas (toda la madrugada) busncaod en google, el foro de CCS, el foro de Microchip, bajando .hex, .asm y compilandolos y leyendo y fumando y NADA! Intento cambiar el programador (pues pensé que tal vez por ahí había alguna falla) al ICD2 que también tengo, pero que para que el ICD2 lo programe se necesita un circuito externo... Posteriormente, reviso conexión y aparentemente todo esta bien... Ya alfinal de todo el bendito problema fue que el PUTO cable que le daba vss (GND, tierra, masa) al PIC estaba defectuoso.. ARGGG!!!

Solucione esto y compilo y todo y: "OHH!! el LED prendio!!!. Pero que pasa? Yo puse que haga toggle cada 100ms... PORQUE NO PARPADEAS BENDITO LED!!!"  :mrgreen: Pues, verán, ese problema ya es del compilador CCS; si, es un bug (Quien lo diría?). Entonces, como tenia otra versión mas actual instalada (la v4.124), compile ahí y, hasta ahora, todo OK!

Así que, sin aburrirlos mas, dejo todo el proyecto. Quise en un principio simular en el proteus pero en su versión 7.8 SP2 (muy actual) no lo soporta.

Por si se les paso algo:
PIC: 12LF1822 @ 32Mhz: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en544839
Compilador: CCS v4.124
Programador: Pickit 2 (Con su propio software programador, pues desde el MPLAB no se puede)

Codigo:
Código: [Seleccionar]
#INCLUDE <12LF1822.h>

#FUSES INTRC_IO               
#FUSES NOWDT                   
#FUSES PUT                     
#FUSES NOMCLR                   
#FUSES PROTECT               
#FUSES NOCPD                 
#FUSES NOBROWNOUT                 
#FUSES NOCLKOUT                 
#FUSES NOIESO                   
#FUSES NOFCMEN                 
#FUSES NOWRT                   
#FUSES PLL_SW             
#FUSES STVREN               
#FUSES BORV25                 
#FUSES NODEBUG               
#FUSES NOLVP               

#USE Delay (Clock = 32 000 000)

#USE FAST_IO(A)

#DEFINE PIN_TEST  PIN_A2

void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_dac(DAC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(T0_internal);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);

   set_tris_a(0b001000);
   output_a(0);
   
   while (true)
   {
      output_toggle(PIN_TEST);
      delay_ms(100);
   }
}

El esquema no es nada del otro mundo: El PIC mismo conectado a vss y vdd con su 104. En RA2 va una R de 220ohm conectada al anodo del LED y pues el catodo a vdd (3.3V eso si ah! suministrado amablemente de mi Pickit2  :mrgreen:). Eso es todo.

Espero no olvidarme de nada más. Ahora si, a dormir  :P
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: micro_cadaver en 30 de Noviembre de 2011, 08:31:15
Hola Jeremy, chevere ver que sigues en los micros, solo una duda, LF significa que funciona a 3.3v? o exactamente a que refiere las siglas? es que me pedi unos samples del 18F4550 pero ya no habia y le chunte al pic18LF4550 y cuando queria ver de que trataba me mandaba el mismo datasheet de la serie F. Ilustrame maestro!  :-/
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 30 de Noviembre de 2011, 15:41:22
Asi es, no puedes trabajar a 5V como comunmente se hace: aique ser mas cauteloso.
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: micro_cadaver en 30 de Noviembre de 2011, 16:38:05
Asi es, no puedes trabajar a 5V como comunmente se hace: aique ser mas cauteloso.

noooooooooooooooooooooooooooo  :shock:

menos mal son samples  :o
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 30 de Noviembre de 2011, 17:17:34
Hahah, si menos mal =D

Bueno, yo sigo probando este PIC. Esta vez con su ESUART:

Código: [Seleccionar]
#INCLUDE <12LF1822.h>

#FUSES INTRC_IO               
#FUSES NOWDT                   
#FUSES PUT                     
#FUSES NOMCLR                   
#FUSES PROTECT               
#FUSES NOCPD                 
#FUSES NOBROWNOUT                 
#FUSES NOCLKOUT                 
#FUSES NOIESO                   
#FUSES NOFCMEN                 
#FUSES NOWRT                   
#FUSES PLL_SW             
#FUSES STVREN               
#FUSES BORV25                 
#FUSES NODEBUG               
#FUSES NOLVP               

#USE Delay (Clock = 32 000 000)
#USE RS232 (Baud = 115200, UART1)

#USE FAST_IO(A)

#BYTE APFCON = 0x11D
#BIT TXCKSEL = APFCON.2
#BIT RXDTSEL = APFCON.7

#DEFINE PIN_TEST  PIN_A2

int1 LLegoDato;
int8 Dato;

void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_dac(DAC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(T0_internal);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);

   TXCKSEL = 1;   // Cambia el hardware TX del eusart del RA0 al RA4.
   RXDTSEL = 1;   // Cambia el hardware RX del eusart del RA1 al RA5.
   
   set_tris_a(0b101000);
   output_a(0);
   getc();  // Para limpiar el buffer rx.
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   
   while (true)
   {
      if (LlegoDato == true)
      {
         printf("%c", Dato);
         LlegoDato = false;
      }
   }
}

#INT_RDA
void RX_Int (void)
{   
   Dato = getc();
   LlegoDato = true;
   
}

Al max232 tambien lo alimento con 3.3v (proporcionado por el pickit2) para que en mi entrada rx del pic tenga ese voltaje tambien.

TX -> RA4
RX -> RA5
Estos pines los he configurado de su estado default (RA0 (TX) y RA1 (RX)) a travez del registro APFCON.

Saludos!
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: micro_cadaver en 30 de Noviembre de 2011, 19:33:00
Asi es, no puedes trabajar a 5V como comunmente se hace: aique ser mas cauteloso.

noooooooooooooooooooooooooooo  :shock:

menos mal son samples  :o

y dime esos LF soportan tensiones de 5V como entrada en los pines de lectura digital? si tienes la referencia me podrias alcanzar el link? gracias!
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: KALLITOS en 30 de Noviembre de 2011, 20:33:30
Aguanten... tengo pic18LF4620 y el datasheet dice:

PIC18F2525/2620(1), PIC18F4525/4620(1),
PIC18F2525/2620T(2), PIC18F4525/4620T(2);
VDD range 4.2V to 5.5V
PIC18LF2525/2620(1), PIC18LF4525/4620(1),
PIC18LF2525/2620T(2), PIC18LF4525/4620T(2);
VDD range 2.0V to 5.5V

Para los pics de jeremylf:

PIC12F1822(1), PIC16F1823(1), PIC12F1822T(2),
PIC16F1823T(2);
VDD range 1.8V to 5.5V
PIC12LF1822(1), PIC16LF1823(1), PIC12LF1822T(2),
PIC16LF1823T(2);
VDD range 1.8V to 3.6V

Y para micro_cadaver

PIC18F2455/2550(1), PIC18F4455/4550(1),
PIC18F2455/2550T(2), PIC18F4455/4550T(2);
VDD range 4.2V to 5.5V
PIC18LF2455/2550(1), PIC18LF4455/4550(1),
PIC18LF2455/2550T(2), PIC18LF4455/4550T(2);
VDD range 2.0V to 5.5V


Asi que a mirar el datasheet
saludos
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: micro_cadaver en 01 de Diciembre de 2011, 01:10:49
Y para micro_cadaver

PIC18F2455/2550(1), PIC18F4455/4550(1),
PIC18F2455/2550T(2), PIC18F4455/4550T(2);
VDD range 4.2V to 5.5V
PIC18LF2455/2550(1), PIC18LF4455/4550(1),
PIC18LF2455/2550T(2), PIC18LF4455/4550T(2);
VDD range 2.0V to 5.5V

Asi que a mirar el datasheet
saludos

Mire el datashhet y encontre en la página 358 - figura 28-2 una grafica que indica que si uso el pic 18LF4550 a 48MHz, debo usar 5V de alimentacion. Bueno eso quiere decir que el chip lo podre usar con 5V de manera normal.
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 01 de Diciembre de 2011, 02:13:10
Ah mira tu! No sabia eso, gracias.

Al menos, en el PIC12LF1822 es como te mencioné: vdd 3.3v y en sus pines lo mismo. Aqui se ve mejor:
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=36893.0;attach=17267)
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 01 de Diciembre de 2011, 03:29:58
Bueno y ahora a lo que queria llegar, usar su DAC (Digital to Analog Converter):

Código: [Seleccionar]

#INCLUDE <12LF1822.h>

#FUSES INTRC_IO              
#FUSES NOWDT                    
#FUSES PUT                    
#FUSES NOMCLR                  
#FUSES PROTECT                
#FUSES NOCPD                  
#FUSES NOBROWNOUT                
#FUSES NOCLKOUT                
#FUSES NOIESO                    
#FUSES NOFCMEN                
#FUSES NOWRT                  
#FUSES PLL_SW              
#FUSES STVREN                
#FUSES BORV25                
#FUSES NODEBUG              
#FUSES NOLVP                

#USE Delay (Clock = 32 000 000)
#USE RS232 (Baud = 115200, UART1)

#USE FAST_IO(A)

#BYTE APFCON = 0x11D
#BIT TXCKSEL = APFCON.2
#BIT RXDTSEL = APFCON.7

#DEFINE PIN_TEST  PIN_A2

int1 LLegoDato, subiendo;
int8 Dato, i;
int16 Tiempo_us;

#ZERO_RAM
void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   //setup_dac(DAC_OFF);
   setup_dac(DAC_VSS_VDD | DAC_OUTPUT);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(T0_internal);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);

   TXCKSEL = 1;   // Cambia el hardware TX del eusart del RA0 al RA4.
   RXDTSEL = 1;   // Cambia el hardware RX del eusart del RA1 al RA5.
  
   set_tris_a(0b101000);
   output_a(0);
   getc();  // Para limpiar el buffer rx.
  
   subiendo = true;
   Tiempo_us = 107;
  
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
  
   while (true)
   {      
      dac_write(i);
      delay_us(Tiempo_us);
      
      if (Subiendo == true)
      {
         i++;
         if (i == 31)
         {
            Subiendo = false;
         }
      }
      else
      {
         i--;
         if (i == 0)
         {
            Subiendo = true;
         }
      }
   }
}

#INT_RDA
void RX_Int (void)
{  
   Dato = getc();
  
   if (Dato == '+') Tiempo_us++;
   else if (Dato == '-') Tiempo_us--;
        
   output_toggle(PIN_TEST);
   printf("%Lu ", Tiempo_us);
}

Imagen (Onda triangular):
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=36893.0;attach=17269)
VOLTS/DIV: 5V
TIME/DIV:5ms

Este PIC tiene una sola salida para el DAC (por el pin RA0, por eso mutiplexe el eusart), siendo este de 5bits de resolucion (0->31).

Funcionamiento del programa: El PIC empieza emitiendo la señal triangular a una frecuencia de 100hz. A travez del puerto serie, al escribir el simbolo "+" o "-" (sin las comillas), aumentamos o disminuimos, respectivamente, el periodo de esta onda.
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: micro_cadaver en 01 de Diciembre de 2011, 09:17:11
no manyo, esa señal triangular la genera el pic?
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 01 de Diciembre de 2011, 14:35:43
Asi es, tiene DAC ese PIC.
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: samshiel_pic en 01 de Diciembre de 2011, 19:31:53
tienes que probar el:

Citar
mTouch™ Sensing oscillator module:
- Up to 4 input channels
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 01 de Diciembre de 2011, 19:49:06
tienes que probar el:

Citar
mTouch™ Sensing oscillator module:
- Up to 4 input channels
Si ya lo hice, solo que todo en protoboard...
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 01 de Diciembre de 2011, 20:10:22
Bueno ahi va con el mTouch.


Mi dedo debe chocar con el pin RA2 para que detecte... Pero bueno, será por el protoboard. Ya en su momento hare las pruebas con su PCB correspondiente  :P

Código: [Seleccionar]
#INCLUDE <12LF1822.h>

#FUSES INTRC_IO              
#FUSES NOWDT                    
#FUSES PUT                    
#FUSES NOMCLR                  
#FUSES PROTECT                
#FUSES NOCPD                  
#FUSES NOBROWNOUT                
#FUSES NOCLKOUT                
#FUSES NOIESO                    
#FUSES NOFCMEN                
#FUSES NOWRT                  
#FUSES PLL_SW              
#FUSES STVREN                
#FUSES BORV25                
#FUSES NODEBUG              
#FUSES NOLVP                

#USE DELAY (CLOCK = 32 000 000)

#USE TOUCHPAD (PIN_A2 = 'A')

#USE FAST_IO(A)

#DEFINE PIN_TEST  PIN_A4

char Touch_tecla;

#ZERO_RAM
void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_dac(DAC_OFF);
   //setup_dac(DAC_VSS_VDD | DAC_OUTPUT);
   setup_spi(SPI_SS_DISABLED);
   //setup_timer_0(T0_internal);
   //setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);
  
   set_tris_a(0b001100);
   output_a(0);
  
  TOUCHPAD_STATE(1);            //calibrates, then enters normal state
  
   enable_interrupts(GLOBAL);
  
   while (true)
   {      
      if (touchpad_hit() == true)
      {
         Touch_tecla = TOUCHPAD_GETC();   //will wait until a pin is detected
        
         if (Touch_tecla == 'A')
            output_toggle(PIN_TEST);
      }
   }
}

Saludos!
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: samshiel_pic en 01 de Diciembre de 2011, 20:49:52
Jejeje!  :D te me adelantaste!!! :P muy bueno tu trabajo con el pequeñin eso es sacarle todo el jugo a un pic. Yo tambien tengo ese pic pero aun no le encontre funcion , solo lo use para un pequeño panel tactil.
De nuevo felicitaciones!!!! ;-)
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 02 de Diciembre de 2011, 16:48:20
Haha, muchas gracias samshiel_pic  :P
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: electronic182 en 02 de Diciembre de 2011, 23:00:14
hola jeremy interesante tu proyecto , justamente estoy tratando de  hacer un interruptor tactil para un trabajo, pero no c x donde empezar , y si no fuera mucha molestia podrias poner el programa en asm..

gracias de antemano
Título: Re: Pequeño pero poderoso: PIC12F/LF1822
Publicado por: jeremylf en 02 de Diciembre de 2011, 23:33:05
ajj enserio?  :mrgreen:

Bueno, de asm lo unico que tengo es esto:
Código: [Seleccionar]
CCS PCM C Compiler, Version 4.124, 15004               02-Dic-11 21:31

               Filename: C:\Jeremy\Probando_PIC12LF1822_CCSv4_124\Prob.lst

               ROM used: 255 words (12%)
                         Largest free fragment is 1792
               RAM used: 19 (15%) at main() level
                         34 (27%) worst case
               Stack:    2 worst case (0 in main + 2 for interrupts)

*
0000:  MOVLP  00
0001:  GOTO   08D
0002:  NOP
*
0004:  CLRF   03
0005:  CLRF   0A
0006:  MOVLB  00
0007:  MOVF   20,W
0008:  MOVWF  24
0009:  MOVF   21,W
000A:  MOVWF  25
000B:  MOVF   22,W
000C:  MOVWF  26
000D:  MOVF   23,W
000E:  MOVWF  27
000F:  BTFSS  0B.5
0010:  GOTO   013
0011:  BTFSC  0B.2
0012:  GOTO   023
0013:  MOVF   24,W
0014:  MOVWF  20
0015:  MOVF   25,W
0016:  MOVWF  21
0017:  MOVF   26,W
0018:  MOVWF  22
0019:  MOVF   27,W
001A:  MOVWF  23
001B:  RETFIE
....................  
.................... #INCLUDE <12LF1822.h>
.................... //////// Standard Header file for the PIC12LF1822 device ////////////////
*
008A:  BCF    0B.2
008B:  MOVLP  00
008C:  GOTO   013
.................... #device PIC12LF1822
.................... #list
....................  
....................  
.................... #FUSES INTRC_IO                
.................... #FUSES NOWDT                    
.................... #FUSES PUT                      
.................... #FUSES NOMCLR                    
.................... #FUSES PROTECT                
.................... #FUSES NOCPD                  
.................... #FUSES NOBROWNOUT                  
.................... #FUSES NOCLKOUT                  
.................... #FUSES NOIESO                    
.................... #FUSES NOFCMEN                  
.................... #FUSES NOWRT                    
.................... #FUSES PLL_SW              
.................... #FUSES STVREN                
.................... #FUSES BORV25                  
.................... #FUSES NODEBUG                
.................... #FUSES NOLVP                
....................  
.................... #USE DELAY (CLOCK = 32 000 000)
....................  
.................... #USE TOUCHPAD (PIN_A2 = 'A')
....................  
.................... #USE FAST_IO(A)
....................  
.................... #DEFINE PIN_TEST  PIN_A4
....................  
.................... char Touch_tecla;
....................  
.................... #ZERO_RAM
.................... void Main (void)
.................... {
*
008D:  MOVLW  5E
008E:  MOVWF  20
008F:  MOVLW  21
0090:  MOVWF  04
0091:  MOVLW  00
0092:  MOVWF  05
0093:  CLRF   00
0094:  INCF   04,F
0095:  DECFSZ 20,F
0096:  GOTO   093
0097:  MOVLW  20
0098:  MOVWF  20
0099:  MOVLW  A0
009A:  MOVWF  04
009B:  MOVLW  00
009C:  MOVWF  05
009D:  CLRF   00
009E:  INCF   04,F
009F:  DECFSZ 20,F
00A0:  GOTO   09D
00A1:  CLRF   20
00A2:  CLRF   05
00A3:  CLRF   04
00A4:  MOVLW  1F
00A5:  ANDWF  03,F
00A6:  MOVLW  F0
00A7:  MOVLB  01
00A8:  MOVWF  19
00A9:  MOVLW  03
00AA:  MOVLB  00
00AB:  MOVWF  29
00AC:  CLRF   28
00AD:  MOVLB  01
00AE:  MOVF   15,W
00AF:  ANDLW  C0
00B0:  IORLW  07
00B1:  MOVWF  15
00B2:  MOVLW  C5
00B3:  MOVLB  00
00B4:  MOVWF  18
00B5:  MOVLW  81
00B6:  MOVWF  19
00B7:  MOVLW  8D
00B8:  MOVWF  1E
00B9:  MOVLW  02
00BA:  MOVWF  1F
00BB:  BSF    0B.5
00BC:  MOVLB  03
00BD:  CLRF   0C
00BE:  MOVLB  02
00BF:  CLRF   12
00C0:  CLRF   11
....................    setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);
00C1:  MOVLW  F0
00C2:  MOVLB  01
00C3:  MOVWF  19
....................  
....................    setup_adc_ports(NO_ANALOGS|VSS_VDD);  
00C4:  BCF    1E.0
00C5:  BCF    1E.1
00C6:  MOVLW  00
00C7:  MOVLB  03
00C8:  MOVWF  0C
00C9:  MOVWF  0E
....................    setup_adc(ADC_OFF);  
00CA:  MOVLB  01
00CB:  BCF    1D.0
....................    setup_dac(DAC_OFF);  
00CC:  MOVLB  02
00CD:  CLRF   18
....................    //setup_dac(DAC_VSS_VDD | DAC_OUTPUT);
....................    setup_spi(SPI_SS_DISABLED);
00CE:  BCF    1D.5
00CF:  BCF    1D.6
00D0:  MOVLB  04
00D1:  BCF    15.5
00D2:  MOVLW  01
00D3:  MOVWF  15
00D4:  MOVLW  00
00D5:  MOVWF  14
....................    //setup_timer_0(T0_internal);  
....................    //setup_timer_1(T1_DISABLED);  
....................    setup_timer_2(T2_DISABLED,0,1);  
00D6:  MOVLB  00
00D7:  MOVWF  21
00D8:  MOVWF  1C
00D9:  MOVLW  00
00DA:  MOVWF  1B
....................    setup_ccp1(CCP_OFF);  
00DB:  MOVLB  05
00DC:  CLRF   13
00DD:  CLRF   14
00DE:  CLRF   15
00DF:  BCF    1E.0
00E0:  BCF    1E.1
....................    setup_comparator(NC_NC);  
00E1:  MOVLB  02
00E2:  CLRF   12
00E3:  CLRF   11
....................    
....................    set_tris_a(0b001100);
00E4:  MOVLW  0C
00E5:  MOVLB  01
00E6:  MOVWF  0C
....................    output_a(0);
00E7:  MOVLB  02
00E8:  CLRF   0C
....................    
....................   TOUCHPAD_STATE(1);            //calibrates, then enters normal state
00E9:  MOVLW  02
00EA:  MOVLB  00
00EB:  MOVWF  29
....................    
....................    enable_interrupts(GLOBAL);
00EC:  MOVLW  C0
00ED:  IORWF  0B,F
....................    
....................    while (true)
....................    {      
....................       if (touchpad_hit() == true)
00EE:  MOVF   28,W
00EF:  BTFSC  03.2
00F0:  GOTO   0FE
....................       {
....................          Touch_tecla = TOUCHPAD_GETC();   //will wait until a pin is detected
00F1:  MOVF   28,W
00F2:  BTFSC  03.2
00F3:  GOTO   0F1
00F4:  CLRF   28
00F5:  MOVWF  30
....................          
....................          if (Touch_tecla == 'A')
00F6:  MOVF   30,W
00F7:  SUBLW  41
00F8:  BTFSS  03.2
00F9:  GOTO   0FE
....................             output_toggle(PIN_TEST);
00FA:  MOVLW  10
00FB:  MOVLB  02
00FC:  XORWF  0C,F
00FD:  MOVLB  00
....................       }
....................    }
00FE:  GOTO   0EE
.................... }
00FF:  SLEEP

Yo te recomiendo que trabajes en C, pero bueno. Exitos!