bueno al final he hecho muchos cambios, creo
poco a pco me voy enterando de como se programa, jeje
mando el programa final haber si esta bien por fin y es el definitivo
Title "primer programa"
;queremos que teniendo una entrada analogica
;los datos que entren por esta salgan por el puerto serie y vayan al pc
list p=16f877 ; processor type
include <p16f876.inc>
;-------
; RESET
;-------
org 00h ; direccion de comienzo = 0000
; cuando se produce un reset o comienza el programa
goto INICIO ; va a la primera instruccion del programa
; --------------------
; INICIO DE PROGRAMA
; --------------------
INICIO clrf PORTC ; Limpia todos los bits de PORTC
clrf PORTB ; Limpia todos los bits de PORTB
movlw b"11111111"
movwf TRISA ; PORTA como entradas
bsf STATUS,5 ; (bit RP0 del registro STATUS)5=banco1
bsf RCSTA,7 ; Activamos la USART (bit SPEN del
; registro RCSTA) 7=habilito puerto serie
clrf TRISB ; puertab como salida
movlw b"10111111" ; RC7/RX entrada
movwf TRISC ; RC6/TX salida
movlw b"00100100" ; Configuramos USART para high speed y
; permitimos transmisión
movwf TXSTA ; y activacion de transmision (asincrono)
movlw d"25" ; Miramos la tablas del datasheet y
; escribimos 25 en SPBRG
movwf SPBRG ; para configurar una velocidad de
; transmisión de 9600 BAUDIOS a 4 MHz
bcf STATUS,5 ; elegimos BANCO0
movlw b"10000000"
movwf RCSTA ; habilito puerto serie
bsf STATUS,5 ; banco1
bsf TXSTA,5 ; 5=TXEN habilita la transmision
bcf STATUS,5 ; elegimos BANCO0
call INICIAAD ; configura modulo A/D
call ENVIAR ; envia datos por puerto serie
movlw b"10000000" ; hago parpadear led q indica que funciona
xorwf PORTB,F
goto INICIAAD
;---------------------------------------------------------
; IniciaAD - inicializa e instala el hardware a/d.
; Selecion de AN0 como entrada analogica, RC clock.
; Permire interrupciones
;---------------------------------------------------------
INICIAAD bsf STATUS,5 ; Pasar a RAM BANCO1
movlw B"00001110" ; RA0 analog inputs(el resto RAx I/O digitales)
movwf ADCON1 ; justificado a la izquierda,
; 8 bits mas s ignificativos en ADRESH
movLW B"01000001" ; Selecciono RC osc (FOSC/8), AN0
movWF ADCON0 ; A/D habilitado
bsf ADCON0,2 ; 2=GO , la conversion esta en proceso
;-------------------------------------------------------
; ESPERA - necesitamos un tiempo de retraso
; para que se pueda asegurar la adquisicion de datos.
;-------------------------------------------------------
ESPERA btfsc ADCON0,2 ; si go=0 la siguiente instruccion es descartada
; (ejecuta NOP) saltando a la siguiente
; si go=1 ejecuta la siguiente instruccion
goto ESPERA
return
;----------------------------------------------------
; ENVIAR datos por puerto serie
;----------------------------------------------------
ENVIAR movwf TXREG ; Movemos lo que queremos transmitir
; (debe estar en el registro W)
bsf STATUS,5 ; al registro TXREG y empezamos a transmitir
bcf STATUS,6 ; Elegimos BANCO2
FIN_TX btfss RCSTA,1 ; Compruebo si el bit TMRT del registro esta
; a "1" o a "0".
goto FIN_TX ; Si esta a "0" es que esta lleno TMRT y no
; ha terminado de transmitir,
; para ello TRMT tiene que estar a 1, hasta
; entonces esperamos.
bcf STATUS,5 ; Elegimos BANCO0
return
END
; Al programar el micro tener en cuenta
; los fusibles de configuracion
; WDT = OFF
; OSC = XT
; PWRT = ON
gracias