programa en ensamblador
Citar;Programa que lee el numero binario introducido mediante 3
;interruptores simples konectados al puerto A (pines RA0,RA1,RA2), luego suma 2 unidades
;a ese valor y visualiza el resultado mediante 4 diodos led conectados al
;puerto B (pines RB0, RB1,RB2,RB3).
;
LIST P=16C84 ;Comando que indica el PIC usado
RADIX HEX ;Los valores se representar n en hexadecimal
;
PUERTAA EQU 0X05 ;La etiqueta "PUERTAA" queda identificada con
;la direcci¢n 0x05, que si corresponde con el
;banco 0 es el valor de PUERTAA y si es del
;banco 1 con el de TRISA.
PUERTAB EQU 0X06 ;Equivalencia de la etiqueta PUERTAB
ESTADO EQU 0X03 ;Estado corresponde con el valor 0x03.
W EQU 0 ;Identifica W con el valor 0.
;
ORG 0 ;Comando que indica al Ensamblador la
;direcci¢n de la memeoria donde se
;situar la instruci¢n siguiente
;
bsf ESTADO,5 ;Pone a 1 el bit 5 de ESTADO para direccionar
;la p gina 1 de la memoria de datos.
movlw 0xff ;W <-- FF(Hex)
movwf PUERTAA ;W --> TRISA
movlw 0x00 ;W <-- 0
movwf PUERTAB ;W --> TRISB (Las l¡neas de PB salidas)
bcf ESTADO,5 ;Pone a 0 el bit 5 de ESTADO pasando a
;acceder al banco 0.
inicio movf PUERTAA,W ;W <-- PUERTAA. Se introduce el valor binario
;de los interruptores.
addlw 2 ;W <-- W + 2
movwf PUERTAB ;W --> PUERTAB. El valor de W sale por las
;l¡neas de PB a los led.
goto inicio ;Salta a la instrucci¢n precedida por la
;etiqueta de inicio.
END
Programando en C
Citar/* Programa que suma 2 unidades al valor que entra por la PuertaA */
/* mediante unos interuptores y visualiza el resultado mediante unos leds
/* que se suponen conectados al puerto b igual que el anterior */
#INCLUDE <16C84.H>
void main(void)
{
int valor; /* Valor temporal */
int * p_puertaa= 0x05; /* Puntero a PuertaA */
int * p_puertab= 0x06; /* Puntero a PuertaB */
SET_TRIS_A (0xff); /* 0xff --> TRISA */
SET_TRIS_B (0x00); /* 0x00 --> TRISB */
do {
valor = * p_puertaa; /* PuertaA --> valor */
valor += 2; /* se incrementa valor en 2 */
*p_puertab = valor; /* valor --> puertaB */
} while (TRUE); /* Bucle infinito */
}
otro parecido
Citar; Controla cinco interruptores conectados a RA0-RA4 y enciende una serie de
; leds en las puertas RB0-RB4 dependiendo de las entradas introducidas por la puerta A.
; Con un 0 en la puerta A se enciende el le correspondiente de la puerta B
LIST p=16c84 ; Se usa el PIC16C84
RADIX hex ; Se emplea el sistema de numeraci¢n hexadecimal
; ZONA DE ETIQUETAS
W EQU 0 ; Cuando el destino es W, d = 0
F EQU 1 ; Cuando el destino es el registro f, d = 1
PUERTAA EQU 0x05 ; La Puerta A (datos) ocupa la direcci¢n 5 del ; banco 0 y el registro de configuraci¢n la ; direcci¢n 5 del banco 1
PUERTAB EQU 0x06 ; La misma etiqueta para el registro de datos y el ; de configuraci¢n de la Puerta B
ESTADO EQU 0x03 ; El registro Estado ocupa direcci¢n 3 de los dos ; bancos
; COMIENZO DEL PROGRAMA
ORG 0 ; El programa comienza en la direcci¢n 0 (Vector Reset)
goto inicio ; Se salta a la etiqueta “inicio”
ORG 5 ; Se asigna la direcci¢n 5 a la siguiente instrucci¢n
inicio bsf ESTADO,5 ; Pone a 1 el bit 5 de Estado. Acceso al banco 1.
clrf PUERTAB ; Se configuran como salidas las l¡neas de la Puerta B
movlw 0xff ; El registro W se carga con unos
movwf PUERTAA ; Se configuran como entradas las l¡neas de la Puerta A
bcf ESTADO,5 ; Pone a 0 el bit 5 de Estado. Acceso al banco 0.
bucle movf PUERTAA,W ; Carga el registro de datos de Puerta A en W
comf PUERTAA,W ; Complementa a 1 la entrada y la deposita en W
movwf PUERTAB ; El contenido de W se deposita en el registro de datos de ; la Puerta B
goto bucle ; Se crea un bucle cerrado e infinito
END ; Fin del programa
en C
Citar/* Lee el valor de cinco interruptores en la puerta A y saca por */
/* la puerta B el valor inverso */
#include <16c84.h>
#byte puertaa = 05 /* Posici¢n de la puerta A */
#byte puertab = 06 /* Posici¢n de la puerta B */
void main( void )
{
int temp;
set_tris_a( 0xFF ); /* Puerta A configurada para entrada */
set_tris_b( 0x00 ); /* Puerta B configurada para salida */
do { /* La variable temporal es necesaria porque */
temp = ~puertaa; /* la complementaci¢n se traduce en dos pasos: */
puertab = temp; /* a) Copia de puertaa en temp */
} /* b) Complementaci¢n de temp */
/* De no hacerlo as¡ los LED parpadear¡an */
while( TRUE ); /* Repetir ininterrumpidamente */
}
saludox