Programación Específica > Microcontroladores
Pic16f88
(1/1)
thevy:
hola quisiera me pudieran ayudar, con algo: quiero grabar un programa en el pic16f88, quiero recibir un valor de un voltimetro luego convertirlo a señal digital para luego enviarlo por medio del puerto serie..... se puede? dejo mi correo por cualquier cosa,,, please help me,,,,, sandrathevy@hotmail.com
thevy:
HOLA TENGO ESTE COD PERO ME DA UN ERROR EN EL CONFIG.. ALGUIEN ME AYUDA?
--- Código: Text --- ;------------------------------------------------------------; 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 0x0000status equ 0x0003portb equ 0x0006pclath equ 0x000aadresh equ 0x001eadcon0 equ 0x001fvoltaje_1 equ 0x0021voltaje_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 0x0030trisa equ 0x0085trisb equ 0x0086adresl equ 0x009eadcon1 equ 0x009f ;------------------------------------------------------------; Declaración de Bits;------------------------------------------------------------adfm equ 7 ;adon equ 0 ;c equ 0 ;carry / borrow bitgo_done equ 2 ;rp0 equ 5 ;registrer bank select bitrp1 equ 6 ;registrer bank select bitz 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 trisbpaso5 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_temp5paso5_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_1tiempo_1_255_mega_c_bucle2 nop nop nop nop nop nop noptiempo_1_255_mega_c_1 movlw .10 movwf _np_tiempo1tiempo_1_255_mega_c_bucle1 nop nop movlw .99 movwf _np_tiempo2tiempo_1_255_mega_c_bucle0 nop nop nop movlw .200 movwf _np_tiempo3tiempo_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_doneleer_ad_esperar decfsz _np_temp1,1 goto leer_ad_esperar nop nopleer_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_bitrs232_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_2rs232_9600_bit_bucle nop nop nop nop nop nop noprs232_9600_bit_2 decfsz _np_rs232_t,1 goto rs232_9600_bit_bucle nop nop nop nop nop nop nop nop nop returnrs232_9600_mbit movlw .4 movwf _np_rs232_t goto rs232_9600_mbit_2rs232_9600_mbit_bucle nop nop nop nop nop nop noprs232_9600_mbit_2 decfsz _np_rs232_t,1 goto rs232_9600_mbit_bucle nop nop nop nop nop nop nop nop nop return End
Navegación
Ir a la versión completa