Autor Tema: PIC16F1707 Ejemplos básicos  (Leído 18487 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
PIC16F1707 Ejemplos básicos
« en: 29 de Octubre de 2015, 17:51:23 »
 :) Que tal amigos hace unos días me compre unos pics por una buena oferta y llego la hora de probarlos, me llamo la atención las capacidades que tiene es de los últimos 16F que saco microchip y esta rondando por los 1.4usd cada uno, lo consulte en digikey. Bueno en la imagen anexa tenemos sus principales características. Abro este hilo para poder ir colgando códigos ejemplo que nos puedan servir a la comunidad y también para que me ayuden a corregir si es que tengo errores. Así mismo si alguien tiene ya ejemplos con este micro no dude en compartirlos.

Saludos
« Última modificación: 02 de Noviembre de 2015, 02:13:31 por Pinolillo16 »

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
PIC16F1707 Ejemplos básicos
« Respuesta #1 en: 29 de Octubre de 2015, 18:05:53 »
Algo de lo que mas me gusto son los 8 canales touch que tiene y que corre a 8MPIS  :) para ser un 16F lo considero muy bueno, dentro del data sheet encontré que tiene 8 bancos de memoria, lo cual para mi era completamente nuevo ya que siempre he trabajado con micros que tienen máximo 4, cabe mencionar que regularmente trabajo en versiones del MPLAB 8.xx porque me agradan mas, para poder manejar este micro es necesario el MPLABX donde encontré esta instrucción:

MOVLB La cual según lo entendí, mueve una literal al BSR que es el registro de selección de banco. Para poder configurarlo.

Otro registro que considere importante es el OSCCON donde configure el Oscilador interno. De acuerdo al la hoja de datos tenemos:

- Oscilador interno de precisión de hasta 16Mhz con un PLL de 4x entonces la lógica dice que podemos llevarlo a 64Mhz?

Esa es mi duda, yo lo deje así. En cuanto pueda haré la prueba en un osciloscopio para conocer la frecuencia real. Bien el primer código es:
Código: ASM
  1. #INCLUDE "P16F1707.INC"
  2.  
  3. ; CONFIG1
  4. ; __config 0xF9A4
  5.  __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOREN_OFF & _CLKOUTEN_OFF
  6. ; CONFIG2
  7. ; __config 0xDF7F
  8.  __CONFIG _CONFIG2, _WRT_OFF & _PPS1WAY_ON & _ZCDDIS_OFF & _PLLEN_ON & _STVREN_ON & _BORV_LO & _LPBOR_OFF & _LVP_OFF
  9.  
  10.  
  11.     CBLOCK  0X020
  12.     RET
  13.     RET2
  14.     ENDC
  15.  
  16.  
  17.     ORG     0X00
  18.     GOTO    CONFIGURA_PIC
  19.     ORG     0X04
  20.     RETFIE
  21.  CONFIGURA_PIC
  22.     MOVLB   0X01; MOVEMOS UN VALOR AL BSR PARA SABER EN QUE BANCO ESTAMOS
  23.     MOVLW   B'11111011'
  24.     MOVWF   OSCCON
  25.     MOVLB   0X00
  26.     CLRF    PORTA
  27.     CLRF    PORTB
  28.     CLRF    PORTC
  29.     MOVLB   0X02
  30.     CLRF    LATA
  31.     CLRF    LATB
  32.     CLRF    LATC
  33.     MOVLB   0X03
  34.     CLRF    ANSELA
  35.     CLRF    ANSELB
  36.     CLRF    ANSELC
  37.     MOVLB   0X01
  38.     CLRF    TRISA
  39.     CLRF    TRISB
  40.     CLRF    TRISC
  41.     MOVLB   0X00
  42.    
  43.  PRINCIPAL
  44.     MOVLW   0XFF
  45.     MOVWF   PORTB
  46.     CALL    RETARDO
  47.     CLRF    PORTB
  48.     CALL    RETARDO
  49.     GOTO    PRINCIPAL
  50.    
  51.    
  52. RETARDO
  53.     MOVLW   0XFF
  54.     MOVWF   RET
  55.     MOVWF   RET2
  56. ESP
  57.     DECFSZ  RET,F
  58.     GOTO    ESP
  59.     MOVLW   0XFF
  60.     MOVWF   RET
  61.     DECFSZ  RET2,F
  62.     GOTO    ESP
  63.     RETURN
  64.     END
