Red de conocimientos turísticos - Información de alquiler - ¿Cómo escribir una subrutina de servicio de interrupción para el puerto serie 2 cuando se utiliza el microcontrolador serie dual stc12c5a60s2?

¿Cómo escribir una subrutina de servicio de interrupción para el puerto serie 2 cuando se utiliza el microcontrolador serie dual stc12c5a60s2?

Extracto de un programa que escribí como referencia:

;------------------ Definiciones de registros relacionados---------- -- ----------

AUXR EQU 8EH ;Registro auxiliar

AUXR1 EQU 0A2H ;Registro auxiliar 1

CLK_DIV EQU 97H Divisor de reloj;

S2CON EQU 9AH; registro de control Serial 2

S2BUF EQU 9BH; buffer de datos Serial 2

Registro de velocidad en baudios BRT EQU 9CH; >IE2 EQU 0AFH ;Registro de control de interrupción 2

;; ------------------ Programa de inicialización en serie--- -------- ---------------

UART_INIT:

ORL PCON,#80H ;Habilitar SMOD del bit multiplicador de velocidad en baudios

MOV SCON,#50H ;datos de 8 bits, velocidad de baudios variable

MOV SCON,#50H ;datos de 8 bits, velocidad de baudios variable

MOV S2CON, #50H; datos de bits, velocidad de baudios variable

MOV BRT, #0FAH; 57600bps@11.0592MHz

ORL AUXR, #14H Generador de velocidad de baudios independiente, la frecuencia del reloj es Fosc, es decir:

SCON,#50He.,1T

ORL IE2,#01H ;Permitir interrupción del puerto serie en 1T.2

ANL AUXR,#03FH ;Reloj del temporizador 12 es Fosc, es decir 12TT

ANL AUXR,#0FEH ;El puerto serie 1 selecciona el temporizador 1 como generador de velocidad en baudios

MOV TMOD,#21H ;Establezca el temporizador 1 en 8 bits modo de recarga automática, temporizador de 0 a 16 bits

MOV TL1,#0FFH ;57600bps@11.0592MHz

MOV TH1,#0FFH;Establece el valor de recarga del temporizador

MOV SERGET,#0;Recibe el puntero RS232 a 0

MOV SERPUT,#0;Obtiene el valor del puntero RS232 a 0

MOV RXGET,#0 ; Recibir puntero RS485 es 0

MOV RXPUT,#0 ;Obtener valor El puntero RS485 es 0

CLR P4.4 ;485 en estado de recepción

ORL IPH, #10H ;

SETB PS ;485 En estado de recepción

ORL IPH,#10H ;

SETB PS ;Serial 1 prioridad de interrupción 11 más alta

CLR ET1 ;Desactivar interrupción del temporizador 1

SETB TR1 ;Iniciar temporizador 1

CLR BUSY

p>

RET

; ----------------- Rutina de servicio de interrupción de comunicación serie 2----- ------- -------------

SER2INT:

EMPUJAR ACC

EMPUJAR PSW

MOV A, S2CON

JNB ACC.0,SER2INT1; S2RI

ANL S2CON,#NOT S2RI

MOV

A,S2BUF

MOV B,A

MOV R0,#RXRAM

MOV A,RXPUT

ANL A,#0FH

ORL A, R0

MOV R0,A

MOV A,B

MOV @R0,A

LCALL SENDRXDAT

INC RXPUT

SJMP SERINT2

SER2INT1:

MOV A,S2CON

JNB ACC .1,SERINT2 ;S2TI

ANL S2CON,#NOT S2TI

CLR OCUPADO

SERINT2:

POP PSW

POP ACC

RETI

;----------------- Rutina de servicio de interrupción de comunicación serie 1----- - - ------------------

SER1INT:

PUSH ACC

PUSH PSW

PUSH DPL

PUSH DPH

SETB RS0

CLR RS1

JBC RI, SERTIRI1 es una interrupción de recepción, borre; Este indicador se convierte para recibir

CLR TI; es una interrupción de envío, borre este indicador y la interrupción devuelve

SJMP SEREND

SERTIRI1:

SJMP SEREND

SERTIRI1:

MOV A,SBUF; Recibir (leer) datos

MOV B,A

SERTIRI2:

MOV R0,#SERRAM

MOV A,SERPUT

ANL A,#1FH

ORL A,R0

MOV R0,A

MOV A,B

MOV @R0,A

INC SERPUT

MOV DLY03,A

SETB SERBIT

SEREND:

POP DPH

POP DPL

POP PSW

POP ACC

RETI