Cada vez que se produce la interrupción RB0_INT por flanco de subida en RB0, se transmite vía serial RS232 datos correspondientes a los valores del puerto B y del Convertidor Analógico Digital, a su vez se puede observar la información en el LCD, representados como altura (puerto B) y peso (ADC).
El ejemplo muestra en forma sencilla y ordenada como deben ser configurados y ubicados los codigos correspondientes a las interrupciones; así como de el resto de los periféricos.
'****************************************************************
Device 16F877
Xtal 20
PortB_Pullups FALSE 'DESHABILITA LAS RESISTENCIAS PULL-UP DEL PUERTO B
On_Interrupt GoTo INTERRUPCION
; DEFINICIONES PARA LA CONFIGURACION INTERUPCIONES
Symbol INTEDG = OPTION_REG.6 ' BIT SELECCION DEL FALNCO DE INTERRUPCION
Symbol GIE = INTCON.7 ' BIT HABILITADOR GLOBAL DE INTERRUPCIONES
Symbol INTE = INTCON.4 ' BIT DE HABILITACION DE LA INTERRPCION RB0/INT
Symbol INTF = INTCON.1 ' BIT DE HABILITACION DE LA INTERRPCION RB0/INT
;CONFIGURACION DEL CONVERTIDOR ANALOGICO DIGITAL
Declare Adin_Res 10 ' Resultado ADC - 10 bit
Declare Adin_Tad FRC ' RC OSC
Declare Adin_Stime 50 ' 50us sample time
TRISA = 000001 ' Configura AN0 (PORTA.0) como entrada
ADCON1 = %10000000 ' Configura PORTA.0 Analogico
;CONFIGURACION DEL LCD
Declare LCD_Type 0
Declare LCD_DTPin PORTD.4
Declare LCD_ENPin PORTD.3
Declare LCD_RSPin PORTD.2
;CONFIGURACION DEL PUERTO SE COMUNICACION SERIAL
Declare SERIAL_DATA 8 ' 8 bits de datos
Symbol RS232 = 84 ' 9600 bps/sin bit de paridad
Symbol tx_pin = PORTC.6
Symbol rx_pin = PORTC.7
' Declaracion de Variables
Dim ADC As Word
Dim PESO As Float
Dim ALTURA As Byte
Dim flag As Byte
Dim cont As Word
Symbol BUZZER = PORTD.0
;EL CÓDIGO DE LA INTERRUPCIÓN SIEMPRE DEBE SER COLOCADO EN ESTA UBICACIÓN
;(NO COLOCAR DEBAJO DEL PROGRAMA PRINCIPAL ESTO SE DEBE A QUE LA DIRECCIÓN
; DE MEMORIA DE PROGRAMA DE ATENCIÓN DE INTERRUPCIONES ES LA ORG 0x004)
GoTo Salta_Int
INTERRUPCION:
flag = 1
INTF = 0
Context Restore
Salta_Int:
'CONFIGURACION DE PUERTOS
TRISA = %11111111
TRISB= %11111111
TRISC = %10111111
TRISD.0 = 0
TRISD.1 = 1
;CONFIGURACIÓN DEL LA INTERRUPCIÓN POR FLANCO DE SUBIDA DEL PIN RBO (RB0/INT)
GIE=1 ;HABILITADOR GLOBAL DE INTERRUPCIONES
INTEDG = 1 ;SELECCIÓN DE FLANCO DE SUBIDA PARA INTERRUPCION RB0/INT
INTE = 1 ; HABILITADOR DE INTERRUPCION RB0/INT
INTF = 0 ; BANDERA DE INTERRUPCION RB0/INT
cont = 0
flag = 0
BUZZER = 0
PESO =0
ALTURA =0
Print At 1,1,"Peso : ", Dec2 PESO, " "
Print At 2,1,"Altura : ", Dec ALTURA, " "
'Inicio del programa principal
While 1 = 1
If flag = 1 Then
DelayMS 2700
ALTURA = PORTB
BUZZER = 1
DelayMS 300
BUZZER = 0
ADC = ADIn 0 ' Efectua la conversion ADC y almacena el resultado en la variable ADC
PESO = ADC
Select Case PORTB
Case 1 : ALTURA = 1
Case 3 : ALTURA = 2
Case 7 : ALTURA = 3
Case 15 : ALTURA = 4
Case 31 : ALTURA = 5
Case 63 : ALTURA = 6
Case 127 : ALTURA = 7
Case Else: ALTURA = 0
End Select
cont = cont + 1
SerOut tx_pin, RS232, [Dec cont, ".- Peso: ", Dec2 PESO, " - ALTURA : " ,Dec ALTURA, 13] ' envio rs232
flag = 0
Print At 1,1,"Peso : ", Dec2 PESO, " "
Print At 2,1,"Altura : ", Dec ALTURA, " "
End If
Wend
problemas con la simulación error No model specified for J1. [J1]
ResponderEliminarCONN-D9F como soluconarlo. gracias por compartir
Como encuentro el CONN-D9F en proteus
ResponderEliminar