« Última modificación: 02 de Noviembre de 2015, 02:13:43 por Pinolillo16 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC16F1707 Ejemplos básicos
« Respuesta #2 en: 29 de Octubre de 2015, 19:37:17 »
Tenes mal puesto el titulo, es PIC16F1707 , te olvidaste un 1.
Asi que si podes cambialo, asi de esa forma es correcto, el PIC16F707 es otro pic y tiene muy poco.
Sino cualquier cosa me avisas y lo cambio.

Citar
- Oscilador interno de precisión de hasta 16Mhz con un PLL de 4x entonces la lógica dice que podemos llevarlo a 64Mhz?

No, la entrada al PLL es de 4 a 8Mhz, lo cual llegaria maximo 32Mhz

Citar
MOVLB La cual según lo entendí, mueve una literal al BSR que es el registro de selección de banco. Para poder configurarlo.

Exacto, como ya son mas bancos, imagino que debe ser feo estar cambiando 5 bits y encima buscar el banco con el registro, entonces tenes una instruccion para eso. Los PIC18 ya lo traian a esto, por que tenian 16 bancos facilmente los primeros.
En realidad traen varias mas instrucciones como ya habras visto.

Citar
dentro del data sheet encontré que tiene 8 bancos de memoria
Tiene 32 xD

Y el OSCCON lo tocas para modificar la frecuencia del oscilador interno o activar el PLL si no lo activaste con los fuses, o cambiar el reloj de externo a interno, o al reves.
Tambien en los puertos tenes Open-Drain, Slew-Rate e Input-Level como algo "nuevo"

Tambien hay otras cosas buenas que vas a encontrar :P
« Última modificación: 30 de Octubre de 2015, 08:12:12 por KILLERJC »

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #3 en: 05 de Noviembre de 2015, 03:34:08 »
Gracias KILLERJC por tus observaciones ya modifique algunas,  :D no he actualizado debido a que he tenido un poco de trabajo. Estaba montandolo en proto todo el circuito ya que no tenia donde simular, me actualice la version de Proteus a la 8.3 y me sorprendio mucho ya que actualizaron los Micros y ya esta este PIC incluido en las librerias para simulación así mismo me di cuenta de que ya hay mas sensores para simular. Hace algunos meses trabaje con la LCD Nokia 5110, despues de unos dias pude hecharla a andar con ensamblador y un SPI por software, para aprender mas y aprovechando que tambien la LCD ya esta en proteus voy a realizar un ejemplo de como utilizarla pero con el SPI que incluye el micro por hardware. De cualquier modo esta abierto este tema por si alguien desea contribuir  ;-) 

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC16F1707 Ejemplos básicos
« Respuesta #4 en: 05 de Noviembre de 2015, 03:50:03 »
Te dejo a vos que lo llenes con ejemplos :P

En especial sobre aquellos que cambia sobre la arquitectura de los pics 16F viejos

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #5 en: 05 de Noviembre de 2015, 04:01:07 »
Jeje gracias KillerJC por ser tan atento  :lol: bueno pues creo que siempre es bueno poder aprender mas. Aqui anexo mi diagrama, leyendo la hoja de datos me encontre con algo completamente nuevo.Un Módulo PPS....  :shock: aun no se que es pero lo poco que lei es para asignar los pines de ciertos perifericos a donde tu desees. Crei que para configurar el SPI seria como los otros  :? pines ya definidos para SDO y SDI. La sorpresa es que el unico al parecer fijo es SCK.

Pero bueno vamos leyendo un poco mas sobre este PPS y veamos como trabajar con el.  :o

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #6 en: 05 de Noviembre de 2015, 04:06:12 »
Espero ir entendiéndolo bien, anexo una foto del bloque simplificado de estos PPS. Por lo que entendí y si es que comprendo mal les pido me orienten, tenemos PPS de entrada y PPS de salida. Los cuales pueden permitir entrar información o salir segun sean configurados... eso creo  :?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC16F1707 Ejemplos básicos
« Respuesta #7 en: 05 de Noviembre de 2015, 11:21:41 »
El PPS es una de las cosas buenas que me gustan de Microchip, Como su nombre lo dice Peripherical Pin Selection permitela seleccion del pin a un modulo, Esto termina con eso de que ciertos pines eran para un modulo, y con esos pines no podias usar el USB por ejemplo. Vi otras empresa pero a lo sumo suelen tener pines fijos o maximo 2 opciones, tal ves por la frencuencia en la cual se manejan y lo complejo que seria hacerlo para 100 pines xD.

El PPS no acepta todos los modulos. sino que acepta algunos nomas
Como entrada creo que acepta todos, Pero solo permite al puerto A y C (bit0 a bit6 de ambos puertos) para servir de entradas.

Como salida solo es posible seleccionar a los siguientes modulos

• EUSART (synchronous operation)
• MSSP (I2C,SPI)
• COG (auto-shutdown)

Por lo tanto vas a tener registros para cada salida de unos de esos modulos

10010 = Rxy source is SDO
10001 = Rxy source is SDA(1)
10000 = Rxy source is SCK/SCL(1)

En el banco 28 tenes para configurar cada pin como entrada, y en el banco 29 tenes los pines para usar como salida.
Algunos requieren estar configurados como entrada Y salida al mismo tiempo, tal cual seria el SDA del I2C , o en la UART si es sincrono, un pin funciona como ambos, entrada y salida.

PD: Seguis teniendo mas cosas, nomas que estas mirando los modulos nomas xD

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #8 en: 07 de Noviembre de 2015, 03:44:11 »
KillerJc vaya que si tiene bastantes cosas nuevas para mi  :o de las cuales estoy sorprendido. Estuve leyendo un rato el datasheet y bueno pues me encontré efectivamente lo que tu dices, hay que configurar los registros Rxy de acuerdo a lo que necesitemos. Pero antes de eso si no me equivoco, microchip recomienda desbloquear los PPS configurarlos y después volver a bloquearlos para asegurar que no haya cambios inoportunos. Bueno acá el ejemplo de como desbloquear y bloquear sacado del datasheet.

Código: ASM
  1. ; suspend interrupts
  2. bcf INTCON,GIE
  3. ; BANKSEL PPSLOCK ; set bank
  4. ; required sequence, next 5 instructions
  5. movlw 0x55
  6. movwf PPSLOCK
  7. movlw 0xAA
  8. movwf PPSLOCK
  9. ; Set PPSLOCKED bit to disable writes or
  10. ; Clear PPSLOCKED bit to enable writes
  11. bsf PPSLOCK,PPSLOCKED
  12. ; restore interrupts
  13. bsf INTCON,GIE

Bueno pues esa es la recomendación.

Aun no terminaba de comprender Rxy a que se refería y como era que se iban a configurar los PPS. Busque mas información sobre ellos y ahora creo que funciona de la siguiente manera si me equivoco corrijanme por favor.

Rxy

Donde R se refiere al registro.
x al puerto y
y al pin

Para ser mas objetivos si deseo asignar una salida SDO por ejemplo al pin RC0. Como menciono KillerJC anteriormente, hay que mover un valor= B'00010010'

Obtenido de la data en la pagina 140 donde nos indica que al cargar este valor su fuente sera SDO.

Mirar la imagen anexa.



Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #9 en: 07 de Noviembre de 2015, 04:34:37 »
 :) Después de jugar un rato con las instrucciones ya logré enviar datos tal cual lo configure. Sin interrupciones solo con la bandera. Es un ejemplo sencillo donde envío un dato vía SPI. Bajo la siguiente configuración.

Código: ASM
  1. ; NOS POSICIONAMOS EN BANCO DE PPSLOCK
  2. ; PARA DELBLOQUEARLO
  3.     BANKSEL PPSLOCK
  4.     MOVLW   0X55
  5.     MOVWF   PPSLOCK
  6.     MOVLW   0XAA
  7.     MOVWF   PPSLOCK
  8.     BCF     PPSLOCK,PPSLOCKED
  9.     BANKSEL RC0PPS
  10.     MOVLW   B'00010010'
  11.     MOVWF   RC0PPS
  12.     MOVLW   B'00010000'
  13.     MOVWF   RC1PPS
  14. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  15.     BANKSEL PPSLOCK
  16.     MOVLW   0X55
  17.     MOVWF   PPSLOCK
  18.     MOVLW   0XAA
  19.     MOVWF   PPSLOCK
  20.     BSF     PPSLOCK,PPSLOCKED
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22.     BANKSEL SSP1CON1
  23.     MOVLW   B'00110000'
  24.     MOVWF   SSP1CON1
  25.     BANKSEL PORTB

Con esto configure el RC0 como SDO y el RC1 como SCK.

Obtuve una transmisión correcta con el siguiente código.

Código: ASM
  1. MOVLW   0XFF
  2.     CALL    DATO_SPI
  3.      CALL    RETARDO
  4.     ;;;;;;;;;;;;;;;;;;;;;
  5.     MOVLW   0X03
  6.     CALL    DATO_SPI
  7.      CALL    RETARDO
  8.     GOTO    PRINCIPAL
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
  10. DATO_SPI
  11.     BSF     DC_NOKIA
  12.     BCF     LCD_NOKIA
  13.     BANKSEL SSP1BUF
  14.     MOVWF   SSP1BUF
  15.     BANKSEL PIR1
  16.     BCF     PIR1,SSP1IF
  17. WSPI
  18.     BTFSS   PIR1,SSP1IF
  19.     GOTO    WSPI
  20.     BCF     PIR1,SSP1IF
  21.     BANKSEL PORTA
  22.     BSF     LCD_NOKIA
  23.     RETURN


Parece que todo OK. si ven algún error me ayudan....

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #10 en: 07 de Noviembre de 2015, 04:49:37 »
Bueno como ya solucionamos la parte del SPI que al parecer trabaja bien, ahora veamos que hay con respecto a la LCD Nokia 5110.

Como sabemos es una LCD gráfica con comunicación SPI.


Esta es la imagen que encontré adecuada.

Donde tenemos la siguiente información:

- Pin1 Vcc=2.7 a 3.3V
- Pin2 GND
- Pin3 Chip Select
- Pin4 Reset
- Pin5 D/C  Selección de Dato o comando
- Pin6 Din  Entrada de datos
- Pin7 SCK Señal de Reloj
- Pin 8 LED

Como vemos esta imagen tiene los pines de la misma manera y numeración que en el modelo de proteus.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #11 en: 07 de Noviembre de 2015, 04:52:29 »
Sacado de la hoja de datos de la LCD anexo una imagen donde vemos el modo de transmisión de datos de 1 Byte que ha quedado compatible con nuestra configuración.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #12 en: 07 de Noviembre de 2015, 04:59:57 »
También sacado del data sheet anexo el set de instrucciones de la LCD. Seguido de el set tenemos la parte de inicializacion de la LCD la cual consta de los siguientes pasos.

- 1. Reset por Software
- 2. Function Set
- 3. Display Control
- 4. Set y Address of RAM
- 5. Set x Address of RAM
- 6. Control de temperatura
- 7. Bias Value


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC16F1707 Ejemplos básicos
« Respuesta #13 en: 07 de Noviembre de 2015, 11:50:06 »
Excelente.. Como te vas ya a la aplicacion te voy a dejar unas lineas para que las veas y las apliques si es necesario.

- Grabado automatico del contexto al entrar a la interrupcion. Al contexto me refiero a: W,STATUS,FSR0,FSR1,PCLATCH y BSR
- Acceso indirecto: Aca tenes 2.

1- Como ves el acceso a bancos es complejo. Crear un buffer grande lo es ya que deberias estar vigilando constantemente si superaste la direccion para saltar al otro punto de registros del proximo banco, el acceso indirecto te permite hacer esto automaticamente, Entonces si tu acceso indirecto esta en 0x6F en ves de pasar a 0x70 (que se una posicion de memoria comun a todos los bancos, pasa a 0xA0 del otro banco, es decir se saltea todos los SFR tambien
2- Con el acceso indirecto podes acceder a la memoria de programa, como si esta estuviera mapeada de forma lineal, Antes unicamente podias hacerlo con las tablas, ahora con el acceso indirecto tambien. Esto es interesante, ya que te olvidas de estar pensando en que los CALL tendrias qeu cambiar la pagina O ubicar la tabla si o si al comienzo de una pagina de la flash. Sino que el acceso indirecto posee todos los bits y podrias simplemente tomar uno detras de otro.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PIC16F1707 Ejemplos básicos
« Respuesta #14 en: 07 de Noviembre de 2015, 18:21:33 »
KillerJC siempre con buenos consejos, mira aun no manejo las interrupciones y me quedo un poco claro lo que me has explicado. Sabes  :( siempre he batallado con el direccionamiento indirecto honestamente no lo se usar, me caería bien empezar a hacer algo con los SFRs en este PIC. Que consejo me das como un buen método de aplicación y aprendizaje del uso de el direccionamiento indirecto?

Mientras tanto cuelgo el código realizado para trabajar con esta LCD. Adjunto la imagen de la simulación.

Código: ASM
  1. #INCLUDE "P16F1707.INC"
  2.  __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOREN_OFF & _CLKOUTEN_OFF
  3.  __CONFIG _CONFIG2, _WRT_OFF & _PPS1WAY_ON & _ZCDDIS_OFF & _PLLEN_ON & _STVREN_ON & _BORV_LO & _LPBOR_OFF & _LVP_OFF
  4.  
  5.     CBLOCK  0X020
  6.     RET
  7.     RET2
  8.     ENDC
  9.  
  10.     ORG     0X00
  11.     GOTO    CONFIGURA_PIC
  12.     ORG     0X04
  13.     RETFIE
  14.  CONFIGURA_PIC
  15.     BANKSEL OSCCON
  16.     MOVLW   B'11111011'
  17.     MOVWF   OSCCON
  18.     MOVLW   B'00011111'
  19.     MOVWF   OSCTUNE
  20.     BANKSEL PORTA
  21.     CLRF    PORTA
  22.     CLRF    PORTB
  23.     CLRF    PORTC
  24.     BANKSEL LATA
  25.     CLRF    LATA
  26.     CLRF    LATB
  27.     CLRF    LATC
  28.     BANKSEL ANSELA
  29.     CLRF    ANSELA
  30.     CLRF    ANSELB
  31.     CLRF    ANSELC
  32.     BANKSEL TRISA
  33.     CLRF    TRISA
  34.     CLRF    TRISB
  35.     CLRF    TRISC
  36. ; NOS POSICIONAMOS EN BANCO DE PPSLOCK
  37. ; PARA DELBLOQUEARLO
  38.     BANKSEL PPSLOCK
  39.     MOVLW   0X55
  40.     MOVWF   PPSLOCK
  41.     MOVLW   0XAA
  42.     MOVWF   PPSLOCK
  43.     BCF     PPSLOCK,PPSLOCKED
  44.     BANKSEL RC0PPS
  45.     MOVLW   B'00010010'
  46.     MOVWF   RC0PPS
  47.     MOVLW   B'00010000'
  48.     MOVWF   RC1PPS
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50.     BANKSEL PPSLOCK
  51.     MOVLW   0X55
  52.     MOVWF   PPSLOCK
  53.     MOVLW   0XAA
  54.     MOVWF   PPSLOCK
  55.     BSF     PPSLOCK,PPSLOCKED
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57.     BANKSEL SSP1CON1
  58.     MOVLW   B'00110000'
  59.     MOVWF   SSP1CON1
  60.     BANKSEL PORTB
  61.    
  62.     #DEFINE LCD_NOKIA   PORTC,2
  63.     #DEFINE RST_NOKIA   PORTC,3
  64.     #DEFINE DC_NOKIA    PORTC,4
  65.  
  66.     BSF     RST_NOKIA
  67.     BSF     LCD_NOKIA
  68.     CALL    INI_LCD_NOKIA
  69.  PRINCIPAL
  70.  ;H
  71.     MOVLW   0X00
  72.     CALL    DATO_SPI
  73.     MOVLW   B'11111110'
  74.     CALL    DATO_SPI
  75.     MOVLW   B'00010000'
  76.     CALL    DATO_SPI
  77.     MOVLW   B'00010000'
  78.     CALL    DATO_SPI
  79.     MOVLW   B'11111110'
  80.     CALL    DATO_SPI
  81.     MOVLW   0X00
  82.     CALL    DATO_SPI
  83. ; O
  84.     MOVLW   B'01111100'
  85.     CALL    DATO_SPI
  86.     MOVLW   B'10000010'
  87.     CALL    DATO_SPI
  88.     MOVLW   B'10000010'
  89.     CALL    DATO_SPI
  90.     MOVLW   B'01111100'
  91.     CALL    DATO_SPI
  92.     MOVLW   0X00
  93.     CALL    DATO_SPI    
  94. ;L
  95.     MOVLW   B'11111110'
  96.     CALL    DATO_SPI
  97.     MOVLW   B'10000000'
  98.     CALL    DATO_SPI
  99.     MOVLW   B'10000000'
  100.     CALL    DATO_SPI
  101.     MOVLW   B'10000000'
  102.     CALL    DATO_SPI
  103.     MOVLW   0X00
  104.     CALL    DATO_SPI    
  105. ;A
  106.     MOVLW   B'11111100'
  107.     CALL    DATO_SPI
  108.     MOVLW   B'00010010'
  109.     CALL    DATO_SPI
  110.     MOVLW   B'00010010'
  111.     CALL    DATO_SPI
  112.     MOVLW   B'11111100'
  113.     CALL    DATO_SPI
  114.     MOVLW   0X00
  115.     CALL    DATO_SPI
  116.  
  117.         MOVLW   0X00
  118.     CALL    DATO_SPI
  119.    
  120.    
  121.     CALL    RETARDO
  122.     GOTO    PRINCIPAL
  123. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  124. INI_LCD_NOKIA
  125.     BCF     RST_NOKIA
  126.     NOP
  127.     BSF     RST_NOKIA
  128.     ;CREAMOS UN RESET POR SOFTWARE DE LA LCD
  129.     MOVLW   B'00100001'; SELECCIONAMOS MODO SET INSTRUCTION
  130.     CALL    COMANDO_SPI
  131.     MOVLW   B'11001111'; DEFINIMOS CONTRASTE
  132.     CALL    COMANDO_SPI
  133.     MOVLW   B'00100000';SLECCIONAMOS MODO NORMAL DE INSTRUCCION
  134.     CALL    COMANDO_SPI
  135.     MOVLW   B'00001100';DEFINIMOS MODO NORMAL DE DISPLAY
  136.     CALL    COMANDO_SPI
  137.     ;;;;;;;;;;;;;;;;;;;;;;;;; ACABAMOS LA INICIALIZACION DE LA LCD
  138.     RETURN
  139. DATO_SPI
  140.     BSF     DC_NOKIA
  141.     BCF     LCD_NOKIA
  142.     BANKSEL SSP1BUF
  143.     MOVWF   SSP1BUF
  144.     BANKSEL PIR1
  145.     BCF     PIR1,SSP1IF
  146. WSPI
  147.     BTFSS   PIR1,SSP1IF
  148.     GOTO    WSPI
  149.     BCF     PIR1,SSP1IF
  150.     BANKSEL PORTA
  151.     BSF     LCD_NOKIA
  152.     RETURN
  153. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  154. COMANDO_SPI
  155.     BCF     DC_NOKIA
  156.     BCF     LCD_NOKIA
  157.     BANKSEL SSP1BUF
  158.     MOVWF   SSP1BUF
  159.     BANKSEL PIR1
  160.     BCF     PIR1,SSP1IF
  161. WSPIC
  162.     BTFSS   PIR1,SSP1IF
  163.     GOTO    WSPIC
  164.     BCF     PIR1,SSP1IF
  165.     BANKSEL PORTA
  166.     BSF     LCD_NOKIA
  167.     RETURN
  168. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  169.    
  170.    
  171. RETARDO
  172.     MOVLW   0XFF
  173.     MOVWF   RET
  174.     MOVWF   RET2
  175. ESP
  176.     DECFSZ  RET,F
  177.     GOTO    ESP
  178.     MOVLW   0XFF
  179.     MOVWF   RET
  180.     DECFSZ  RET2,F
  181.     GOTO    ESP
  182.     RETURN
  183.     END


Saludos