Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Apuntes / Mini-Prácticas de programación ensamblador y en C para microcontroladores - Empezando con leds e interruptores simples

Mini-Prácticas de programación ensamblador y en C para microcontroladores - Empezando con leds e interruptores simples

 ****- (34 opiniones)
Creative Commons Apuntes de BADBYTE-K - 20 de Enero de 2005
Temas Relacionados: Equipos electrónicosElectrónica
2. Empezando con leds e interruptores simples
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
Autor y licencia de 'Mini-Prácticas de programación ensamblador y en C para microcontroladores - Empezando con leds e interruptores simples'
BADBYTE-K Extraído de: http://foro.elhacker.net/index.php/topic,43897.0.html

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Mini-Prácticas de programación ensamblador y en C para microcontroladores - Empezando con leds e interruptores simples'

Con este humilde artículo espero facilitar la comprensión del Inline Assembly en Gcc. Si bien... Más »
Es evidente que estamos empezando una nueva era. La era industrial, de la cual cada... Más »
Las investigaciones históricas han comprobado que el petróleo, o aceite mineral (petrae = piedra y... Más »
Según Philip Kotler, la relación comercial puede ser de diferentes tipos. Con la terminología de... Más »
A partir de tres tesis que se enmarcarían de la siguiente forma: a) la omnipresencia... Más »
¿Estás seguro de que deseas eliminar este capítulo?