TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: hayn en 03 de Marzo de 2008, 22:29:47
-
aparece un mensaje (302) y no se ni que significa ni como arreglarlo, cuando lo simulo paso a paso no entra en apagar
-
Hola hayn..
respecto al mensaje (302) es solo un mensaje de advertencia no de error, la compilacion la realiza, solo te avisa que no es el banco 0. podes eliminar ese aviso poniendo despues de declarar el micro lo siguiente ""ERRORLEVEL -302 ;suppress "not in bank 0" message"
El programa funciona bien, cuando lo simules tenes que hacer que Z sea 0 para que salte a apagado.;------------------------------------------------;
; practica del libro con pic 16f8743a para el ;
; parpadeo de 2 leds Pag#49 ;
;------------------------------------------------;
LIST P=16F873
RADIX HEX
INCLUDE P16F873.INC
ERRORLEVEL -302 ;suppress "not in bank 0" message
ORG 0x00
goto INICIO
ORG 0x05
INICIO bsf STATUS,RP0
bcf STATUS,RP1
clrf TRISB
movlw b'00000110'
movwf ADCON1
movlw b'00000110'
movwf TRISA
bcf STATUS,RP0
clrf PORTB
clrf PORTA
BUCLE movf PORTA,W
btfss STATUS,Z
goto APAGAR
goto ENCENDER
ENCENDER movlw 0xFF
movwf PORTB
goto BUCLE
APAGAR clrf PORTB
goto BUCLE
ENDSaludos...
-
hola picnic,gracias por responder pero como hago que z sea cero, perdona mi ignorancia pero es que soy muy nuevo en esto y tengo 5 meses tratando de hacer parpadear esos 2 leds y no he podido.
-
Me imagino que en RA1 y RA2
movlw b'00000110';
movwf TRISAque los tienes configurado como entradas debes tener unos switches o unos pulsadores y en el puerto B tienes conectados los LEDs, tienes que colocar cero o tierra en esos pines y así Z tiene cero y por consiguiente deberías conseguir apagar el (los) LED(s).
Montalo en proteus.
-
hola picnic,gracias por responder pero como hago que z sea cero, perdona mi ignorancia pero es que soy muy nuevo en esto y tengo 5 meses tratando de hacer parpadear esos 2 leds y no he podido.
Todo Pic tiene un Resitro llamado STATUS , este consta de varios "Flags", entre ellos hay uno llamado "Z", este flag se pone a valor lógico alto cuando en el PIC se realiza alguna operación cuyo resultado sea 0. Por ejemplo si multiplicas un valor 1 con un valor 0 el resultado será 0, si luego verificas el estado de Z en el STATUS , verás que és un uno.
En el código que pusiste hay una línea que verifica el estado del registro Z en el STATUS, esta línea dice
SI te fijas en el datasheet del PIC, en la sección de Set de Instrucciones, podrás ver que "btfss" verifica el estado lógico de un bit dentro de un registro, si elvalor es alto se salta la siguiente instrucción, si es bajo, continúa sin saltar, en este caso verifica el estado del bit Z en el registro STATUS.
Para saber que estado tiene el bit Z, debes fijarte que sucedió justo antes de esa instrucción, lo que nos lleva a la línea que dice:
Esto significa que se cargó el contenido del Puerto A en W, si todo el puerto A está a cero, el bit Z del STATUS se puso a 1, si algún bit del PORTA está a uno, el bit Z del STATUS estará en cero.
Espero te sirva la aclaración.
Salud 8)
-
Creo que lo que esta pidiendo Hayn es como simularlo...
En el MPLAB SIM tenes una herramienta que se llama WATCH, con la cual podes ver el estado de los registros que desees mientras simulas el programa, y a su vez, puedes modificarlos para ver como se ejecutan las rutinas.
En tu caso modifica el registro PORTA para que cuando verifique el flag Z se realice el salto para "apagado".
Espero que me haya explicado claramente... ..aunque no creo.. :D :D :D
SAludos
-
muchas gracias a todos por su valiosa ayuda, picnic ese WATCH a que te refieres es el WATCH DOG o cual, puedes ser un poco mas especifico que apenas estoy intentando aprender a simularlos codigos y en el manual que tengo solo aparese el watch dog y STOP WATCH gracias.
-
No, a lo que me refiero es una herramienta del "mplab ide", en la que te permite ver los registros, atravez de una ventana.
Lo encontras en la barra de arriba en "view", el anteultimo es el "watch".
Suerte!
-
por favor alguien puede indicarme como se inserta correctamente este codigo en la plantilla del mplab ide
**********************************************************************
; This file is a basic code template for object module code *
; generation on the PICmicro PIC16F873A. This file contains the *
; basic code building blocks to build upon. As a project minimum *
; the 16F873A.lkr file will also be required for this file to *
; correctly build. The .lkr files are located in the MPLAB *
; directory. *
; *
; If interrupts are not used all code presented between the *
; code section "INT_VECTOR and code section "MAIN" can be removed. *
; In addition the variable assignments for 'w_temp' and *
; 'status_temp' can be removed. *
; *
; If interrupts are used, as in this template file, the 16F873A.lkr *
; file will need to be modified as follows: Remove the lines *
; CODEPAGE NAME=vectors START=0x0 END=0x4 PROTECTED *
; and *
; SECTION NAME=STARTUP ROM=vectors *
; and change the start address of the page0 section from 0x5 to 0x0 * *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler and linker (Document DS33014). *
; *
; Refer to the respective PICmicro data sheet for additional *
; information on the instruction set. *
; *
;**********************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;**********************************************************************
; *
; Files required: *
; *
; *
; *
;**********************************************************************
; *
; Notes: *
; *
; *
; *
; *
;**********************************************************************
list p=16f873a ; list directive to define processor
#include <p16f873a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS (examples)
; example of using Shared Uninitialized Data Section
INT_VAR UDATA_SHR 0x71
pclath_temp RES 1 ; variable used for context saving
; creating copies of interupt context saving variables in bank1
INT_VAR1 UDATA_SHR 0xF1
; example of using Uninitialized Data Section
TEMP_VAR UDATA_SHR 0x20 ; explicit address specified is not required
temp_count RES 1 ; temporary variable (example)
;**********************************************************************
RESET_VECTOR CODE 0x000 ; processor reset vector
nop ; nop required for icd
movlw high start ; load upper byte of 'start' label
movwf PCLATH ; initialize PCLATH
goto start ; go to beginning of program
MAIN bsf STATUS,RP0
bcf STATUS,RP1
clrf TRISB
movlw b'00000110'
movwf ADCON1
movlw b'00000110'
movwf TRISA
bcf STATUS,RP0
clrf PORTB
clrf PORTA
BUCLE movf PORTA,W
btfss STATUS,Z
goto APAGAR
goto ENCENDER
ENCENDER movlw 0xFF
movwf PORTB
goto BUCLE
APAGAR clrf PORTB
goto BUCLE
start
nop ; code starts here (example)
; remaining code goes here
END ; directive 'end of program'
-
gracias señores ya corregui el problema, gracias a todos
-
De nada ;-)
saludos...