-   
-   
- ;------------------------------------------------------------ 
- ; 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 
-   
-