![]() |
![]() |
![]() |
| 1ª Página de referencia en castellano para programadores G .:: www.labview.tk (enlace redirigido) ::.:: http://perso.wanadoo.es/jovilve (enlace directo)::. |
|
Proyecto Placa de Adquisición y Control por Puerto Serie
|
|
Como especificaciones para la primera versión del proyecto,
se controlarán 8 salidas dígitales y monitorizarán
6 entradas digitales mediante LabVIEW. Se utliza el microcontrolador Pic16f876 y el integrado Max232 como interfaz con el puerto serie. Simularemos las salidas digitales mediante LEDs en el PORTB del PIC y las entradas digitales mediante switches en el PORTA del PIC. |
|
Pincha el enlace para ver el esquema eléctrico:
esquema.jpg
|
|
COMPONENTES: IC1 MAX232. IC2 PIC16F876. Q1 XTAL 4MHZ. D1, D2, D3, D4, D5, D6, D7, D8 Diodos LED. C1, C2 Condensadores 18pf. C3, C4, C5, C6 Condensadores electroliticos 10 uF (ojo con la polarización) . R1, R2, R3, R4, R5, R6, R7, R8, R9 Resistencias 470 Ohmios. R10, R11, R12, R13, R14, R15 Resistencias 10 KOhmios. Conector SUBD9 Hembra. |
|
El codigo fuente del microcontrolador: #include "macros16.inc" ;***** VARIABLE DEFINITIONS contador EQU 0x72 bIntSaveW0 EQU 0x70 ; variable used for context saving bIntSaveStatus EQU 0x72 ; variable used for context saving bIntSaveSt EQU 0x73 ; save Status bIntSaveFSR EQU 0x74 ; save FSR bIntSavPCLATH EQU 0x75 ; interrupt storage for PCLATH ;********************************************************************** ORG 0x000 ; processor reset vector clrf PCLATH ; ensure page bits are cleared goto main ; go to beginning of program ORG 0x004 ; vector de interrupciones movwf bIntSaveW0 ; save W ;; only way to preserve Status bits (since movf sets Z) is with a ;; swapf command now swapf STATUS,W ; Status to W with nibbles swapped BANK0 movwf bIntSaveSt movfw FSR movwf bIntSaveFSR ; save FSR movf PCLATH,W movwf bIntSavPCLATH ; interrupt storage for PCLATH clrf PCLATH ; set to page 0 ;; interrupción por recepción de datos btfsc _RCIF ;CAUSANTE DE LA INTERRUPCIÓN? call IntUSART ;solo esperamos interrupcion a la recepcion. IntReturn BANK0 movf bIntSavPCLATH,W ; interrupt storage for PCLATH movwf PCLATH movf bIntSaveFSR,W ; restore FSR movwf FSR swapf bIntSaveSt,W ; get swapped Status (now unswapped) movwf STATUS ; W to Status ( bank select restored ) swapf bIntSaveW0,F ; swap original W in place swapf bIntSaveW0,W ; now load and unswap ( no status change) BANK1 BSF _RCIE_P BSF INTCON,PEIE enableInt retfie ; return from interrupt main ; remaining code goes here CLRF STATUS BANK1 MOVLW b'00111111' ;PORTA como entrada MOVWF TRISA_P MOVLW b'00000000' MOVWF TRISB_P ;Portb como salida MOVLW b'11000000' MOVWF TRISC_P MOVLW b'10000111' MOVWF OPTION_REG_P ;no pull_up, TMR0 , preescaler 1:256 CLRF INTCON ;limpiamos intcon, gie=0 BANK0 CLRF PORTB ;limpiamos el portb CLRF PORTA ;limpiamos el porta BANK1 MOVLW d'25' ;seleccionamos la tasa de baudios a 9600 MOVWF SPBRG_P MOVLW b'10000100' MOVWF TXSTA_P ;habilitamos la transmisión asincrona BSF _RCIE_P BSF INTCON,PEIE BANK0 MOVLW b'10010000' ;habilitamos recepción asincrona MOVWF RCSTA EnableInt ;interrupciones globales habilitadas Label_0 goto Label_0 IntUSART BANK1 BCF _RCIE_P ;borramos flag interrución por recepcion BANK0 MOVF RCREG,0 ;transferimos el byte recibido al PORTB MOVWF PORTB BANK1 BSF TXSTA_P, TXEN ;preparamos la transferencia BANK0 MOVF PORTA,0 MOVWF TXREG ;cargamos buffer de transmisión con PORTA return END ; directive 'end of program' Algunas instrucciones pueden no resultar familiares, lo mas probable es que formen parte del archivo de macros "macros16.inc" que se incluye. |
| El Panel Frontal en LabVIEW presentaría esta apariencia: |
![]() |
|
Cada vez que pulsamos el botón "Actualizar", los valores booleanos
representados en las "w" (write) se reflejarán en los Leds de
la placa. Además, en los indicadores "r" obtenemos el valor de las entradas digitales. |
|
El diagrama de bloques que representa el código fuente del
programa es el siguiente:
diagrama.jpg |
|
Ahí queda eso, espero vuestras dudas y comentarios en el FORO
de LabVIEW Gi
José Félix Villena (webmaster de LabVIEW Gi) |
Comunidad Virtual LabVIEW Gi - Todos los derechos reservados © 2002
labviewgi@gmail.com
www.labview.tk