Copia del ensamblador
; Este programa se utiliza para verificar el mecanismo de vigilancia y su fórmula de cálculo del tiempo de desbordamiento del microcontrolador de la serie STC12C2052AD.
;Watchdog y su tiempo de desbordamiento = (12 * pre_scale * 32768)/frecuencia del oscilador
wd TCR EQU 0e 1H;Dirección de vigilancia
WDT_ERA_LED EQU p 1.5 ; Utilice P1.5 para controlar el indicador de tiempo de desbordamiento del mecanismo de vigilancia,
; El tiempo de desbordamiento del mecanismo de vigilancia se puede expresar por el tiempo que la luz indicadora está encendida o apagada.
WDT _Flag_ LED EQU p 1.7; use P1.7 para controlar el indicador de reinicio de desbordamiento del mecanismo de vigilancia. Si está encendido, indica un restablecimiento de desbordamiento del mecanismo de vigilancia.
Last_WDT_Time_LED_Status EQU 00H; Variable de bit que almacena el último bit de estado del indicador de tiempo de desbordamiento del watchdog.
; tiempo de reinicio de WDT (frecuencia del oscilador = 18,432 MHz):
; pre_scale_Word EQU 00111100 b; borrado a 0, se inicia el mecanismo de vigilancia, el número de preescalador es 32±0,68 s.
pre_scale_Word EQU 00111101B; borrado a 0, se inicia el mecanismo de vigilancia, preescalador = 64 1,36 s.
; pre_scale_Word EQU 00111110B; Borrar a 0, se inicia el mecanismo de vigilancia, preescalador = 128 2,72 segundos.
;pre_scale_Word EQU 001111111B;Se borra a 0, se inicia el mecanismo de vigilancia y el número del preescalador es 256±5,44 s.
Organización 0000H
Gerente General de AJMP
ORG 0100H
Principalmente:
MOV A, la detección de WDTCR es Reinicio del perro guardián.
ANL A, #10000000B
JNZ WDT _reset; WDTCR.7 = 1, reinicio de vigilancia, salto al programa de reinicio de vigilancia.
;El reinicio de encendido, el arranque en frío y el contenido de la unidad RAM son valores aleatorios.
SETB FINAL_WDT_TIME_LED_STATUS; reinicio de encendido,
; inicializa el bit de estado del indicador de tiempo de desbordamiento del mecanismo de vigilancia = 1.
CLR WDT _Time_ LED de reinicio de encendido, indicador de tiempo de desbordamiento del indicador de vigilancia.
MOV WDTCR, # Pre_scale_ Word inicia el mecanismo de vigilancia
WAIT1:
SJMP espera 1; repite la instrucción (detiene) y espera el mecanismo de vigilancia. Restablecimiento del desbordamiento del perro.
;Reinicio de vigilancia, inicio en caliente, el contenido de la unidad RAM permanece sin cambios, valor antes del reinicio.
Reinicio de WDT:; reinicio de vigilancia, arranque en caliente
CLR WDT _ FLAG _ LED Enciende el indicador de reinicio de desbordamiento de vigilancia.
JB Last_WDT_TIME_LED_STATUS, POWER_OFF_WDT_TIME_LED
; Configure WDT_ de acuerdo con el último bit de estado de la luz del tiempo de desbordamiento del mecanismo de vigilancia,
; la última vez, estará apagado esta vez; si estuvo apagado la última vez, continuará esta vez;
El indicador LED de tiempo de desbordamiento del mecanismo de vigilancia CLR WDT _Time_ estuvo apagado la última vez y está encendido esta vez.
CPL Last_WDT_TIME_LED_STATUS; invierte el último bit de estado del indicador de tiempo de desbordamiento del guardián.
Espera 2:
SJMP espera 2; repite la instrucción (detener) y espera a que se reinicie el desbordamiento del guardián.
Indicador de tiempo de apagado WDT:
El LED SETB WDT _era_ apaga el último y actual indicador de tiempo de desbordamiento del guardián.
CPL Last_WDT_TIME_LED_STATUS; invierte el último bit de estado del indicador de tiempo de desbordamiento del guardián.
Espera 3:
SJMP espera 3; repite la instrucción (detener) y espera a que se reinicie el desbordamiento del guardián.
Fin
; Utilice el modo IO del microcontrolador STC para controlar el 74HC595 para controlar el tubo digital de 8 bits.
; Los usuarios pueden modificar la macro para seleccionar la frecuencia del reloj.
; los usuarios pueden seleccionar * * * Yin o * * * Yang en "Macro personalizada". Se recomienda utilizar * * * tubos digitales negativos tanto como sea posible.
; El efecto de visualización es: tiempo de visualización o 8 tubos digitales muestran 0, 1, 2..., A, B... f bucle (selección de compilación).
; El temporizador 0 de 16 bits se recarga automáticamente para generar un latido de 1 ms. Cuando el usuario modifica la frecuencia del reloj principal de la MCU, el tiempo se ajustará automáticamente a 1 ms.
*************************** *** *******************/
;/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
fosc _ KHZ EQU 22118 kHz<; /p>
STACK _ POIRTER EQU 0D0H; dirección inicial de la pila
RTC _ ENABLE EQU 1: tiempo de visualización, 0: 8 pantallas de tubo digitales 0, 1, 2..., A, B... ciclo Tierra, supresión.
LED_Type EQU 000h; Definir tipo de LED, 000H - *** *yin, 0FFH - *** *yang.
Temporizador 0_Recarga EQU (65536-Fosc_KHZ); Frecuencia de interrupción del temporizador 0, 1000 veces por segundo.
EQU 020H
DIS_Negro EQU 010H
DIS EQU 011H
;************ * ************************************************** *******
;************************************ * ********************************
Datos AUXR 08EH
Datos P4 0C0H
Datos P5 0C8H
; * * * * * * * * * * Definición de puerto IO * * * * * * * * * *
P_HC595_SER bit P4.0//Pin 14 Entrada de datos SER
P_HC595_RCLK bit P5.4//Pin 12 Reloj de almacenamiento (enclavamiento) RCLk
P_HC595_SRCLK bit P4.3 // Pin 11 SRCLK reloj de datos de cambio
; * * * * * * * * * *Declaración de variable local* * * * * * * * * *
Datos de bandera 20H
B_1ms bit Flag0.01 milisegundo flag
Datos LED8 30H buffer de visualización 30H ~ 37H
Datos Display_index 38H índice de bits de visualización
Datos de hora 39H
Datos por minuto 3AH
Datos por segundo 3BH
datos por segundo_H 3CH
datos por segundo _ L 3DH
** ********************************************** **** **********************
;****************** **** ********************************************
ORG 00H reset
LJMP F_Main
ORG 03H0 INT0 interrupción
Reti
LJMP F_INT0 _Interrupt
ORG 0BH1 Interrupción del temporizador 0
LJMP F _Timer 0 _Interrupt
ORG 13H; 2 INT1 Interrupción
LJMP F_int 1_interrupt
ORG 1BH; 3 temporizador 1 interrupción
LJMP F_timer 1_interrupt
ORG 23H4 UART1 interrupción
LJMP F_UART 1_Interrupt
ORG 2BH5 ADC y SPI Interrupción p>
LJMP F_ADC_Interrupt
ORG 33H6 Interrupción de detección de bajo voltaje
LJMP F_LVD_Interrupt
ORG 3BH7 Interrupción PCA
LJMP F_PCA_Interrupt
ORG 43H8 Interrupción UART2
p>
LJMP F_UART2_Interrupt
ORG 4BH9 Interrupción SPI
LJMP F_SPI_Interrupt
ORG 53H10 Interrupción INT2
LJMP F_INT2_INTERRUPT
ORG 5BH11 INTERRUPCIÓN INT3
LJMP
F _ INT3 _ Interrupción
ORG 63H12 Interrupción del temporizador 2
LJMP F _Interrupción del temporizador 2
ORG 83H16 Interrupción INT4
LJMP F_INT4_INTERRUPT
;****************************************** *** *********************************
;********* * ************************************************* ** *******
SI (RTC_ENABLE == 1)
//================= === ================================================= === ===
; //Función: F_DisplayRTC
//Descripción: Mostrar subrutina de reloj.
; //Parámetros: Ninguno.
; //Devolución: Ninguno.
; //Versión: VER1.0
; //Fecha: 2013-4-1
//Nota: Excepto ACCC y PSW, all Los registros de uso general utilizados están todos en la pila.
; //======================================== ================================
f _Mostrar RTC:
Empuje B; b en la pila
MOV durante una hora
MOV B, #10
División AB
MOV LED8, A
MOV LED8 1, B
MOV LED8 2, # DIS_;
MOV un minuto
MOV B, #10
División AB
MOV LED8 3, A
MOV LED8 4, B
MOV LED8 5, # DIS_ ;
MOV A, 2do
MOV B, #10
División AB
MOV LED8 6, A;
p >
MOV LED8 7, B;
POP B; bBatalla inicial
Remojar en agua para suavizar
/* * * * * * * * * * * * * * * * * * Función de demostración RTC * * * * * * * * * * * * * * * * *
//======== == ================================================== == ============
; //Función: F_RTC
//Descripción: subrutina de demostración RTC.
; //Parámetros: Ninguno.
; //Devolución: Ninguno.
; //Versión: VER1.0
; //Fecha: 2013-4-1
//Nota: Excepto ACCC y PSW, all Los registros de uso general utilizados están todos en la pila.
; //======================================== ================================
F_RTC:
INC No Dos; segundos 1
MOV A, segundo
CLR C
SUBB A, No. 60
JC L _ QuitRTC segundo. gt= 60?
MOV segundo, #0;
INC min; min 1
MOV un min
CLR C
p>
SUBB A, No. 60
JC L _ QuitRTC minutos gt= 60?
MOV minutos, #0
INC horas; 1
MOV una hora
CLR C
SUBB A, No. 24
JC L _ QuitRTC hora gt= 24?< / p>
Tiempo MOV, #0
L_QuitRTC:
Remojado en agua para ablandar
ENDIF
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
f _Master:
MOV SP, #STACK_POIRTER
MOV PSW, # 0; seleccione el grupo 0 R0~R7.
MOV display_index, #0
MOV R0, #LED8
MOV·R2, octavo clasificado
L_ClearLoop:
MOV @R0, # DIS_BLACK Supresión de encendido
INC R0
R2, L_ClearLoop
CLR TR0
ORL AUXR , #(1 SHL 7); Temporizador 0 _ 1T();
ANL TMOD, #no 04Htimer 0 _ AsTimer();
ANL TMOD, # No 03Htimer 0 _ 16 bitautoreload();
MOV TH0, #Temporizador 0 _ Recargar/256; Temporizador 0_Recargar
MOV TL0, # Temporizador 0 _ Recargar módulo 256
p>SETB ET0; Temporizador 0 _ interrupción habilitar();
SETB TR0; Temporizador 0 _ Ejecutar();
SETB EA interrupción total;
Horas MOV, #12; valor de tiempo de inicialización
Minutos MOV, #0
segundos MOV, #0
IF (RTC_ENABLE == 1)
LCALL F_DisplayRTC
ENDIF
Left_main_loop:
JNB B_1ms, L_Main_Loop1ms aún no ha llegado.
CLR B_1ms
;MOV A,ms second_L;ms1
;Agregar uno, #1
;MOV segunda universidad p>
;MOV A, m segundo H
;ADDC A, #0
;MOV m segundo _ H A
INC m segundo_L; 1
MOV, Maestría
JNZ $ 4
INC msegundo_H
MOV A, ms segundo_L - 1000
CLR C
SUBB A, #bajo 1000
MOV A, m segundos H
SUBB A,#高1000
JC L_Main_Loopif(ms segundo lt;1000),jmp
MOV ms second_L,# 0;if(ms segundo gt; = 1000)
MOV milisegundo segundo, #0
IF (RTC_ENABLE == 1)
LCALL F_RTC
LCALL F_DisplayRTC
Otros
MOV R0, # LED8
MOV·R2, octavo clasificado
L_LoadLoop:
MOV @R0, segundo
INC R0
R2, L_LoadLoop
INC segundo; ocho tubos digitales muestran 0, 1, 2...,A,B...y el ciclo sigue y sigue.
ANL segundo, #0FH
ENDIF
L_Main_Loop
;************** **********************************/
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * p>
t_Display:;Fuente estándar
;0 1 2 3 4 5 6 7 8 9 A B C D E F
DB 03FH, 006H, 05BH, 04FH, 066H, 06DH, 07DH , 007H , 07FH, 06FH, 077H, 07CH, 039H, 05EH, 079H, 071H
; negro - H J K L N o P U t G Q r M y
DB 000H, 040H, 076H, 01EH, 070H, 038H, 037H, 05CH, 073H, 03EH, 078H, 03dH, 067H, 050H, 037H, 06EH
; p>DB 0BFH, 086H, 0DBH, 0CFH, 0E6H, 0EDH, 0FDH, 087H, 0FFH, 0EFH, 046H
T_COM:
DB 001H, 002H, 004H, 008H, 010H , 020H , 040H, 080H código de bits
//================================ == =======================================
;// Función: F_Send_595
; //Descripción: envía una subrutina de bytes a HC595.
; //Parámetros: ACC: bytes de datos a enviar.
; //Devolución: Ninguno.
; //Versión: VER1.0
; //Fecha: 2013-4-1
//Nota: Excepto ACCC y PSW, all Los registros de uso general utilizados están todos en la pila.
; //======================================== ================================
F_Send_595:
Presione 02HR2 Entró en el stack
MOV·R2, octavo clasificado
L_Send_595_Loop:
RLC A
MOV P_HC595_SER, C
SETB P_HC595_SRCLK
CLR P_HC595_SRCLK
R2, L_Send_595_Loop
POP 02HR2 fuera de la pila
Remojado en agua para suavizar
//=========================================== ==== ===========================
;//Función: F_DisplayScan
;// Descripción: Muestra la subrutina de escaneo.
; //Parámetros: Ninguno.
; //Devolución: Ninguno.
; //Versión: VER1.0
; //Fecha: 2013-4-1
//Nota: Excepto ACCC y PSW, all Los registros de uso general utilizados están todos en la pila.
; //======================================== ================================
f _Mostrar escaneo:
Empuje DPH en la pila
Empuje DPL en la pila
Empuje 00HR0 en la pila
MOV·DPTR, #T_COM
MOV A, DISPLAY_INDEX
MOVC A, @A DPTR
XRL A, #NON-LED_TYPE
LCALL F_Send_595 SALIDA Código de bits
MOV DPTR, #T_Display
MOV A, display_index
Agregar uno, #LED8
MOV R0, A
MOV A, @R0
MOVC A, @A DPTR
XRL A, #LED_TYPE
LCALL F _ Enviar _ 595 Código de segmento de salida
SETB P_HC595_RCLK
Datos de salida de pestillo CLR P_HC595_RCLK
Company display_index
MOV A, display_index
ANL A,# 0F8Hif(display_index gt;=8)
Escaneo de visualización del aeropuerto JZ
MOV display_index,# 0; El final de 8 bits vuelve a 0
L_QuitDisplayScan:
POP 00HR0 pila
Pop·DPL;DPL pila
Saca· DPH de la pila
Remojado en agua para ablandar
p>; ******************************************** *************************
; * * * * * * * * * * * * * * *Función de interrupción * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.
f _Timer 0 _Interrupt:; Temporizador 0 función de interrupción de 1 ms
Empuje PSWPSW en la pila
Empuje la entrada ACCACC
LCALL F_DisplayScan1 milisegundo El escaneo muestra un dígito.
SETB B_1 ms; indicador de 1 ms
Pila POP ACCACC
POP PSW fuera de la pila
REDI
p>
f _ temporizador 1 _Interrupción:
Reti
f _Temporizador 2 _Interrupción:
Reti
F_INT0_INTERRUPT: p>
LETI
f_int 1_INTERRUPT:
LETI
F_INT2 _Interrupt:
Reti
F _ INT3 _Interrupción:
Reti
F _ INT4 _Interrupción:
REDI
f_UART1_INTERRUPT:
REDI
F_UART2_INTERRUPT:
REI TI
F_ADC_INTERRUPT:
REDI
F_LVD_INTERRUPT:
REDI
F_PCA_INTERRUPT:
LETTI
F_SPI_INTERRUPT:
LETTI
END