Programación Específica > Microcontroladores
Que Falla En Este Codigo?
(1/1)
Super_G:
Estoy comenzando a utilizar el 16F877 y queria usar su conversor A/D lei el dataSheet e hice los pasos indicados, en resumen leo por RA0/AN0 y el resultado deberia sacar por el puertoB(los 8 bits mas significativos), pero siempre todos los pines estan en alto
--- Código: Text --- INICIO BSF STATUS, RP0; MOVLW 7 MOVWF TRISA CLRF TRISB CLRF ADCON1; Configure A/D inputs, BCF STATUS, RP0; MOVLW B'10000001' MOVWF ADCON0 NOP NOP NOPNEXT BSF ADCON0,GO ;COMIENZA LA CONVERSIONSIG BTFSC ADCON0,GO GOTO SIG MOVF ADRESH,W MOVWF PORTB GOTO NEXTEND
karen81:
Yo he usado mucho el pic 16f877 y su convertidor analogico digital y al ver tu programa no se le ve ningun error, este programa que te pongo aqui es uno que ya esta probado y ha funcionado, La parte de la conversion, si la revisas es casi identica a la tuya solo que nosotros no le pusimos esos NOP (no creo que eso sea pero deberias probar quitandolos).
Lo que yo creo es que talvez la direccion de algun registro este mal, o no te entiende cosas como poner B'10000001' o algun detallito asi
proba con este programa que te pongo aqui (sin modificarle nada a ver que tal??)
--- Citar ---;***********************************************************
; ADT.ASM
;***********************************************************
LIST p=16F877 ; indica el modelo de PIC
#include "P16F877.INC" ; archivo de encabezado
portb equ 0x06 ;Define el puerto b como salida fisica
trisb equ 0x06 ;Define la dirección del registro de direccion TRISB
status equ 0x03 ;Define la dirección del registro de estado
adresh equ 0x1e ;Registro de datos del convertidor A/D (Parte alta)
adcon0 equ 0x1f ;Registro 0 de control y estado del convertidor A/D
adcon1 equ 0x1f ;Registro 1 de control y estado del convertidor A/D
rp0 equ 5 ;Bits del registro de estado para cambiar de banco de memoria de datos
w equ 0 ;destino de la operacion registro w
ORG 0
movlw 00 ;Pone el valor de 00 en el registro de trabajo
bsf status,rp0 ;Apunta al banco 1
movwf trisb ;Se configura el puerto b como salida
clrf adcon1 ;Se configura que los datos de la conversion estaran justificados a la izquierda
;y se trabajara con las referencias de la fuente primaria de alimentacion (Vdd=6v)
bcf status,rp0 ;Apunta al banco 0
movlw 0x81 ;Activamos el convertidor A/D, seleccionamos el canal 0 para la conversion
movwf adcon0 ;y configuramos la sincronia del convertidor a su valor maximo (Fosc/32=625Khz)
conver: bsf adcon0,2 ;Iniciamos la conversion para leer el ATD
check: btfsc adcon0,2 ;Verificamos la conversion completa si ya se completo salte de lo contrario repita
goto check
movf adresh,w
movwf portb
goto conver ;Repita el proceso para leer un nuevo valor del atd
END
--- Fin de la cita ---
Espero que te funcione :comp:
si te funciona o no por favor avisame
adios :flower:
Super_G:
GRACIAS!!!!
vere los cambios.
LechugaHack:
Hola
sabes que??.... te falta tomar en cuenta el tiempo que se requiere para descargar el condensador que quedo asi luego de la conversion anterior... deberias hacerle un retardo antes de seguir con la proxima conversion, el valor de este retardo depende de varias cosas que debes chk en la hoja de datos, pero ponle un tiempo grande de varios mls y prueba
suerte!!!!!!!!!!!!!!!!!!!
Navegación
Ir a la versión completa