Red de conocimiento informático - Conocimiento sistemático - Copia del ensamblador

Copia del ensamblador

Perro guardián del microcontrolador STC12C2052AD y su fórmula de cálculo del tiempo de desbordamiento.

; 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

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

;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

;************** **********************************/

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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:

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