Duda sobre programa en asm

Hola a todos, es bueno estar en una comunidad de electrónica, es a la primera que me inscribo y ahora es por una duda que me está quemando la cabeza :D , estoy empezando a programar en asm y voy muy desde cero y el primer proyecto que me dispuse es muy simple: un switch que cuando es pulsado se prenda un led y cuando se suelte el led se apague..

Ésto es lo que visualizo en el mplab:

2wem9vq.jpg



Éstos son los errores que me salen al apretar f10:

bdt6wy.jpg


Desde ya muchísimas gracias y espero poder adaptarme bien a la comunidad...
Suerte ! (y)

dragondgold dijo:
Que problema tuviste en el proteus?

Simplemente no puedo hacer que ande ese proyecto en el Proteus, lo cargué en el pic y quedó bien me lo aceptó y lo corre (despues de un par de trabas que me ponía) , pero me parece que es un problema de el archivo .asm.
Acá les dejo una foto del pic ya funcionando y el programa al lado para que vean , puede ser que no hice el cambio de banco de la memoria del micro o algo por el estilo?

6rofhc.jpg
 
La primera línea que has usado: __Config _CP_OFF...... Nunca la he usado si quieres configurar el oscilador en los menús del Mplab te lo permite, ahí esta un error. Los demás errores que te dice sobre PORTA, PORTB, etc es por que no definiste donde se encuentra ese registro. Antes de ORG 000 para comenzar el programa tenes que declarar donde esta todo:

PORTB equ 0x06 ;el puerto B en el PIC16f84 esta en la dirección 0x06 de la memoria
PORTA equ 0x05 ;el puerto A en el PIC16f84 esta en la dirección 0x05 de la memoria

Eso son los puertos donde mandas los 1 y 0, para definirlos como entradas o salidas se hace ya dentro del programa (después de ORG 000):

movlw 0 ;cargo al registro work con 0
tris PORTB ;esta instrucción envía el valor del registro work al puerto B y lo
;configura como entrada o salida depende el valor cargado en W

Si el registro work (W) fuera 1 el puerto sería entrada, así si pones b'0001010' podes definir entradas y salidas en un mismo puerto siempre utilizando la instrucción "tris"

Espero que te alla servido saludos!!
 
Muchísimas gracias dragondgold , la verdad que me ayudaste mucho , éstos son mis principios en programación y me alegra saber que se puede contar con buena gente para resolver problemas que para algunos son complicados , nuevamente ; muchas gracias :D.
 
Ve al menú Configure/Select device... y en la lista Device: elige el PIC16F84A, click en Ok e intenta ensamblar de nuevo para ver que pasa...
 
Vick: agradezco tu ayuda, pero ya lo pude solucionar con el comentario de dragondgold... ahora estoy tratando de llevar ese proyecto terminado y que funcione con el Proteus ahí me trabé de nuevo , pero muchas gracias por ayudar...en serio...es mi primer día acá y la verdad que voy a pasar largo tiempo en este foro , no lo conocía.
 
El primer error es que tenes que poner una R de 10K a positivo de la patita de reset del PIC (MCLR) porque sino el PIC está reseteado siempre. Y no especificas cual es el problema que tenes, solo me decis que te parece que es el programa en asm pero no especificas el problema.

Y segundo ahí no tenes puesto ningún switch ni ningún led para realizar el programa. Además tenes un 0 en todo el puerto B, entonces en el puerto A (según tu programa) RA0 debería cambiar a nivel 0 para apagar el led pero no puede porque has conectado todo el puerto A a positivo, por que?
 
hola yo tengo un problema similar. quiero aprender a usar el mplab y copie un programa de un tutorial para encerder y agar un led, pero cuando lo intento copilar me da el siguiente error


Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\Archivos de programa\MPASM Suite\MPAsmWin.exe" /q /p16F628A "mi.asm" /l"mi.lst" /e"mi.err"
Warning[207] D:\PROYECTO\MI.ASM 13 : Found label after column 1. (Inicio)
Error[128] D:\PROYECTO\MI.ASM 19 : Missing argument(s)
Warning[207] D:\PROYECTO\MI.ASM 21 : Found label after column 1. (Fin)
Halting build on first failure as requested.
BUILD FAILED: Sat Oct 23 23:37:57 2010[/B]

este es el codigo del programa. no se como poderlo copilar con exito, por favor le agredezco su ayuda.
; Programa que enciende un led conectado al pin 17 del PIC
; Inicializa el puerto A y configura el bit 0 del mismo como salida
; Fecha: 21.01.07 Autor: Jorge A. Bojórquez micropic.wordpress.com


list p=16f628a ; Declaración del procesador
include p16f628a.inc ;
__config 0x3F38 ; Declaración de la configuración
; Inicio del programa
org 0x00 ; Vector de Inicio
goto Inicio ; Ir a la etiqueta 'Inicio'

Inicio movlw 0x07 ; Cargar al acumulador W el valor 0x07 para
movwf CMCON ; deshabilitar comparadores analógicos
bsf STATUS,RP0 ; Seleccionar el banco de memoria 1
bcf PORTA,0 ; Configurar el bit 0 del puerto A como salida
bcf STATUS,RP0 ; Seleccionar el banco de memoria 0

bsf PORTA ; Enciende el led conectado al puerto A

Fin goto $

end
 
Antetodo , espero no haberme equivocado de foro para formalizar esta pregunta.

Seguidamente aclarar que soy nobel en estos temas , por lo que estoy estudiando por mi cuenta atraves del libro "Microcontrolador PIC16F84 - Desarrollo de proyectos ", y espero podais aclarar estas 2 dudas .

En el tema 9 que habla sobre los saltos, entra en como hacer comparaciones de registros y en un fragmento de programa esta mi duda :

011 movf registroB,W
012 subwf registroA,W
013 btfss STATUS,C
014 goto menor

la ins btfss f,b tiene afectados los flags C,DC,Z
la ins movf f,d tiene afectados lel flag Z
Mi pregunta es la siguiente :
El registro STATUS se referira sienpre a su instruccion que le precede , tanto sea con el registro W , como con cualquier otro registro ??

Y en este otro fragmento de programa

movlw numero
subwf PORTA,W
movlw b´11110000´
btfss STATUS,C

Si quiero comprobar si la entrada PORTA es >= que numero , pone la carga del literal antes de la ins btfss f,b , ya que la ins movlw k no afecta ningun flag ??

Esas son mis pequeñas dudas , y si es asi , gracias ya que voy comprendiendo la importancia de los registros y los flags en la programacion .
Un saludazo Neho
 
El manual del set de instrucciones de microchip te dice que instrucciones afectan a que registros:

http://ww1.microchip.com/downloads/en/DeviceDoc/31029a.pdf

En el ejemplo que pusiste la instruccion MOVLW no afecta a ninguna bandera y la instruccion SUBWF afecta a las banderas C, DC y Z, el mismo manual (pagina 39 por ejemplo) te pone ejemplos de la instruccion y de que banderas afecta en que condiciones:

W=0x01
C = ?
Z = ?

SUBLW 0x02

W = 0x01
C = 1 (resultado positivo)
Z = 0 (resultado no es cero)
 
Atrás
Arriba