;------------------------------------------------------------
; Código assembler generado por Niple V5.2.1
; Proyecto: Voltimetro Digital
; Autor: ---
; Fecha: 07/02/2008
; PIC: 16F88
; Velocidad de reloj: 4 Mhz
; Descripcion: Medir un voltaje cada segundo y mostrar el resultado. enviarlo por el puerto serial
;------------------------------------------------------------
LIST P=PIC16F88
_XT_OSC equ 0x3FFD
_DEBUG_OFF equ 0x3FFF
_WDT_OFF equ 0x3FFB
_PWRTE_ON equ 0x3FF7
_BODEN_OFF equ 0x3FBF
_LVP_OFF equ 0x3F7F
_CPD_OFF equ 0x3FFF
_CP_OFF equ 0x3FFF
;_WRT_ENABLE_OFF equ 0x3DFF
__config _XT_OSC & _DEBUG_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 0x0000
status equ 0x0003
portb equ 0x0006
pclath equ 0x000a
adresh equ 0x001e
adcon0 equ 0x001f
voltaje_1 equ 0x0021
voltaje_2 equ 0x0022
_np_temp1 equ 0x0023
_np_temp2 equ 0x0024
_np_temp3 equ 0x0025
_np_temp4 equ 0x0026
_np_temp5 equ 0x0027
_np_rs232_t equ 0x0028
_np_rs232_t1 equ 0x0029
_np_config_interrup equ 0x002a
_np_tiempo equ 0x002c
_np_tiempo1 equ 0x002e
_np_tiempo2 equ 0x002f
_np_tiempo3 equ 0x0030
trisa equ 0x0085
trisb equ 0x0086
adresl equ 0x009e
adcon1 equ 0x009f
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
adfm equ 7 ;
adon equ 0 ;
c equ 0 ;carry / borrow bit
go_done equ 2 ;
rp0 equ 5 ;registrer bank select bit
rp1 equ 6 ;registrer bank select bit
z equ 2 ;bit cero
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
reset org 0
goto paso2
org 4
retfie
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
movlw b'00000001' ;configurar el puerto a como xxsssssa
bsf status,rp0 ;cambiar a banco 1
bcf status,rp1
movwf trisa
movlw b'10001110' ;configuracion a/d = dddda
movwf adcon1
bcf status,rp0 ;cambiar a banco 0
bsf adcon0,adon ;activar activar el conversor a/d.
movlw b'00000000' ;configurar el puerto b como ssssssss
bsf status,rp0 ;cambiar a banco 1
movwf trisb
paso5
movlw b'10000001' ;conversión
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf adcon0
bsf status,rp0 ;cambiar a banco 1
bsf adcon1,adfm ;alinear el resultado a la derecha
bcf status,rp0 ;cambiar a banco 0
clrf _np_temp3
clrf _np_temp4
movlw .16
movwf _np_temp5
paso5_ciclos
call leer_ad
bsf status,rp0 ;cambiar a banco 1
movf adresl,w ;recuperar el registro bajo de la conversion a/d
bcf status,rp0 ;cambiar a banco 0
movwf voltaje_2
movf adresh,w ;recuperar el registro alto de la conversion a/d
movwf voltaje_1
movf voltaje_2,w
addwf _np_temp4,1
btfsc status,c
incf _np_temp3,1
movf voltaje_1,w
addwf _np_temp3,1
decfsz _np_temp5,1
goto paso5_ciclos
bcf status,c
rrf _np_temp3,1
rrf _np_temp4,1
bcf status,c
rrf _np_temp3,1
rrf _np_temp4,1
bcf status,c
rrf _np_temp3,1
rrf _np_temp4,1
bcf status,c
rrf _np_temp3,1
rrf _np_temp4,1
movf _np_temp3,w
movwf voltaje_1
movf _np_temp4,w
movwf voltaje_2
movf voltaje_1,w ;enviar el dato voltaje_1
movwf _np_temp1
call rs232_tb1_9600
movlw .1 ;temporizador 1 seg
call tiempo_1_255_mega_c
goto paso5 ;cierra el ciclo
;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------
tiempo_1_255_mega_c
movwf _np_tiempo
goto tiempo_1_255_mega_c_1
tiempo_1_255_mega_c_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_1_255_mega_c_1
movlw .10
movwf _np_tiempo1
tiempo_1_255_mega_c_bucle1
nop
nop
movlw .99
movwf _np_tiempo2
tiempo_1_255_mega_c_bucle0
nop
nop
nop
movlw .200
movwf _np_tiempo3
tiempo_1_255_mega_c_bucle
nop
nop
decfsz _np_tiempo3,1
goto tiempo_1_255_mega_c_bucle
nop
nop
nop
decfsz _np_tiempo2,1
goto tiempo_1_255_mega_c_bucle0
nop
nop
nop
decfsz _np_tiempo1,1
goto tiempo_1_255_mega_c_bucle1
decfsz _np_tiempo,1
goto tiempo_1_255_mega_c_bucle2
return
leer_ad
;realizar conversion a/d
movlw .200
movwf _np_temp1
bsf adcon0,go_done
leer_ad_esperar
decfsz _np_temp1,1
goto leer_ad_esperar
nop
nop
leer_ad_esperar_fin
btfsc adcon0,go_done
goto leer_ad_esperar_fin
return
rs232_tb1_9600
;enviar un dato rs232 por portb,1 (por codigo)
;_np_temp1 = dato a enviar
;_np_temp2 = contador de bits
movlw .8
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
movwf _np_temp2
bcf portb,1
call rs232_9600_bit
rs232_tb1_9600_tx_otro
bcf portb,1
bcf status,c
rrf _np_temp1,1
btfsc status,c
bsf portb,1
call rs232_9600_bit
decfsz _np_temp2,1
goto rs232_tb1_9600_tx_otro
bsf portb,1
call rs232_9600_bit
return
rs232_9600_bit
movlw .9
movwf _np_rs232_t
goto rs232_9600_bit_2
rs232_9600_bit_bucle
nop
nop
nop
nop
nop
nop
nop
rs232_9600_bit_2
decfsz _np_rs232_t,1
goto rs232_9600_bit_bucle
nop
nop
nop
nop
nop
nop
nop
nop
nop
return
rs232_9600_mbit
movlw .4
movwf _np_rs232_t
goto rs232_9600_mbit_2
rs232_9600_mbit_bucle
nop
nop
nop
nop
nop
nop
nop
rs232_9600_mbit_2
decfsz _np_rs232_t,1
goto rs232_9600_mbit_bucle
nop
nop
nop
nop
nop
nop
nop
nop
nop
return
End