TP Iniciación a la programación del µC PIC 16F84A
en Mikro C
I) Objectifs :
El presente TP tiene como objetivo la programación de los puertos de entrada y salida A y B. En primer lugar
Lugares donde veremos el encendido en secuencia de 8 leds conectados al puerto B, luego introduciremos la
programación de microcontroladores con el lenguaje C para permitir encendido en
secuencia de 8 leds conectados al puerto B de abajo hacia arriba y viceversa utilizando botones para ambos.
También se presentará el software Mikro C para la creación de proyectos.
II) Manipulaciones
Primera parte: Encendido en secuencia de 8 leds conectados al puerto B
Escribir en MPLAB el programa siguiente en lenguaje ensamblador
Con Proteus, esquematice sus circuitos y cargue el archivo generado en *.hex en el
PIC
Segunda parte: Encendido en secuencia de 8 leds conectados al puerto B de abajo hacia arriba
o viceversa mediante botones para ambos.
Escribir en mikroC el siguiente programa en lenguaje C
Con Proteus, esquematiza tus circuitos y carga el archivo generado en *.hex
en el PIC
III) Presentación del software Mikro C.8-2 para la creación de proyectos
El mikroC PRO para PIC organiza aplicaciones en proyectos, compuesto de uno solo
archivo de proyecto (extensión .mcppi) con uno o varios archivos de fuente (extensión).
La mejor manera de crear un proyecto es con la ayuda del asistente de nuevo proyecto.
(menú Proyecto> Nuevo Proyecto) o haciendo clic en el ícono nuevo proyecto desde la
barra de herramientas del proyecto.
1
Comience por dar un nombre en Nombre del Proyecto, en nuestro caso TP 1.
2
A continuación, especifica la ubicación donde se guardará tu proyecto.
En la ventana de descripción, puedes añadir una descripción del proyecto a
realizar.
En la sección DISPOSITIVO seleccione el tipo de microcontrolador en el que
usted trabaja, también debe ingresar el valor de la frecuencia del oscilador 4MHZ
(Oscilador XT, y el WDT si es necesario)
Última etapa - Haga clic en ok para crear su nuevo proyecto
En este punto, se abre una nueva ventana vacía para que puedan allí
introduzca su programa
3
ENCENDIDO 8 LED EN SECUENCIA
RADIX DIC
INCLUIR [Link]
ORG
COUNT_1 EQU 0C ;Contador
CONTAR_2 EQU 0D Contador
SALIDA EQU 0E
CARGAR EQU 00 Bit de acarreo
4
ALLUMAGE 8 LEDS EN SEQUENCE AVEC 2 BOUTTONS
radix hex
INCLUIR "[Link]"
COUNT_1 EQU 0C ;Compteur
COUNT_2 EQU 0D ;Compteur
PIC84 EQU 03FF ;
LLEVAR EQU 00
SORTIE EQU 0E
ORG PIC84
GOTO INIT ;ir a INIT
INICIAR ORG 0000H
MOVLW 00 ;En W, nombre 0
TRIS PORTB ; Puerto B configurado como salida
MOVLW 0FF
TRIS PORTA ;Puerto A configurado como entrada
MOVLW 0FF ;En W, nombre 255
MOVWF COUNT_1 ;COUNT_1 en W
MOVLW 0FF
MOVWF COUNT_2
MOVLW 01
MOVWF SORTIE ;SORTIE = 1
Programa principal
MOVF SORTIE,1 ;En W, salida
MOVWF PORTB ;Salida en PORT_B
LLAMAR RETARDO ;Rutina de retraso
MAIN BTFSS PORTA,3 ;¿Botón P1 presionado?
LLAME ARRIBA ;Si sí, la rutina ARRIBA
BTFSS PORTA,5 ;¿Botón P2 presionado?
LLAMAR ABAJO ;Si oui, la routine ABAJO
CALL DELAY
clrwdt
IR A PRINCIPAL
UP BCF 0PTION,CARRY ;La remise à zéro du bit carry C
RLF PORTB ; tourner à gauche
BTFSS STATUS,CARRY ;¿Es esta la última posición?
RETURN ;Si no, regresa
RRF PORTB ;Si oui, la condition initiale
RETURN ;Return
ABAJO BCF ESTADO,PORTAR ;La remise à zéro del bit carry C
RRF PORTB ;tournar a la derecha
BTFSS STATUS,CARRY ;¿Es esta la última posición?
RETURN ;Si no, regresa
RLF PORTB ;Si oui, la condition initiale
RETURN ;Return
Rutina de retraso
DELAY DECFSZ COUNT_1,1 ;Decrementa COUNT_1
GOTO DELAY ;Si no tenemos 0, ir a DELAY
MOVLW 0FF
MOVWF COUNT_1 ;Recargar COUNT_1
DECFSZ COUNT_2,1 ;Décremente COUNT_2
GOTO DELAY ;Si no tenemos 0, ir a DELAY
MOVLW 0FF
MOVWF COUNT_1 ;Recargar COUNT_1
MOVLW 0FF
MOVWF COUNT_3 ;Recargar COUNT_2
DEVOLVER ; ir al programa principal
Final
void main()
{
unsigned char J = 1;
TRISB = 0; // PORTB está configurado en
ENCENDIDO 8 LEDS EN SECUENCIA
ENCENDIDO 8 LEDS EN SECUENCIA CON 2 BOTONES
void main()
{
unsigned char J = 1;
unsigned char a = 0x80;
TRISB = 0; // PORTB está configurado como salida
for(;;) // Bucle sin fin
mientras(PORTA.f0=1)
PORTB = J; // Enviar J al PORTB
Delay_ms(100); // Pausa 100 ms
J = J << 1; // Décalage a la izquierda J
si(J == 0) J = 1;
mientras(PORTA.f1=1)
PORTB = a; // Enviar J al PORTB
Delay_ms(100); // Pausa 100 ms
a = a >> 1; // Décalage a la izquierda J
si(a == 0x00 ) a = 0x80;
} // Si la última LED, encender la 1ª LED