¿El programador 8051 y el temporizador 0 pueden estar disponibles para el programador cuando se usa el modo serie 1?

0

El micro es un AT89C4051. Permite dos temporizadores y una interrupción de puerto serie.

Actualmente, configuro las cosas de modo que si se recibe algún tipo de datos en el puerto serie, simplemente se carga en la memoria mediante la rutina en serie (no se muestra) y se llama al temporizador de inmediato. Sin embargo, cuando no se reciben datos dentro de un cierto límite de tiempo (1 ms, por ejemplo, aquí), se asume el final del flujo de datos y si un paquete es válido, se procesa.

Aquí está el código que tengo hasta ahora:

timer0_interrupt:
  ;Reset default delay to 1mS
  mov TH0,#0FDh
  jbc GOTANYBYTE,notmo
    ;No byte was received within 1mS
    ;So reset receive pointer
    mov SIR0,#SRX 
    ;And if whats received so far is a packet, then process it
    enddopacket:
    jbc SERPACKET,dopacket 
    djnz TIMEOUT,notmox
      ;Timed out. Proceed to next client
      mov TIMEOUT,#MAXUNITS
    notmox:
  notmo:
reti

dopacket:
  ;here an entire packet (of 10 bytes) is received 
  ;so process it right away
ljmp enddopacket

Lo que quiero hacer es asignar a cada cliente un tiempo fijo para enviar su paquete (sí, la serie es inalámbrica). Quiero que el tiempo sea exactamente el mismo para cada cliente, independientemente de la cantidad o la calidad del paquete que pase.

Actualmente estoy usando el temporizador 0 y la variable TIMEOUT para lograr esto. Esto se debe a que la interrupción del temporizador se ejecuta desde aproximadamente 170uS (el tiempo que tarda un byte en llegar a 56 kbps en la línea serie) hasta aproximadamente 1 ms y, por lo tanto, mi tiempo se puede desconectar.

Mi interrupción en serie depende del temporizador 1 porque los datos están a 56 K en un cristal de 22.1184 MHz y no puedo alcanzar el mismo baud usando otros modos en serie que no requieren el temporizador 1.

¿Existe la posibilidad de que pueda ejecutar esta rutina en el temporizador 1 en lugar del temporizador 0 y usar el temporizador 0 como el temporizador de tiempo de espera real, o el temporizador 1 entrará en conflicto con el tiempo de ejecución de la interrupción del puerto serie tanto que una de esas rutinas de interrupción? no se puede ejecutar correctamente?

    
pregunta Mike

0 respuestas

Lea otras preguntas en las etiquetas