Este es el ejemplo en C para un PIC 18f88 que permite encender y apagar un led una vez por segundo conectado al pin RB0.
#include <16f88.h>
#fuses NOWDT, PUT, NOMCLR,BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, CCPB3, NOPROTECT, INTRC_IO, NOFCMEN, NOIESO
#use delay( clock = 8000000 ) /* reloj de 8 MHz */
#byte puerto_b = 06 /* dirección del puerto B */
void main( void )
{
set_tris_b( 0x00 ); /* puerto B como salidas */
puerto_b = 0; /* Limpia el puerto */
do{
delay_ms( 1000 );
bit_set( puerto_b, 0 ); //o esta output_high(PIN_B0)
delay_ms( 1000 );
bit_clear( puerto_b, 0); // o esta output_high(PIN_B0)
} while( TRUE );
}
seria bueno que lo comparan con el equivalente en ensamblador!!!
Translate, Traductor
martes, 23 de noviembre de 2010
jueves, 14 de octubre de 2010
Contador de 0 a 99 con PIC
Actualizado 21 de junio de 2012 22:48
Implementacion de un contador de 0 a 99 con dos display de 7 segmentos y microcontrolador usando la tecnica de multiplexacion para solo usar un puerto del pic.
VIDEO DE LA IMPLEMENTACION
CODIGO FUENTE PARA EL PIC
LIST P=16F883
INCLUDE P16F883.INC
ERRORLEVEL -302
__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_ON & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _WRT_OFF
CBLOCK 0X20
PDel0, PDel1, DECENAS, UNIDADES
ENDC
ORG 00
GOTO CONFIGURA
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 14/10/2010 at 03:01:16 p.m.
; Description: Waits 10000 cycles
;-------------------------------------------------------------
RET_10MS movlw .8 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .249 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'
MOSTRAR MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
BCF PORTC,4 ;desactivo el display decena
MOVWF PORTB
CALL RET_10MS
MOVF DECENAS,W ;cargo el valor de las decenas
CALL TABLA
BCF PORTC,5 ;desactivo el display unidad
BSF PORTC,4 ;activo el display decena
MOVWF PORTB
CALL RET_10MS
RETURN
VER CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR ;LOGRO UN RETARDO DE 160ms
RETURN
CONFIGURA NOP
BANKSEL ANSEL ;paso al banco 3
CLRF ANSEL ;Configura el porta como digital
CLRF ANSELH ;Configura el portb como digital
BANKSEL TRISB ;paso al banco 1
CLRF ANSEL
MOVLW 0X00
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
MOVLW 0X00
MOVWF TRISC
BANKSEL PORTB ;paso al banco 0
CLRF PORTB
CLRF DECENAS
CLRF UNIDADES
CICLO CALL VER ;Esta rutina me sirve como un
;retarde de 20ms aprox
INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSC STATUS,Z
GOTO INC_DECENAS
CALL VER
GOTO CICLO
INC_DECENAS CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSC STATUS,Z
CLRF DECENAS
CALL VER
GOTO CICLO
END
Actualización:
Varias personas me han preguntado como poner un tope a la cuenta, es decir, como hacer que solo cuente hasta 12 o hasta 20 o hasta cualquier número entre 0 y 99, la explicación la deje en uno de los comentarios y el código con las modificaciones lo publique en GitHub:
https://github.com/edwtron/xorwf/blob/master/contador0a99conTope.asm
fin actualización.
Circuito de la implementación
Para el celular
Copyright 2012 edwtron
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Implementacion de un contador de 0 a 99 con dos display de 7 segmentos y microcontrolador usando la tecnica de multiplexacion para solo usar un puerto del pic.
VIDEO DE LA IMPLEMENTACION
CODIGO FUENTE PARA EL PIC
LIST P=16F883
INCLUDE P16F883.INC
ERRORLEVEL -302
__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_ON & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _WRT_OFF
CBLOCK 0X20
PDel0, PDel1, DECENAS, UNIDADES
ENDC
ORG 00
GOTO CONFIGURA
;-------------------------------------------------------------
; Code generated by PDEL ver 1.0 on 14/10/2010 at 03:01:16 p.m.
; Description: Waits 10000 cycles
;-------------------------------------------------------------
RET_10MS movlw .8 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .249 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
;-------------------------------------------------------------
TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111100'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'
MOSTRAR MOVF UNIDADES,W ;cargo el valor de las unidades
CALL TABLA
BSF PORTC,5 ;activo el display unidad
BCF PORTC,4 ;desactivo el display decena
MOVWF PORTB
CALL RET_10MS
MOVF DECENAS,W ;cargo el valor de las decenas
CALL TABLA
BCF PORTC,5 ;desactivo el display unidad
BSF PORTC,4 ;activo el display decena
MOVWF PORTB
CALL RET_10MS
RETURN
VER CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR
CALL MOSTRAR ;LOGRO UN RETARDO DE 160ms
RETURN
CONFIGURA NOP
BANKSEL ANSEL ;paso al banco 3
CLRF ANSEL ;Configura el porta como digital
CLRF ANSELH ;Configura el portb como digital
BANKSEL TRISB ;paso al banco 1
CLRF ANSEL
MOVLW 0X00
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
MOVLW 0X00
MOVWF TRISC
BANKSEL PORTB ;paso al banco 0
CLRF PORTB
CLRF DECENAS
CLRF UNIDADES
CICLO CALL VER ;Esta rutina me sirve como un
;retarde de 20ms aprox
INCF UNIDADES,F
MOVLW .10
XORWF UNIDADES,W
BTFSC STATUS,Z
GOTO INC_DECENAS
CALL VER
GOTO CICLO
INC_DECENAS CLRF UNIDADES
INCF DECENAS,F
MOVLW .10
XORWF DECENAS,W
BTFSC STATUS,Z
CLRF DECENAS
CALL VER
GOTO CICLO
END
Actualización:
Varias personas me han preguntado como poner un tope a la cuenta, es decir, como hacer que solo cuente hasta 12 o hasta 20 o hasta cualquier número entre 0 y 99, la explicación la deje en uno de los comentarios y el código con las modificaciones lo publique en GitHub:
https://github.com/edwtron/xorwf/blob/master/contador0a99conTope.asm
fin actualización.
Circuito de la implementación
Para el celular
Copyright 2012 edwtron
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
Etiquetas:
assembler,
contador,
display,
ensamblador,
microchip,
microcontrolador,
multiplexion,
p16f883,
PIC
miércoles, 13 de octubre de 2010
plantilla para pic de 8 pines el P12F629
Plantilla para un PIC que solo tiene 8 pines de los cuales podemos usar 6 pines, entre las diferencias con los pics que estamos acostumbrados a manejar es que el puerto es llamado GPIO y el para entradas o salidas digitales es el TRISIO. Como tiene comparadores, hay que configurar sl CMCON para que los pines finciones como digitales. Solo tiene dos bancos de memoria, es un PIC relativamente muy facil de usar.
LIST P=12F629
INCLUDE P12F629.INC
ERRORLEVEL -302
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
CBLOCK 0X20
;espacio para la declaracion de variables
ENDC
ORG 00
GOTO CONFIGURA
;espacio para las subrrutinas
CONFIGURA NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines
MOVWF CMCON ; digitales
BANKSEL OSCCAL ;para calibrar el oscilador interno
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL
CLRF TRISIO
BANKSEL GPIO
;Programa principal
CICLO
GOTO CICLO
END
Etiquetas:
assembler,
bit's,
circuito integrado,
ensamblador,
fusibles,
microchip,
microcontrolador,
P12F629,
PIC,
plantilla,
software
Plantilla para programar con el 16f883
Esta es una plantilla para trabajar con el PIC 16F883 (y toda su familia), tiene diferencias con los viejos P16F873A (y su familia) en los bits de configuración, y que ya los pines digitales y análogos no se configuran en el ADCON1, ya se configuran en el ANSEL (para el porta) y ANSELH (para el portb), y se diferencia del P16F88 en que el ANSEL esta en el banco 1 de memoria, mientras que en el P16F883 están en el banco 3 de memoria.
Hay que tener en cuenta que tienes mas diferencias, como que el P16F883 tiene oscilador interno, entre otras, pero como siempre digo, "Hay que leer el manual".
LIST P=16F883
INCLUDE P16F883.INC
ERRORLEVEL -302
__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _WRT_OFF
CBLOCK 0X20
ENDC
ORG 00
GOTO CONFIGURA
;LUGAR PARA SUBRRUTINAS
CONFIGURA NOP
BANKSEL ANSEL ;paso al banco 3
CLRF ANSEL ;Configura el porta como digital
CLRF ANSELH ;Configura el portb como digital
BANKSEL TRISB ;paso al banco 1
CLRF ANSEL
MOVLW 0X00
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
MOVLW 0X00
MOVWF TRISC
BANKSEL PORTB ;paso al banco 0
;PROGRAMA PRINCIPAL
CICLO
GOTO CICLO
END
Hay que tener en cuenta que tienes mas diferencias, como que el P16F883 tiene oscilador interno, entre otras, pero como siempre digo, "Hay que leer el manual".
LIST P=16F883
INCLUDE P16F883.INC
ERRORLEVEL -302
__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _WRT_OFF
CBLOCK 0X20
ENDC
ORG 00
GOTO CONFIGURA
;LUGAR PARA SUBRRUTINAS
CONFIGURA NOP
BANKSEL ANSEL ;paso al banco 3
CLRF ANSEL ;Configura el porta como digital
CLRF ANSELH ;Configura el portb como digital
BANKSEL TRISB ;paso al banco 1
CLRF ANSEL
MOVLW 0X00
MOVWF TRISA
MOVLW 0X00
MOVWF TRISB
MOVLW 0X00
MOVWF TRISC
BANKSEL PORTB ;paso al banco 0
;PROGRAMA PRINCIPAL
CICLO
GOTO CICLO
END
sábado, 18 de septiembre de 2010
Sobre los bits de configuracion
Recuerden que los bits de configuracion dependen del microcontrolador que se va a trabajar y las opciones que deseemos habilitar
Ejemplo
para seleccionar el tipo de oscilador tenemos varias opciones
_XT_OSC Si el oscilador que vamos a usar es un cristal de cuarzo de menos de 4 MHz
_HS_OSC Si el oscilador es mayor a 4MHz
y tiene mas opciones que podemos ver en el fichero de cabecera P16F88.INC
En una entrada anterior publique como usar los bits de configuracion
http://xorwf.blogspot.com
http://taller-electronica.blogspot.com
¿Y que problema hay en no entender??
Ejemplo
para seleccionar el tipo de oscilador tenemos varias opciones
_XT_OSC Si el oscilador que vamos a usar es un cristal de cuarzo de menos de 4 MHz
_HS_OSC Si el oscilador es mayor a 4MHz
y tiene mas opciones que podemos ver en el fichero de cabecera P16F88.INC
En una entrada anterior publique como usar los bits de configuracion
http://xorwf.blogspot.com
http://taller-electronica.blogspot.com
¿Y que problema hay en no entender??
sábado, 4 de septiembre de 2010
Plantilla para un programa en ensamblador con el PIC 16f88
A continuacion el codigo fuente base para un programa con microcontroladores PIC en ensamblador, seria interesante que lo guardaran para tenerlo como plantilla a la hora de sentarse a cacharriar, yo lo mantengo como plantilla.asm, y cada vez que voy a realizar un trabajo, lo copio y lo pego en un archivo nuevo en el MPLAB, y asi ahorro trabajo y evito errores.
Esta plantilla esta para trabajar con un PIC 16f88, ya en una entrada anterion habia explicado lo de los fusibles(CLICK bits de configuracion)
En letras verdes voy a agregar algunos comentarios, recuerden que en el ensamblador los comentarios se colocan despues de un punto y coma " ; "
IMPORTANTE el oscilador es de tipo externo con un cristal de 4MHz
LIST P=16F88
INCLUDE P16F88.INC
;Estas son las palabras de configuracion necesarias para este microconlador
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;dentro de esta directiva CBLOCK se especifican las variables con las que voy a trabajar en el programa
CBLOCK 0X20
ENDC
ORG 00
GOTO CONFIGURA
;en esta parte o al final del programa puedo escribir las rutinas
;Este bloque lo uso para configurar los perofericos del microcontrolador
;primero configure todos los pines como digitales y despues cambio las X
;por unos y ceros, coloco un uno, si necesito una entrada, y un cero si lo
;que necesito es una salida.
CONFIGURA NOP
BANKSEL TXSTA
CLRF ANSEL
MOVLW B'XXXXXXXX'
MOVWF TRISA
MOVLW B'XXXXXXXX'
MOVWF TRISB
BANKSEL TXREG
;Este es el bloque donde escribo el programa principal
INICIO
;programa principal
GOTO INICIO
END
; fin del programa
DESCARGAR EL FICHERO
Esta plantilla esta para trabajar con un PIC 16f88, ya en una entrada anterion habia explicado lo de los fusibles(CLICK bits de configuracion)
En letras verdes voy a agregar algunos comentarios, recuerden que en el ensamblador los comentarios se colocan despues de un punto y coma " ; "
IMPORTANTE el oscilador es de tipo externo con un cristal de 4MHz
;si se trabajara con otro microcontrolador solo seria cambiar la referencia del microcontrolador y la direccion de
;memoria donde empizan los registros de proposito general. LIST P=16F88
INCLUDE P16F88.INC
;Estas son las palabras de configuracion necesarias para este microconlador
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
;dentro de esta directiva CBLOCK se especifican las variables con las que voy a trabajar en el programa
CBLOCK 0X20
ENDC
ORG 00
GOTO CONFIGURA
;en esta parte o al final del programa puedo escribir las rutinas
;Este bloque lo uso para configurar los perofericos del microcontrolador
;primero configure todos los pines como digitales y despues cambio las X
;por unos y ceros, coloco un uno, si necesito una entrada, y un cero si lo
;que necesito es una salida.
CONFIGURA NOP
BANKSEL TXSTA
CLRF ANSEL
MOVLW B'XXXXXXXX'
MOVWF TRISA
MOVLW B'XXXXXXXX'
MOVWF TRISB
BANKSEL TXREG
;Este es el bloque donde escribo el programa principal
INICIO
GOTO INICIO
END
; fin del programa
DESCARGAR EL FICHERO
martes, 31 de agosto de 2010
Modulos LCD con PICs
;Los modulos LCD son otra opcion para la visualizacion de datos, diferente a los display de 7 segmentos, los modulos LCD tienen sus procpios controladores quienes interpretan las ordenes y memoria donde almacenan los simbolos que se quieren visualizar. Usan el codigo de caracteres ASCII.
;Es un estandar que tengan 14 pines, aunque algunos tienen dos mas para el control de la luz (back litgh) los pines 15 y 16
NOMBRE DE LOS PINES
; Vss VDD contraste R/S R/W enable DO D1 D2 D3 D4
; 1 2 3 4 5 6 7 8 9 10 11
12 13 14
D5 D6 D7
DESCRIPCION DE LOS PINES
; Vss GND
; VDD +5v
;CONTRASTE Aumenta o disminuye el contraste del modulo, se puede conectar un potenciometro de 10K, los extremos a +5v y GND y el centro al este PIN
;R/S Se indica si es un dato o una orden lo que se le quiere enviar al modulo
0 = instruccion, 1 = dato
;R/W Se indica la operacion es de escritura o de lectura.
0 = escritura, 1 = lectura
normalmente lo mantenemos con un cero '0'
;ENABLE Habilita el modulo para cualquier operacion.
;DO....D7 Se escribe el dato o el comando que se quiere dar al modulo.
UTILIZACION
Entre las ordenes y los datos que se le envian al modulo es necesario agregar
retardos, segun los fabricantes son del orden de los microsegundos, yo voy usar
retardos de 1ms para todo el programa.
INICIALIZACION
Para el funcionamiento es necesario primero inicializar el modulo.
Se deben seguir los siguientes pasos:
1 RS = 0
2 E = 0
3 cargar el comando para configurar el modo de funcionamiento en 0..D7
comunicacion a 8 bits
usar las dos lineas del modulo
tamano del caracter 7x5
4 E = 1
5 espera un tiempo ( 1ms)
6 E = 0
7 cargo comando
enciendo el LCD
enciendo el cursor
cursor intermitente
8 E = 1
9 espera un tiempo ( 1ms)
10 E = 0
revisar el manual para mas comandos
y todo listo
este es el pedazo de codigo que hace lo indicado
BCF PORTA,0 ;RS = 0
BCF PORTA,1 ;E = 0
MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
ESCRIBIR UN DATO
1 Cargo el dato en D0 a D7
2 RS = 1
3 E = 1
4 espero un momento
5 E = 0
ejemplo visualizando la letra E
MOVLW A'E'
MOVWF PORTB
BSF PORTA,0
BSF PORTA,1
CALL RET_10MS
BCF PORTA,1
CALL RET_10MS
CODIGO DE PRUEBA COMPLETO
LIST P=16F88
INCLUDE P16F88.INC
ERRORLEVEL -302
CBLOCK 0X20
PDel0 , PDel1
ENDC
ORG 00
GOTO CONFIGURACION
;Retardo geneerado con el PCIDEL, agradezco a su autor
;
RET_10MS movlw .8 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .249 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
RET_1MS movlw .248 ; 1 set number of repetitions
movwf PDel0 ; 1 |
PLoop01 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) is the time over?
goto PLoop01 ; 2 no, loop
PDelL11 goto PDelL21 ; 2 cycles delay
PDelL21 clrwdt ; 1 cycle delay
return ; 2+2 Done
CONFIGURACION NOP
BANKSEL ADCON1
CLRF ANSEL
CLRF TRISA
CLRF TRISB
BANKSEL ADCON0
CLRF PORTA
CLRF PORTB
CALL RET_1MS
BCF PORTA,0 ;RS = 0
BCF PORTA,1 ;E = 0
MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
MOVLW A'E' ; Cargo el ASCII de la E
MOVWF PORTB ;Envio la E al puerto
BSF PORTA,0
BSF PORTA,1
CALL RET_10MS
BCF PORTA,1
CALL RET_10MS
INICIO NOP
GOTO INICIO
END
Copyright 2010 EDWIN ESPINOSA
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
vista frontal |
vista trasera |
;Es un estandar que tengan 14 pines, aunque algunos tienen dos mas para el control de la luz (back litgh) los pines 15 y 16
NOMBRE DE LOS PINES
; Vss VDD contraste R/S R/W enable DO D1 D2 D3 D4
; 1 2 3 4 5 6 7 8 9 10 11
12 13 14
D5 D6 D7
DESCRIPCION DE LOS PINES
; Vss GND
; VDD +5v
;CONTRASTE Aumenta o disminuye el contraste del modulo, se puede conectar un potenciometro de 10K, los extremos a +5v y GND y el centro al este PIN
;R/S Se indica si es un dato o una orden lo que se le quiere enviar al modulo
0 = instruccion, 1 = dato
;R/W Se indica la operacion es de escritura o de lectura.
0 = escritura, 1 = lectura
normalmente lo mantenemos con un cero '0'
;ENABLE Habilita el modulo para cualquier operacion.
;DO....D7 Se escribe el dato o el comando que se quiere dar al modulo.
UTILIZACION
Entre las ordenes y los datos que se le envian al modulo es necesario agregar
retardos, segun los fabricantes son del orden de los microsegundos, yo voy usar
retardos de 1ms para todo el programa.
INICIALIZACION
Para el funcionamiento es necesario primero inicializar el modulo.
Se deben seguir los siguientes pasos:
1 RS = 0
2 E = 0
3 cargar el comando para configurar el modo de funcionamiento en 0..D7
comunicacion a 8 bits
usar las dos lineas del modulo
tamano del caracter 7x5
4 E = 1
5 espera un tiempo ( 1ms)
6 E = 0
7 cargo comando
enciendo el LCD
enciendo el cursor
cursor intermitente
8 E = 1
9 espera un tiempo ( 1ms)
10 E = 0
revisar el manual para mas comandos
y todo listo
este es el pedazo de codigo que hace lo indicado
BCF PORTA,0 ;RS = 0
BCF PORTA,1 ;E = 0
MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
ESCRIBIR UN DATO
1 Cargo el dato en D0 a D7
2 RS = 1
3 E = 1
4 espero un momento
5 E = 0
ejemplo visualizando la letra E
MOVLW A'E'
MOVWF PORTB
BSF PORTA,0
BSF PORTA,1
CALL RET_10MS
BCF PORTA,1
CALL RET_10MS
circuito de prueba click para ver grande |
CODIGO DE PRUEBA COMPLETO
LIST P=16F88
INCLUDE P16F88.INC
ERRORLEVEL -302
CBLOCK 0X20
PDel0 , PDel1
ENDC
ORG 00
GOTO CONFIGURACION
;Retardo geneerado con el PCIDEL, agradezco a su autor
;
RET_10MS movlw .8 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop1 movlw .249 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
RET_1MS movlw .248 ; 1 set number of repetitions
movwf PDel0 ; 1 |
PLoop01 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) is the time over?
goto PLoop01 ; 2 no, loop
PDelL11 goto PDelL21 ; 2 cycles delay
PDelL21 clrwdt ; 1 cycle delay
return ; 2+2 Done
CONFIGURACION NOP
BANKSEL ADCON1
CLRF ANSEL
CLRF TRISA
CLRF TRISB
BANKSEL ADCON0
CLRF PORTA
CLRF PORTB
CALL RET_1MS
BCF PORTA,0 ;RS = 0
BCF PORTA,1 ;E = 0
MOVLW B'00111000' ;8 BITS 2 LINEAS 7X5
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
MOVLW B'00001111' ;ON LCD, ON CURSOR, ON INTER
MOVWF PORTB
BCF PORTA,0 ;RS=0
BSF PORTA,1 ;E=1 HABILITO ESCRITURA
CALL RET_1MS
BCF PORTA,1 ;E = 0
CALL RET_1MS
MOVLW A'E' ; Cargo el ASCII de la E
MOVWF PORTB ;Envio la E al puerto
BSF PORTA,0
BSF PORTA,1
CALL RET_10MS
BCF PORTA,1
CALL RET_10MS
INICIO NOP
GOTO INICIO
END
Copyright 2010 EDWIN ESPINOSA
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
viernes, 13 de agosto de 2010
Fusibles de configuracion "Bit's de configuracion" de los PIC's
Los bit's de configuracion o mas comunmente llamados "fusibles" permiten confugurar ciertas funciones en los microcontroladores PIC, como el tipo de cristal para el oscilador, permiten proteger el codigo en el micro, entre muchas funciones. La cantidad de funciones que se pueden configurar con los fusibles dependen del microcontrolador, si tenemos en el 16F84A 4 funciones, en el 16F88 son alrededor de 13 funciones.
Bueno y para que sirven?
Como lo dije antes son para configurar algunas funciones del micro, como el tipo de oscilador, la proteccion de codigo, habilitar el perro guardian ( por que si no este los muerde), habilitar el reset maestro, habilitar un reset inicial, habilitar reset por bajo voltage en la fuente, y otros que como les dije depende del micro usado.
Ahhh y cuando se usan??
En el momento en que se quiere programar el micro se le deben configurar los fusibles ( esto es usando un software como el WINPIC800, me parece necesario agradecer a los creadores de este software quienes nos permiten descargarlo y usarlo sin ningun problema, www.winpic800.com, GRACIAS!!!!!!) y si estamos usando alguno de los programadores de MICROCHIP como el pickit2 o el pickit3 debemos escribir la configuracion de estos fusibles en la cabecera de nuestro fuente antes de compilar.
Como se que fusibles usa mi pequeño monstruo?
Como siempre digo "pues en el manual del micro", jeje suena obvio, y los podes obtener del fichero que incluimos en la cabecera del fuente, el P16F88.INC por ejemplo, que se encuentra en la carpeta "MPASM suite" que esta dentro de la carpeta "microchip" donde instalamos el MPLAB, ojo que el nombre del fichero depende del micro.
De los ficheros antes mencionados obtube lo siguiente:
Para el 16F84A
_CP_ON EQU H'000F'
_CP_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_PWRTE_OFF EQU H'3FFF'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
de donde se arma nuestra palabra de configuracion anteponiendo la directiva "__CONFIG"
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
Que es lo que debemos poner en la cabecera del fuente.
Aqui va la del 16F88
_CONFIG1 EQU H'2007'
_CONFIG2 EQU H'2008'
;Configuration Byte 1 Options
_CP_ALL EQU H'1FFF'
_CP_OFF EQU H'3FFF'
_CCP1_RB0 EQU H'3FFF'
_CCP1_RB3 EQU H'2FFF'
_DEBUG_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_WRT_PROTECT_OFF EQU H'3FFF' ;No program memory write protection
_WRT_PROTECT_256 EQU H'3DFF' ;First 256 program memory protected
_WRT_PROTECT_2048 EQU H'3BFF' ;First 2048 program memory protected
_WRT_PROTECT_ALL EQU H'39FF' ;All of program memory protected
_CPD_ON EQU H'3EFF'
_CPD_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_MCLR_ON EQU H'3FFF'
_MCLR_OFF EQU H'3FDF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_EXTRC_CLKOUT EQU H'3FFF'
_EXTRC_IO EQU H'3FFE'
_INTRC_CLKOUT EQU H'3FFD'
_INTRC_IO EQU H'3FFC'
_EXTCLK EQU H'3FEF'
_HS_OSC EQU H'3FEE'
_XT_OSC EQU H'3FED'
_LP_OSC EQU H'3FEC'
;Configuration Byte 2 Options
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3FFD'
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'3FFE'
Si necesitan de otro micro la pueden consultar el el fichero del micro como les comente antes, ahhh bueno pues!!!! me pueden escribir yo se las pongo aqui.
Bueno y para que sirven?
Como lo dije antes son para configurar algunas funciones del micro, como el tipo de oscilador, la proteccion de codigo, habilitar el perro guardian ( por que si no este los muerde), habilitar el reset maestro, habilitar un reset inicial, habilitar reset por bajo voltage en la fuente, y otros que como les dije depende del micro usado.
Ahhh y cuando se usan??
En el momento en que se quiere programar el micro se le deben configurar los fusibles ( esto es usando un software como el WINPIC800, me parece necesario agradecer a los creadores de este software quienes nos permiten descargarlo y usarlo sin ningun problema, www.winpic800.com, GRACIAS!!!!!!) y si estamos usando alguno de los programadores de MICROCHIP como el pickit2 o el pickit3 debemos escribir la configuracion de estos fusibles en la cabecera de nuestro fuente antes de compilar.
Como se que fusibles usa mi pequeño monstruo?
Como siempre digo "pues en el manual del micro", jeje suena obvio, y los podes obtener del fichero que incluimos en la cabecera del fuente, el P16F88.INC por ejemplo, que se encuentra en la carpeta "MPASM suite" que esta dentro de la carpeta "microchip" donde instalamos el MPLAB, ojo que el nombre del fichero depende del micro.
De los ficheros antes mencionados obtube lo siguiente:
Para el 16F84A
_CP_ON EQU H'000F'
_CP_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_PWRTE_OFF EQU H'3FFF'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
de donde se arma nuestra palabra de configuracion anteponiendo la directiva "__CONFIG"
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
Que es lo que debemos poner en la cabecera del fuente.
Aqui va la del 16F88
_CONFIG1 EQU H'2007'
_CONFIG2 EQU H'2008'
;Configuration Byte 1 Options
_CP_ALL EQU H'1FFF'
_CP_OFF EQU H'3FFF'
_CCP1_RB0 EQU H'3FFF'
_CCP1_RB3 EQU H'2FFF'
_DEBUG_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_WRT_PROTECT_OFF EQU H'3FFF' ;No program memory write protection
_WRT_PROTECT_256 EQU H'3DFF' ;First 256 program memory protected
_WRT_PROTECT_2048 EQU H'3BFF' ;First 2048 program memory protected
_WRT_PROTECT_ALL EQU H'39FF' ;All of program memory protected
_CPD_ON EQU H'3EFF'
_CPD_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_MCLR_ON EQU H'3FFF'
_MCLR_OFF EQU H'3FDF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_EXTRC_CLKOUT EQU H'3FFF'
_EXTRC_IO EQU H'3FFE'
_INTRC_CLKOUT EQU H'3FFD'
_INTRC_IO EQU H'3FFC'
_EXTCLK EQU H'3FEF'
_HS_OSC EQU H'3FEE'
_XT_OSC EQU H'3FED'
_LP_OSC EQU H'3FEC'
;Configuration Byte 2 Options
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3FFD'
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'3FFE'
y la palabra seria algo como esto:
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;Program Configuration Register 2
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
Si necesitan de otro micro la pueden consultar el el fichero del micro como les comente antes, ahhh bueno pues!!!! me pueden escribir yo se las pongo aqui.
Etiquetas:
16F84A,
16F88,
bit's,
cristal,
fusibles,
memoria,
microchip,
microcontrolador,
MPLAB IDE,
oscilador,
perro guardian
jueves, 22 de julio de 2010
Instalando Code::Blocks; Un IDE para C++
CODE::BLOCKS
es un entorno de desarrollo integrado libre y multiplataforma para el desarrollo de programas en lenguaje C++. Está basado en la plataforma de interfaces gráficas WxWidgets, lo cual quiere decir que puede usarse libremente en diversos sistemas operativos, y está licenciado bajo la Licencia pública general de GNU. LEER MAS
El parrafo anterior fue tomado de la Wikipedia http://es.wikipedia.org
Estos son los pasos para instalar Code::blocks en Linux ( en mi caso fue Debian Lenny)
Lo primero que tenemos que hacer es descargar code::Blocks de este lugar http://www.codeblocks.org/
Entramos a la carpeta donde los guardamos y lo descomprimimos
tar -xzvf codeblocks-********* según la versión que tengamos
así entonces tenemos varios archivos para instalar, pero primero hay que satisfacer algunas dependencias.
Debemos tener instalado “build-essential” y si no es el caso entonces lo instalamos
apt-get install build-essential
y despues instalamos el resto de librerías
apt-get install libwxbase2.8-0 libwxgtk2.8-0 binutils libwxgtk2.8-dev libwxgtk2.8-dbg
si no se instala debemos fijarnos en la salida del apt para saber que dependencias no estamos cumpliendo y las instalamos.
Ahora nos situamos donde desempaquetamos el codeblocks e instalamos en el siguiente orden
dpkg -i libcodeblocks**** la versión que tengamos
dpkg -i codeblocks*****
dpkg -i libwxsmithlib****
dpkg -i codeblocks-contrib****
dpkg -i codeblocks-dbg****
los asteriscos los reemplazamos con la versión que descargamos, aunque presionando el tabulador se nos completa el nombre, ahhhh claro eso si estamos ubicados en la carpeta del codeblocks que bajamos.
Y listo ya lo podemos usar, en el menú de gnome—programación--codeblocks
tengamos en cuenta que también hay versión para usar con windows.
tengamos en cuenta que también hay versión para usar con windows.
domingo, 18 de julio de 2010
GUIA DE INICIO RAPIDO PARA PROGRAMAR MICROCONTROLADORES PIC DE MICROCHIP
Que es un microcontrolador?
Inicialmente podríamos decir que un microcontrolador es un circuito integrado que se puede programar para que haga lo que nosotros queremos, pero es eso y mucho mas, es una computadora, claro esta que del tamaño de un circuito integrado, pero hace las mismas funciones que esta.
Un microcontrolador permite entrada de información (entradas), tiene la capacidad de procesar esa información, y entrega los resultados del procesamiento(salida), siendo este el esquema básico de una computadora, solo que a una escala muy pequeña.
Que necesitamos para hacer funcionar un microcontrolador?
Un programa que le diga que es lo que tiene que hacer, esto es lo mismo que hacen los programas de computadora, le dicen a esta que hacer.
Y como hacemos estos programas?
Los microcontroladores son sistemas digitales, por lo tanto entienden unos y ceros, pues entonces sera cuestión de escribir el programa en secuencias de unos y ceros, lo que a nosotros los humanos nos resultaría una tarea muy complicada, entonces para ello se inventaron los lenguajes de programación, que son mas fáciles de entender por nosotros y nos facilitaran la tarea de escribir los programas, para el caso de los microcontroladores cada fabricante proporciona un lenguaje con el cual se pueden controlar estas maquinas llamado lenguaje Ensamblador( Assembler ). mas adelante veremos que también se pueden programar con otros lenguajes.
Fabricantes de microcontroladores hay muchos, Freescale(Motorola), Intel, Microchip, Atmel, entre otros. Yo me ocupare de los que fabrica la empresa Microchip, mas conocidos como PIC's. La razón para usarlos es lo fácil que es conseguirlos, la variedad y lo económicos que resultan, ya que hay muchas referencias de PIC's y las herramientas para trabajar con ellos son muy fáciles de conseguir.
Para empezar no dirigimos a la pagina de Microchip y descargamos el programa MPLAB IDE (http://www.microchip.com ), este programa es para escribir en ensamblador lo que queremos que haga el microcontrolador y después traducirlo al lenguaje que entiende la maquina, a este proceso se le denomina comúnmente “compilar el programa” , claro que este programa tiene muchas mas funciones, también nos permite simular el programa, que es muy útil para encontrar errores cuando no nos funciona como queremos.
Bueno la idea era explicar la forma de programar un microcontrolador de forma fácil y no extenderme tanto, pero resulta muy difícil por que este tema es muy extenso, así que voy a empezar y espero que practicando vamos aprendiendo.
Instalamos el MPLAB
En windows
vamos a : Inicio-Programas-Microchip-MPLAB IDE
En Linux
Lo instalamos con el Wine por que no tenemos una versión de este entorno gráfico para Linux, claro que si en modo consola. Existen otras formas de trabajar los PIC's en Linux como el Piklab, que es un entorno gráfico Open Source.
Esta es la vista al iniciar el MPLAD IDE, inicialmente vamos a hacer un programa sencillo, no crearemos un proyecto. Podemos cerrar las dos ventanas internas que aparecen.
Esta es la vista del PikLab para Linux
Vamos a File-New y nos abre una hoja de un editor de texto donde escribiremos nuestro primer programa. Aparece la ventana con el nombre Untitled, por que no hemos dado un nombre a nuestro programa.
Los archivos con el código de nuestro programa (código fuente) se deben guardar con la extensión .ASM, el programa que vamos a hacer como ejemplo hará que el micro prenda y apague un LED conectado en uno de sus pines ( el pin RB0 en este caso), este es como el “hola mundo” en la programación de microcontroladores, así que lo llamaremos onoff.asm.
En este punto debemos ya escoger que referencia de microcontrolador vamos a trabajar, ya que como habíamos dicho antes hay muchas referencias. El mas básico y mas usado de todos lo PIC para el aprendizaje es el PIC 16F84A, por lo que entonces el primer programa lo voy a hacer con este microcontrolador, pero después seguiré usando el PIC 16F88, ya que es un PIC mas potente que el anterior.
Empecemos copiando este código en el MPLAB
LIST P=16F84A
INCLUDE P16F84A.INC
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
ORG 00
GOTO CONFIGURACION
CONFIGURACION NOP
BANKSEL TRISA
CLRF TRISB
BANKSEL PORTB
CLRF PORTB
CICLO BSF PORTB,0
BCF PORTB,0
GOTO CICLO
END
Noten que se mantiene un orden respecto a las columnas (3 columnas), esto lo hacemos con el tabulador y es muy importante que se respete este orden. Después de haber copiado el programa, lo guardamos, en la opción File Name escribimos el nombre onoff.asm(no olviden la extensión .asm) y el la opción Files of Tipes seleccionamos la segunda opción “Assembly Source Files (*.asm.......) y le damos guardar(Save).
Notemos como al guardarlo cambian los colores del texto en el código.
Ya tenemos listo el código fuente. Recordemos que este esta escrito en el lenguaje de programación llamado Ensamblador o Assembler, y que la maquina no entiende esto, por eso lo debemos traducir para que la maquina lo entienda (compilar ) y para ello debemos seguir los siguientes pasos:
Seleccionar el microcontrolador en la opción Configure—Select Device nos aparece la siguiente ventana y seleccionamos nuestro PIC16F84A.
Compilar el programa con la opción Project—Quickbuild onoff.asm
y si todo sale bien no aparece esta ventana diciendo que la compilación fue un éxito, que tuvo 0 errores y BUILD SUCCEEDED
Ya tenemos nuestro programa listo para enviárselo al PIC, pero de eso nos ocuparemos mas adelante, por ahora nos interesa saber como se puede hacer la simulación en el MPLAB.
Vamos Debugguer—Select Tool—MPLAB SIM. Esto es para activar el simulador.
Para la simulación tenemos las siguientes opciones que aparecen en el menu Debugguer y nos van a ser de mucha utilidad
Processor Reset F6 Reset del procesador
Step Into F7 Simulación paso a paso
Steo Over F8 Simulación paso a paso realizando las subrrutinas en tiempo real( las llamadas con CALL)
Al seleccionar el MPLAB SIM y presionar F6 tenemos la siguiente vista, noten la FLECHA VERDE que aparece en la linea 7 despues de la sentencia “ORG 00” (llamado vector de reset), esto es por que alli es donde empieza el procesador despues de un reinicio(reset).
Si presionamos F7 vemos como el programa va avanzando siguiendo las ordenes que dimos al microcontrolador.
Como lo mensione al inicio este programa enciende y apaga un led conectado en el pin RB0 del micro, para observar esto en la simulacion hacemos lo siguiente:
vamos al menu View—Watch y obtenemos la siguiente vista
Vamos a organizar las dos ventanas para que se puedan ver al mismo tiempo y podamos observar como se comporta el microcontrolador en la simulación.
En la ventana Watch hacemos click derecho sobre la siguiente barra
y escojemos del menu que se nos muestran varias opciones, solo las 3 siguientes(por ahora)
Symbol Name
Decimal
Binary
y la barra nos quedara así
luego escogemos de la lista
que esta al lado del boton
la opción PORTB presionamos el botón y tendremos la siguiente vista
así ya tenemos todo listo para simular nuestro primer programa.
Básicamente las siguientes lineas de código son las que hacen prender y apagar el LED:
CICLO BSF PORTB,0
BCF PORTB,0
GOTO CICLO
Para entender la simulación debemos saber que los pines del microcontrolador están relacionados con algo que se llaman puertos de entrada/salida, nuestro micro tiene dos puertos el PORTA y el PORTB (así los bautizo el fabricante), cada uno de estos puertos esta dispuesto internamente en el micro como un Byte ( 8 bit's, se acuerdan de la electrónica digital, aquí aplica!!), por eso es que en la gráfica del Watch aparecen al frente del PORTB y debajo de la palabra Binary 8 ceros ( 00000000 ) que representan un Byte ( también se le llama REGISTRO), que a su vez representa 8 pines del micro asociados con el PORTB, osea que cada bit del registro (Byte) PORTB es un pin del circuito integrado ( del PIC), que trabalenguas, miremos la siguiente tabla:
PORTB
RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Presionemos F7 hasta llegar(la flecha verde se mueve cada vez que presionamos F7) a la linea “GOTO BSF PORTB,0”, note que el RB0 es igual a 0 (cero)
presionemos F7 y vemos como cambia a 1 (uno).
Presionemos F7
presionamos F7 y vemos como se repite este ciclo una y otra vez, logrando con esto que el LED conectado al pin RB0 encienda y apague.
Presionamos F7 y vemos como la flecha verde se posiciona de nuevo al frente de ciclo.
Con esto doy por terminada esta guiá de iniciación a la programación de microcontroladores PIC, ya con esto lograremos escribir y simular nuestros programas, en una próxima guiá describiré los pasos para lograr hacer que funcione en un board con un micro de verdad( y no en simulaciones)
Usted puede compiar, distribuir y/o modificar este doucmento bajo los terminos de la GFDL (licencia de documentacion libre de GNU) versión 1.3 o superior publicada por la fundacion de sontware libre.
Copyright (C) Edwin Espinosa Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
Etiquetas:
assembler,
binario,
Byte,
circuito integrado,
compilar,
debugger,
ensamblador,
Freescale,
instalacion,
instrucciones,
microchip,
microcontrolador,
MPLAB IDE,
PIC,
Piklab,
programacion,
simulacion
Suscribirse a:
Entradas (Atom)