¿Cómo escribir una subrutina de servicio de interrupción para el puerto serie 2 cuando se utiliza el microcontrolador serie dual stc12c5a60s2?
;------------------ 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----- ------- ------------- p>
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: p>
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