Microcontroladores - Comunicacion serial + TMR PICBASIC

 
Vista:
sin imagen de perfil

Comunicacion serial + TMR PICBASIC

Publicado por Alan (1 intervención) el 25/06/2017 05:21:07
Hola, ando con un problemilla que no logro corregir, estoy trabajando con la interrupcion por TMR0 asi como con comunicacion serial con un modulo Bluetooth para un pic 18F4550, todo andaba bien con mi comunicacion serial pero al momento de agregarle la interrupcion por TMR, no anda como deberia, ya que mi intencion es que la comunicacion serial funcione al recibir caracteres y cada uno efectua diferentes tareas mientras tanto el timer debe ejecutarse cada 100mS aproximandamente para mandar un texto por serial, con mi codigo actual la comunicacion se realiza pero la interrupcion no ocurre hasta que no se recibe algun valor por HSERIN,

en resumen....el pic espera valores con HSERIN mientras deberia interrumpirse cada cierto tiempo y mandar texto por serial.....que ocurre realmente?.....el pic espera un valor y al recibirlo ejecuta las tareas y luego ejecuta la interrupcion, parece mas una interrpcion por cambio de estado que por timer

realmente en tiempo de interrupcion no me preocupa ya que con las formulas se puede modificar, al momento solo quisiera que se ejecutra la interrupcion correctamente, anexo codigo, gracias por su tiempo

_______________________________________________________________________________________
'----------------------FUSIBLES------------------------------
DEFINE OSC 48 'FRECUENCIA PARA LOS CALCULOS DE RETARDO
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 20h 'ASINCRONO, PARA OSC 4 ES HIGH SPEED 24H, PARA OSC 48 ES LOW SPEED 20H
DEFINE HSER_BAUD 9600

'----------------------REGISTROS----------------------------------
ADCON1 = %00001111 'TODOS LOS PINES DIGITALES
BAUDCON.3 = 0 '8 BITS BAUD RATE GENERATOR
RCON.7 = 1 'SISTEMA DE PRIORIDAD EN LAS INTERRUPCIONES 1 ACTIVADO 0 DESACTIVADO
CMCON = 7
INTCON = %10100000 'CONFIGURANDO LA INTERRUPCION TMR0, BIT 2 FLAG TMR0
INTCON2.7 = 1 'DESACTIVAR LAS RESISTENCIAS EN PULL-UP DEL PUERTO B
INTCON2.1 = 1 'PRIORIDAD DE LA INTERRUPCION POR TMR0
T0CON = %10000111 'TIMER ACTIVO 16 BITS TEMPORIZADOR PRESCALER DE 1:256
TMR0H = $ED '%11101101 'VALORES DE INICIO DE CONTEO TIMER 16BITS
TMR0L = $A9 '%10101001
TRISC = %10000000 'PIN7 RECEPCION PIN 6 TRANSMISION
TRISD = 0 'PUERTO D PARA LOS MOTORES

'----------------------VARIABLES----------------------------------------
CR CON 13 'VALOR ASCII DEL 13 DECIMAL ES CR "RETORNO DE CARRO"
TIEMPO VAR BYTE
DISTANCIA VAR BYTE
CHAR VAR BYTE

'-----------------------ALIAS--------------------------------------------

CLEAR 'BORRA TODAS LAS VARIABLES

PORTC = 0
PORTD = 0

ON INTERRUPT GOTO SENSOR 'LECTURA CADA 100mS

HSEROUT [" INICIE",CR]
INICIO:

HSERIN [Char] 'ESPERA DE UN VALOR

SELECT CASE CHAR
CASE "A"
PORTD = %10011001

CASE "B"
PORTD = %01100110

CASE "C"
PORTD = %10010110

CASE "D"
PORTD = %01101001

CASE "E"
PORTD = 0

END SELECT

GOTO INICIO

DISABLE
SENSOR:

HSEROUT [" ME INTERRUMPI", CR]

TMR0H = $ED '%11101101
TMR0L = $A9 '%10101001
INTCON = %10100000 'BORRANDO BANDERA DE INTERRUPCION

RESUME
ENABLE
END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder