Capitulos de este wiki
  1. 1 Sumando en ensamblador con microcontroladores
  2. 2 Empezando con leds e interruptores simples

2 - Empezando con leds e interruptores simples

[editar]
Apuntes creado por BADBYTE-K. Extraido de: http://foro.elhacker.net/index.php/topic,43897.0.html
30 de Noviembre de 1999
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
[editar]

35 opiniones

Buen inicio.

A decir verdad estos programas son un indicio muy basico a los microcontroladores pic en cuanto a programacion de los mismos; mi opinion se refiere a que si se quiere ejemplificar algun contenido en pic`s se agradece tomar graficos y y una estructura completa de los programas ya que los mismos si se quiere iniciar en este mundo de los microcontroladores no sirvern de mucha ayuda.
Ensamble.

Exelente para mi que quiero iniciarme en microcontroladores.
Microcontroladores.

Pienso que lo expuesto esta bien para a quella gente que tiene interes y motivacion en aprender este apasionante tema los felicito y adelante.
Pam
Y bueno.

Para los que sabemos del tema... No es gran cosa; para quienes se quiereb iniciar; un buen comienzo.
Bueno pero no optimo.

Bueno pero seria bueno q se de mas comentarios y graficos si es posible. Gracias.
1 2 3 4 5 6 7 | siguiente >

Apuntes relacionados con 'Mini-Prácticas de programación ensamblador y en C para microcontroladores'

Autor y licencia de 'Mini-Prácticas de programación ensamblador y en C para microcontroladores'


Apuntes de BADBYTE-K. Extraido de: http://foro.elhacker.net/index.php/topic,43897.0.html CopyLeft
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.