Cómo escribir el programa para el receptor de infrarrojos del microcontrolador 51. Quiero saber el método y el principio de escritura. Es mejor tener una plantilla específica para mi referencia.
Este es el programa de decodificación de infrarrojos y su descripción mediante el microcontrolador STC12C5A60S2.
;Utilizando el código de serie de modulación de ancho de pulso, la combinación de ancho de pulso de 0,565 ms, intervalo de 0,56 ms y período de 1,125 ms representa "0" binario;
; 0,565 ms, intervalo de 1,685 ms y período de 2,25 ms representan "1" binario
; el código binario de 32 bits compuesto por los "0" y "1" anteriores está codificado en binario mediante la frecuencia portadora de 38 kHz. Modulación secundaria para mejorar la eficiencia de las emisiones,
; para reducir el consumo de energía y luego generar rayos infrarrojos que se emitirán al espacio a través del diodo emisor de infrarrojos
; Binario de 32 bits Los primeros 16 dígitos del grupo de códigos son códigos de identificación de usuario, que pueden distinguir diferentes equipos eléctricos y evitar que los códigos de control remoto de diferentes modelos interfieran entre sí. El código de identificación de usuario de este chip está fijo en hexadecimal. 01H<. /p>
;Los últimos 16 bits son el código de operación de 8 bits (código de función) y su complemento
;Cuando se presiona una tecla durante más de 36 ms, el oscilador se activa. el chip y transmitirá un conjunto de claves de pulso de codificación de 108 ms, este código de transmisión de 108 ms consta de un código de inicio (9 ms),
un código de resultado (4,5 ms), un código de dirección bajo de 8 bits ( 9 ms ~ 18 ms), código de dirección alto de 8 bits (9 ms ~ 18 ms), código de datos de 8 bits (9 ms ~ 18 ms)
y el código inverso de los datos de 8 bits (9 ms ~ 18 ms) . Si no se suelta la tecla durante más de 108 ms,
;El siguiente código transmitido (código continuo) sólo constará de un código de inicio (9 ms) y un código de finalización (2,5 ms). >
;La clave para la decodificación es cómo identificar "0" y "1", en lo que respecta al extremo receptor, "0" es el máximo de 0,56 ms + el mínimo de 0,56 ms. es el máximo de 1,68 ms + el mínimo de 0,56 ms.
; Entonces, según el ancho del nivel alto, el retraso comienza cuando aparece el nivel alto si el nivel de lectura es bajo después de 0,56. ms,
; indica que el bit es "0", de lo contrario es "1". Por razones de confiabilidad, el retraso debe ser superior a 0,56 ms, pero no superior a 1,12 ms. , si el bit es "0",
; la lectura ya es el nivel alto del siguiente bit, por lo que es más confiable tomar (1,12 ms+0,56 ms)/2=0,84 ms. se puede tomar como aproximadamente 0,84 ms
; para garantizar el mejor uso del arranque, parte del programa de retraso, aquí utiliza un retraso de 0,9 ms
;----. ---------Programa de decodificación de infrarrojos--------------------------
EXINT0:
PULSAR ACC
PULSAR PSW
PULSAR 1
PULSAR 2
PULSAR 6
CLR EA ;Desactivar temporalmente la solicitud de interrupción
MOV R6,#10
EXINT10:
LCALL DELAY09MS Llame a la subrutina de retardo 900us
<; p> JB IRIN,INTOUT1; Determina si P3.2 tiene un nivel alto y, de ser así, sal del programa de decodificaciónDJNZ R6,EXINT10 Realiza un bucle 10 veces y detecta si hay un nivel alto en 900; microsegundos. Lo anterior completa la identificación de la señal inicial de bajo nivel de 9000 microsegundos de la señal del control remoto.
JNB IRIN,$ ;Espere el nivel alto para evitar un pulso de arranque de nivel bajo de 9 milisegundos
LCALL DELAY45MS ;Retraso de 4,5 milisegundos
;--- -- --------Acepta códigos de 32 bits--------------------------
MOV R1, # IRUSERL
MOV R2,#04H
EXINT101:
MOV R6,#08H ;Cada grupo de bits de datos es de 8 bits
EXINT102:
JNB IRIN,$ ;Esperando la señal de alto nivel del primer conjunto de datos del código de dirección
LCALL DELAY09MS ;Retraso para juzgar el nivel alto/bajo de la señal en este momento después de que comienza el nivel alto Estado
MOV C,IRIN ; Almacena el estado de nivel actual de P3.2 pin 0 o 1 en C
JNC INT1OUT ; es 0, salta
LCALL DELAY1MS
INT1OUT:
MOV A,@R1
RRC A ;Mover datos 0/ 1 en C en el bit más bajo de A
MOV @R1,A ; Almacena temporalmente los datos en A en R1
DJNZ R6,EXINT102 ; p>
INC R1
DJNZ R2,EXINT101 ;Se aceptan 4 juegos de códigos de 32 bits
;--------------Datos comparación de códigos---------- ---------------------
MOV A,IRDATAL
; LCALL SENDRXDAT
MOV A,IRDATAL
CPL A
CJNE A,IRDATAH,INTOUT1; Determina si el número es correcto o no, sal sin esperar;
MOV IR_DAT,IRDATAL; Si es igual, guarda los datos correctos
MOV A,IR_DAT
; /p>
INTOUT1:
LCALL DELAY45MS
p>SETB EA ;Habilitar interrupción
POP 6
POP 2
POP 1
POP PSW
POP ACC
RETI
;;******* ***********11.0592*900=9953****** ************
DELAY09MS: ;6
EMPUJE 4 ;4
EMPUJE 3 ;4
MOV R4,#20 ;2
DLY900:
MOV R3, #122 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY900 ;4
MOV R4,#11 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;TOTAL=9952
;;****************** ****11.0592*560=6193************
******
DELAY056: ;6
EMPUJE 4 ;4
EMPUJE 3 ;4
MOV R4,# 12 ;2
DLY5600:
MOV R3,#122 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY5600 ;4
MOV R4,#71 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ; 3
RET ;4
;TOTAL=6194
;;******************11.0592 * 4500=49766******************
RETARDO45MS: ;6
PULSE 4 ;4
PUSH 3 ;4
MOV R4,#52 ;2
DLY45:
MOV R3,#236 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY45 ;4
MOV R4,#85 ;2
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;;TOTAL=49768
;;** *** ***********11.0592*1000=11059******************
RETARDO1MS: ;6
EMPUJE 4 ;4
EMPUJE 3 ;4
MOV R4,#20 ;2
DLY1MS:
MOV R3,# 136 ;2
DJNZ R3,$ ;4
DJNZ R4,DLY1MS ;4
MOV R4,#8 ;2 p>
DJNZ R4,$ ;4
POP 3 ;3
POP 4 ;3
RET ;4
;TOTAL=11060
;;*************************************** ***** *********
DELAY100US: ;6
PUSH 4 ;4
MOV R4,#140 ;2
DJNZ R4,$ ;4
MOV R4,#131 ;2
DJNZ R4,$ ;4
POP 4 ; 3
RET ;4
;TOTAL=1105
;;********************* ***** ****************************