El programa ha sido compilado.
; El programa de lectura de código del control remoto (oscilador de cristal es 11.0592) puede leer el código de control del control remoto y mostrarlo a través del LED.
;OMEN de TCL 16/1/2005
;*************************** *** *************************************
a_BIT EQU 20H; Unidad de almacenamiento de un dígito de tubo digital
b _ BIT EQU 21H; Unidad de almacenamiento de diez dígitos de tubo digital
Sin unidad de almacenamiento de número de control final
a _ NO EQU 25H; El número del tubo digital corresponde a la ubicación de almacenamiento del código almacenado.
b _NO EQU 26H; Los diez dígitos del tubo digital corresponden a la ubicación de almacenamiento del código almacenado.
;22h y 23h son las unidades de almacenamiento del código de control y su código inverso.
; * * * * * * * * * * * * * * * * * * lt lt programa principal> gt***************** ******* *******************
ORG 0000H
AJMP 0030H
ORG 0003H Interrupción externa P3.2 Dirección de entrada del pin INT0
AJMP INT cambia a la subrutina de servicio de interrupción externa (decodificador)
ORG 0030H
AJMP MAIN cambia a el programa principal
****************************************** ******** *******************
Principalmente: MOV NO_OUT, #0H
SETB EA; active la solicitud de interrupción total de la CPU
SETB IT0; configure el modo de disparo de INT0 para activar el flanco negativo por impulsos.
SETB EX0; activa la solicitud de interrupción INT0
Bucle: MOV A, NO _ OUT muestra el valor clave del botón a través de los 8 LED del puerto P1.
CPL A; Debido a que el LED P1 muestra el estado invertido del nivel, está invertido.
MOV P1, A; salida de pantalla LED
Pantalla LCALL; salida de pantalla de tubo digital LED
bucle AJMP;* * * * * * * * * * * * * * * * * * * lt ltInterrupt aceptando programa de control remoto >: gt************************ * *
; La siguiente es la subrutina de interrupción externa que ingresa al pin P3.2, que es el programa de decodificación.
INT:
Empujar ACC
Empujar PSW Empujar PSW y ACC a la protección de pila
CLR EA desactiva temporalmente todas las interrupciones del Pregunta de la CPU.
MOV R6, #10
SB: LCALL dl 865; llamando a subrutina con un retraso de 865 microsegundos
JB P3.2, salida; retraso de 865 microsegundos. determine si el pin P3.2 es de nivel alto y, de ser así, salga del programa de decodificación.
DJNZ R6, SB; repetir 10 veces, el propósito es detectar si hay un nivel alto dentro de 8650 microsegundos y salir del programa de decodificación.
;Lo anterior completa la identificación de la señal de bajo nivel inicial de 9000 microsegundos de la señal del control remoto.
JNB P3.2, $; espera alto para evitar un pulso piloto bajo de 9 ms.
LCALL DL4737 retrasa 4,74 ms para evitar un código de resultado de 4,5 ms.
MOV R7, #16; Ignora los primeros 26 dígitos del número de identificación del sistema.
JJJJA: JNB P3.2, $; espera la señal de alto nivel del primer bit del código de dirección.
Después de que comienza el nivel alto de LCALL DL865, se utiliza la escala de tiempo de 865 microsegundos para determinar el estado de nivel alto y bajo de la señal en este momento.
MOV C, P3.2 almacena el estado de nivel 0 o 1 del pin P3.2 en c.
Si JNC UUUA es 0, salta a UUUA.
LCALL dl 1000; si se detecta nivel alto 1, retrasar 1 milisegundo y esperar a que finalice el pulso de nivel alto.
UUUA: DJNZ R7, JJJJA
MOV R1, # 22H Establece 22H como área de RAM inicial.
MOV·R2, clasificado en segundo lugar; recibe 2 memorias de 22H a 23H, utilizadas para almacenar códigos de operación y operaciones inversas.
PP: MOV R3, #8; cada grupo de datos es de 8 bits.
JJJJ: JNB P3.2, $; espera la señal de alto nivel del primer bit del código de dirección.
Después de que comienza el nivel alto de LCALL DL865, se utiliza la escala de tiempo de 865 microsegundos para determinar el estado de nivel alto y bajo de la señal en este momento.
MOV C, P3.2 almacena el estado de nivel 0 o 1 del pin P3.2 en c.
JNC UUU; si es 0, salta a UUU.
LCALL dl 1000; si se detecta nivel alto 1, retrasar 1 milisegundo y esperar a que finalice el pulso de nivel alto.
UUU: MOV A, @ r 1; proporcione la dirección en R1 a a.
RRC A; Mueve el valor 0 o 1 en C al bit más bajo en a.
MOV @R1, A; almacena temporalmente el número en una memoria con un valor R1.
DJNZ R3, JJJJ recibe memoria completa de 8 bits.
INC r 1; Suma 1 al valor en R1 y reemplázalo con RAM.
DJNZ R2, PP; después de recibir el código de datos de 8 bits y el código inverso de datos de 8 bits, guárdelo en 22H/23H.
MOV A, 22H
CPL A; compare 22H y 23H después de la inversión.
CJNE A, 23H, salir; si la desigualdad indica que hay un error en los datos recibidos, desistir.
MOV A, 22H
MOV NO_OUT, A
; Borrar código previamente guardado.
;LCALL DL4737
;LCALL EEPROM _ W;Almacena el código en la EEPROM dentro del microcontrolador
;LCALL DL4737
CLR El zumbador P3.6 emite un sonido -bip-bip, lo que indica que la decodificación se realizó correctamente.
LCALL DL4737
LCALL DL4737
LCALL DL4737
SETB p 3.6; el zumbador se detiene
lcall DL4737
Salir: SETB EA; habilitar interrupciones
POP PSW
POP ACC empuja PSW y ACC a la protección de pila
RETI;
; * * * * * * * * * * * * * * * * * * lt subrutina de visualización del tubo digital ltLED>: gt************ ** *************
Pantalla:
MOV A, NO_OUT Divide NO_OUT en bits y 16 bits.
ANL A, # 0FH toma los cuatro bits inferiores y los coloca en a_bit.
MOV A_BIT, A; unidad
MOV A, NO_OUT
RR A
RR A
RR A
RR A; cuatro movimientos, cuatro altos por cuatro bajos.
ANL A, # 0FH toma los cuatro bits superiores y los coloca en B_bit.
MOV B_BIT, A; el área b tiene un bit.
MOV DPTR, #NUMTAB especifica la dirección inicial de la búsqueda en la tabla.
MOV A, A_BIT toma un solo dígito
MOVC A, @ A DPTR; Encuentra 7 segmentos de código con un solo dígito
MOV A_Not , A
MOV A, B _ BIT toma el dígito de las decenas
MOVC A, @ A DPTR; Verifique el código de 7 segmentos del dígito de las decenas.
MOV B_No,A
MOV,No
MOV P0,A; envía un código de 7 dígitos
; ; Apague la visualización de decenas de dígitos para evitar imágenes fantasma.
CLR P2.0 activa una visualización de bits
LCALL DL40 muestra 4737 microsegundos
SETB p 2.0; apaga la visualización de la unidad para evitar imágenes fantasma.
MOV A, B_NO
MOV P0, A; Envía un código de 7 segmentos de diez dígitos.
CLR p 2.1; Encienda la pantalla de dígitos de decenas
LCALL DL40 muestra 4737 microsegundos
SETB p 2.1; Apague la pantalla de dígitos de decenas para evitar imágenes fantasma.
Remojar en agua para suavizar
; * * * * * * * * * * * * * * * * * * * * * lt ltPrograma de retardo> gt*** ** *************************
DL865: MOV R4, #12; 2 Subrutina 1 retrasada, retraso exacto 865 microsegundos.
D1: MOV R5, #31
DJNZ R5, USD
DJNZ R4, D1
Remojado en agua para suavizar
DL4737: MOV R4, #12; subrutina de retardo 2, retardo exacto 4737 microsegundos
D2: MOV R5, #179
DJNZ R5, USD
p>D2 DJNZ R4
Remojado en agua para suavizar
DL1000: MOV R4, # 17; programa de retardo 3, retardo preciso de 1000 microsegundos.
D3: MOV R5, #25
DJNZ R5, USD
DJNZ R4 D3
Remojado en agua para suavizar p>
DL40: MOV R4, #1; programa de retardo 4, retardo preciso 40/17 microsegundos.
D4: MOV R5, #1
DJNZ R5, USD
D4 DJNZ R4
Remojado en agua para suavizar p>
********************************************* *** *******************
; Si es * * * el código de pantalla LED es el código 1-F 16.
NUMTAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H, 88H, 83H, 0C6H, 0A1H, 86H, 8EHSTC nueva placa
Fin