Código para la programación de la PIC16f877 para los mortoreductores en ensamblador.
;CECYT 9 JUAN DE DIOS BATIZ
;
;PROYECTO AULA: MPPACMAN (PAC-MAN MULTIJUDAGOR)
;
;GRUPO: 5IM3
;EQUIPO: ##
;INTEGRANTES:
;CRUZ MONTEJO JORGE LUIS
;LINO SUAREZ MARIA DE LOS ANGELES
;VELAQUEZ HERNANDES SANDRA
;TORRES RODRIGUEZ JOSE DESIDERIO
;ZUÑIGA ZAMUDIO ANGEL
;FECHA DE ENTREGA:
;
;COMENTARIO:
;
;---------------------------------------------------------------------------------------------------------------------------------------------------------------
list p=16f84A;
#include "c:\Program Files (x86)\Microchip\MPASM Suite\p16f84a.inc";
;---------------------------------------------------------------------------------------------------------------------------------------------------------------
;====================================================================
;
; Register Definitions
;
;==========================================================================
W EQU H'0000';
F EQU H'0001';
;---------------------------------------------------------------------------------------------------------------------------------------------------------------
;----- Register Files -----------------------------------------------------
STATUS EQU H'0003';
PORTA EQU H'0005';
PORTB EQU H'0006';
;---------------------------------------------------------------------------------------------------------------------------------------------------------------
;-----Bank1------------------
TRISA EQU H'0085';
TRISB EQU H'0086';
;----------------------------------------------------------------------------------------------------------------------------------------------------------------
;DEFINICION DE VARIABLES DEL PROGRAMA EN RAM
Contador1 EQU 0x20;
Contador2 EQU 0x21;
Contador3 EQU 0x22;
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;
;----- STATUS Bits -----------------------------------------------------
C EQU H'0000';
DC EQU H'0001';
Z EQU H'0002';
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;Definicion de constantes a utilizar
M EQU .255;
N EQU .255;
L EQU .255;
CAR_NULL EQU 00h;
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;Definicion de puertos I/O
;----- PORTA Bits -----------------------------------------------------
Sin_UsoRA0 EQU .0;
AV_ADELANTE EQU .1;
AV_ATRAS EQU .2;
AV_DERECHA EQU .3;
AV_IZQUIERDA EQU .4;
progA EQU B'00001';
;----- PORTB Bits -----------------------------------------------------
Mot1 EQU .0;
Mot1_2 EQU .1;
MOT2 EQU .2;
MOT2_2 EQU .3;
Sin_UsoRB4 EQU .4;
Sin_UsoRB5 EQU .5;
Sin_UsoRB6 EQU .6;
Sin_UsoRB7 EQU .7;
progB EQU B'11110000';
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;==========================
;====== VECTOR RESET ======
;==========================
vec_reset org 0000h;
clrf pclath;
goto prog_prin;
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;=========================================
;====== SUBRUTINA DE INTERRUPCIONES ======
;=========================================
org 0004h;
vec_int nop;
retfie;
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;===============================================
;====== SUBRUTINA DE INI. DE REG. DEL PIC ======
;===============================================
prog_ini bsf status,RP0; Ponte en el Banco 1 de RAM.
movlw 0x00;
movwf option_reg ^0x80;
movlw progA;
movwf TRISA ^0x80;
movlw progB;
movwf TRISB ^0x80;
bcf STATUS,RP0; Ponte en el banco 0 de la RAM.
return;
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
;================================
;====== PROGRAMA PRINCIPAL ======
;================================
prog_prin call prog_ini
;------------------------------------------------ MOVIMIENTOS PRIMARIOS, AVANCES;----------------------------------------------------------------------------------
INICIO BTFSC PORTA,1;
GOTO INI2;
BTFSC PORTA,2;
GOTO INI2;
GOTO GIROS;
INI2 BTFSS PORTA,1;
GOTO ATRAS;
BTFSS PORTA,2;
GOTO ADELANTE
GOTO OFF;
ADELANTE BTFSC PORTA,2;
GOTO OFF;
MOVLW CAR_NULL;
MOVWF PORTB;
MOTORES BCF PORTB,1;
BCF PORTB,3;
BSF PORTB,0;
BSF PORTB,2;
BTFSS PORTA,1;
GOTO INICIO
GOTO MOTORES;
ATRAS BTFSS PORTA,2;
GOTO OFF;
MOVLW CAR_NULL;
MOVWF PORTB;
MOTORESR BCF PORTB,0;
BCF PORTB,2;
BSF PORTB,1;
BSF PORTB,3;
BTFSS PORTA,2;
GOTO INICIO;
GOTO MOTORESR;
OFF MOVLW CAR_NULL;
MOVWF PORTB
NOP;
GOTO INICIO;
;---------- MOVIMEINTOS SECUANDARIOS (GIROS)---------------------------------------------
GIROS BTFSS PORTA,3;
GOTO IZQUIERDA;
MOVLW CAR_NULL;
MOVWF PORTB;
DERECHA BSF PORTB,0;
BTFSS PORTA,3;
GOTO OFF;
GOTO DERECHA;
IZQUIERDA BTFSS PORTA,4;
GOTO OFF;
MOVLW CAR_NULL;
MOVWF PORTB;
GOTO IZQ;
IZQ BSF PORTB,2;
BTFSS PORTA,4;
GOTO OFF;
GOTO IZQ;
;-----------------------------------------------------------------------------------------------------------------------------------------------------------------
end;
CÓDIGO EN ENSAMBLADOR PARA LA PROGRAMACIÓN DE LA PIC16f84.
La programación consiste en luces rítmicas que se colocaran en el Pacman y Blinky (el fantasma rojo)
;INSTITUTO POLITECNICO NACIONAL.
;CECYT 9 JUAN DE DIOS BATIZ.
;
;PROYECTO AULA.
;MANEJO DE 8 LEDS.
;
;EQUIPO: GRUPO:
;
;INTEGRANTES:
;
;
;FECHA DE ENTREGA:_____________________________.
;
;DESCRIPCION: ESTE PROGRAMA TIENE LA FINALIAD DE CONTROLAR EL ENCEDIDO Y EL APAGADO DE 8 LEDS
;
;----------------------------------------------------------------------------------------------------------------------------------------------------------------
list p=16f84a;Define el microcontrolador a usar.
#include "c:\Program Files (x86)\Microchip\Mpasm Suite\p16f84a.inc"; Adjunta las funciones de los registros especiales.
;----------------------------------------------------------------------------------------------------------------------------------------------------------------
;Definición de variables del programa en RAM.
Contador1 EQU 0x20;
Contador2 EQU 0x21;
Contador3 EQU 0x22;
;----------------------------------------------------------------------------------------------------------------------------------------------------------
;Definición de constantes a utilizar.
M EQU .12;
N EQU .255;
L EQU .255;
;---------------------------------------------------------------------------------------------------------------------------------------------------------
;Definición de caracteres.
Car_A EQU 0x07;
Car_b EQU 0x0E;
Car_C EQU 0x1C;
Car_d EQU 0x38;
Car_E EQU 0x70;
Car_F EQU 0xE0;
Car_g EQU 0xC1;
Car_H EQU 0x83;
;Puerto A.
CLk_Pto EQU .0;
Sin_UsoRA1 EQU .1;
Sin_UsoRA2 EQU .2;
Sin_UsoRA3 EQU .3;
Sin_UsoRA4 EQU .4;
Sin_UsoRA5 EQU .5;
Sin_UsoRA6 EQU .6;
Sin_UsoRA7 EQU .7;
progA EQU B'01111111';Define la configuración de los bits del puerto A.
;Puerto B.
D0_sega EQU .0;
D1_segb EQU .1;
D2_segc EQU .2;
D3_segd EQU .3;
D4_sege EQU .4;
D5_segf EQU .5;
D6_segg EQU .6;
D7_segh EQU .7;
progB EQU B'00000000';Define la configuración de los bits del puerto B.
;
;----------------------------------------------------------------------------------------------------------------------------------------------------------
;==================
;== Vector Reset ==
;==================
org 0000h;
vec_reset clrf pclath;
goto prog_prin;
;----------------------------------------------------------------------------------------------------------------------------------------------------------
;=================================
;== Subrutina de Intercepciones ==
;=================================
org 0004h;
vec_int nop;
retfie;
;---------------------------------------------------------------------------------------------------------------------------------------------------------
;=============================================
;== Subrutina de Inicio de Registro del PIC ==
;=============================================
prog_ini bsf status,RP0;Ponte en el banco 1 de RAM.
movlw 0x34;
movwf option_reg ^0x80;
movlw progA;
movwf trisA ^0x80;
movlw progB;
movwf trisB ^0x80;
bcf status,RP0;Banco 0 de la RAM.
clrf porta;
return;
;--------------------------------------------------------------------------------------------------------------------------------------------------------
;========================
;== Programa principal ==
;========================
prog_prin call prog_ini;
repite movlw car_A ;
movwf portb;
bsf porta,CLK_Pto;
nop;
bcf porta,CLK_Pto;
call retraso
movlw car_b;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
movlw car_c;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
movlw car_d;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
movlw car_e;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
movlw car_f;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
movlw car_g;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
movlw car_h;
movwf porta;
bsf portb,CLK_Pto;
nop;
bcf portb,CLK_Pto;
call retraso
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
retraso movlw M;
movwf Contador3;
Loop3 movlw N;
movwf Contador2;
Loop2 movlw L;
movwf Contador1;
Loop1 decfsz Contador1,f;
goto Loop1;
decfsz Contador2,f;
goto Loop2;
decfsz Contador3,f;
goto Loop3;
return;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
goto repite
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end;
No hay comentarios:
Publicar un comentario