[Aprendizaje de STC MCU] Lección 10: Temporizadores y contadores de MCU

[Intrusión del resumen del curso del Sr. Zhu]

El enfoque de esta lección: registros

La primera parte, lista de capítulos

1.10.1. Introducción al temporizador

1.10.2. La clave para el software de control de registros de hardware

1.10.3.51 Introducción al temporizador del microcontrolador

1.10.4. Introducción a los registros principales del temporizador

1.10.5. Práctica 1 de programación del temporizador

1.10.6. Corrección de errores de ajuste del tiempo de temporización



La segunda parte, introducción del capítulo


1.10.1 Introducción al temporizador
    Esta sección presenta el temporizador desde una perspectiva amplia, principalmente el principio de funcionamiento, la función y el significado del temporizador.
1.10.2 La clave para el control por software de los registros de hardware
    Esta sección introduce el concepto de registros, mediante el aprendizaje de registros para comprender el principio de utilizar software para controlar el hardware.
1.10.3.51 Introducción al temporizador del
    microordenador de un solo chip 51 Esta sección le llevará a leer los capítulos introducidos en el manual de datos del microordenador de un solo chip 51. Al leer el manual de datos, puede aprender a leer el manual de datos mientras aprende el temporizador.
1.10.4 Introducción a los registros principales del temporizador 1
    Esta sección comienza a explicar los registros relacionados con el temporizador del microordenador de un solo chip 51. Esta sección se centra principalmente en los bits TF y TR en TCON y el bit GATE en TMOD.
1.10.5 Introducción a los registros principales del temporizador 2
    Esta sección comienza a explicar los registros relacionados con el temporizador del microordenador de un solo chip 51. Esta sección se centra principalmente en los bits TF y TR en TCON y el bit GATE en TMOD.
1.10.6 Introducción a los registros principales del temporizador 3
    Esta sección explica los bits de registro restantes.
1.10.7 Práctica de programación del temporizador 1
    Esta sección es para la práctica de la programación del temporizador Consulte el código de muestra en el manual de datos para reescribir y obtener su propio código y descargarlo para verificar la prueba.
1.10.8 Práctica de programación del temporizador 2
    Esta sección es para la práctica de la programación del temporizador Consulte el código de muestra en el manual de datos para reescribir y obtener su propio código y descargarlo para verificar la prueba.
1.10.9 Corrección de errores en la configuración del tiempo de temporización
    Esta sección explica el problema de la configuración del tiempo de temporización del temporizador de un solo chip 51. Este detalle era incorrecto en el curso anterior.

    
Tercera parte, Registro del aula

1.10.1. Introducción al temporizador

1.10.1.1 ¿Qué es un temporizador?
(1) Un periférico interno de SoC (sistema en un chip, se puede entender que el logro es un microcontrolador)
(2) El temporizador es el "despertador" de la CPU. El
temporizador es como un despertador relativo al SoC El significado es el mismo en relación con las personas. Una CPU de un solo núcleo es de un solo subproceso y solo puede hacer una cosa, y necesita un temporizador para recordarle cuando termine esto y haga otra cosa.

1.10.1.2 ¿Qué es un contador? El
contador y el temporizador son en realidad lo mismo
(1) El contador también es un periférico interno en SOC
(2) El contador, como su nombre lo indica, se usa para contar.
Por ejemplo, el cronómetro (reloj de puntero) es en realidad un contador. Tome una cuadrícula cada dos unidades (es decir, cuente un número), porque el período de tiempo de conteo del cronómetro es fijo, por lo que cuando llega un momento determinado, simplemente use el valor de conteo * el período de tiempo de conteo para obtener un período de tiempo. Este período de tiempo es nuestro conjunto Hora (este es el temporizador).

(3) El contador puede contar el número de pulsos externos (el pulso es en realidad la señal de nivel que fluye hacia el microcontrolador a través de los pines) con
Ver imagen de origen
qué frecuencia habrá un pulso y el número de pulsos a través del contador sabrá el tiempo.
En otras palabras: contar pulsos internos se llama temporizador; contar pulsos externos se llama contador.
El pulso interno es estable y cada pulso tiene un intervalo de tiempo fijo, por lo que se puede cronometrar, el
pulso externo es muy inestable, es imposible saber el tiempo entre dos pulsos, ¡solo contando!

(4) ¿Es un temporizador o un contador? Está controlado por un registro.

1.10.1.3 ¿Cómo funciona el temporizador?
(1) Paso 1 : Configure primero la fuente del reloj del temporizador (si es necesario)
                 Fuente de reloj: oscilador de cristal de cuarzo (oscilador de cristal)
(2) Paso 2 : Inicializar los registros relacionados con el reloj
(3) Paso 3 : Configurar el tiempo de sincronización (contando el número de pulsos + cada tiempo de pulso)
(4) Paso 4 : Configuración Interrumpir el programa de procesamiento ( la prioridad de entrada externa es más alta que la temporización )
Por ejemplo: la tarea principal es mirar televisión, el programa de interrupción del temporizador es agua hirviendo.
(5) Paso 5 : Encienda el temporizador
(6) Cuando esté funcionando : El temporizador generará una interrupción después de que el temporizador cuente hacia arriba y luego ejecutará el isr de interrupción

. ¡Será más claro si mira el código más tarde!


1.10.2. La clave para el software de control de hardware: registros

¿Cómo se puede controlar algún hardware mediante software? ¡Depende del registro!

1.10.2.1 Qué es un registro
(1) registro [reg]  
(2) Registro

  •    Registro, el contenido es variable, generalmente definido por bit
  •    Es equivalente a una variable, pero esta variable tiene un nombre especial en una dirección fija.
  •    Los registros se dividen en registros generales (P0 ...) y registros de funciones especiales (IE ...)

(3) Se accede a los registros por direcciones, que se programan como la memoria
definida en reg51.h!

1.10.2.2 El principio de funcionamiento del registro
(1) Existe una influencia bidireccional entre el registro y el hardware. Para decirlo sin rodeos, el registro
también tiene IO, que está relacionado con el hardware como un dispositivo de entrada / salida.
(2) El software puede leer y escribir registros. Los
programas pueden escribir valores en registros y leer valores de registro, como el valor de nuestros pines GPIO. De hecho, leemos los registros dentro de los pines.
(3) Resumen: El registro es la clave para que el software controle el hardware

1.10.2.3. La clave para el aprendizaje de MCU son todo tipo de registros. ¡Los
registros son para MCU como las palabras para el aprendizaje de inglés!

(1) El aprendizaje del microordenador de un solo chip incluye principalmente dos: CPU y varios periféricos internos
(2) La interfaz de programación de varios periféricos internos son registros
(3) Familiarizado con un microordenador de un solo chip está realmente familiarizado con sus registros
(4) Los registros seguirán A medida que la microcomputadora de un solo chip se vuelve más compleja (aunque existen diferencias entre STM32 y la microcomputadora de un solo chip, ¡lo encontrará muy simple cuando estudie!)
(5) Aprenda las habilidades de operar registros en lenguaje C: el punto clave es
aprender la manipulación del lenguaje C Habilidades de microcontrolador!


1.10.3.51 Introducción al temporizador del microcontrolador

Consulte la hoja de datos P136 Temporizador / Contador

Si el microcontrolador funciona en modo 12T!
Oscilador de cristal externo de 12MHz, la frecuencia del reloj interno es de 1MHz y el ancho del pulso del reloj es 1us (1 / 1MHz = 1us).
 
Si el microcontrolador funciona en modo 6T con
un oscilador de cristal externo de 12MHz, la frecuencia del reloj interno es de 2MHz y el ancho del pulso del reloj es 0.5us (1 / 2MHz = 0.5us).
 

El modo y el método de trabajo de 51 son engorrosos, no necesitamos recordarlo, solo revíselo una vez, ¡y será mucho más fácil cuando aprendamos el STM32 integrado!
En las siguientes secciones, nos centraremos en los registros principales del temporizador a través del manual


1.10.4. Introducción a los registros principales del temporizador

MSB big endian, LSB little endian P136

1.10.4.1, el registro de control de temporizador / contador TCON (Control de temporizador)

0b11000011 es de B7-B0
(1) 8 bits, pero hay 4 nombres: TF, TR, IE, IT y el símbolo de cada nombre tiene 2 Uno, seguido de 0 y 1, correspondiente a T0 y T1.
(2) TF: indicador de temporizador, bit de indicador de temporizador (desbordamiento)

  • Es de solo lectura (el software solo conoce el estado del hardware leyendo TF1, en lugar de escribir este bit para establecer el estado del hardware).
  • Cuando el temporizador expira, hará dos cosas: la primera es cambiar el indicador TF a 1, y la segunda es generar una interrupción para que la CPU interrumpa el procesamiento; cuando la CPU responde, el hardware borra TF (de 1 a 0 Es automático y no requiere la intervención del software).
  • Hay algunos diseños de CPU que requieren que el software se borre ( microcontroladores convencionales ). En este momento, el programa del usuario debe recordar borrar el bit de bandera, de lo contrario entrará repetidamente en la interrupción repetidamente.
  • = 1 desbordamiento, = 0 desbordamiento claro

(3) TR: timer run, es el interruptor para comenzar a contar el timer.

  • Después de inicializar todo el temporizador, podemos comenzar a contar escribiendo 1 en el bit TR. ¡pero!
  • El bit TR y el bit GATE tienen cierta correlación. GATE es el bit de registro en el registro TMOD, ¡eche un vistazo primero!

(4) IE: habilitación de interrupciones, bandera de origen de solicitud de interrupción externa (INTx)

  • La función es mostrar el estado de los cambios de hardware.
  • Cuando se interrumpe INT1, el hardware automáticamente IE1 = 1
  • Cuando la CPU procesa la interrupción INT1, el hardware establecerá automáticamente IE1 = 0 (el hardware se borra automáticamente).

(5) IT: Disparador de Interrput, bit de control del modo de disparo de interrupción externa

  •   Se utiliza para configurar el modo de disparo de interrupción de una interrupción externa.
  •    El llamado método de activación de interrupciones significa que se juzgará que el hardware genera una interrupción bajo ciertas condiciones, por lo que en realidad es la condición para la generación de interrupciones.
  • Generalmente, el modo de disparo de interrupción es: disparo de borde y disparo de nivel. El disparador por flanco se divide en: disparador por flanco ascendente, disparador por flanco descendente, disparador por flanco doble; el modo de disparo por nivel se divide en: disparador de nivel alto y disparador de nivel bajo .
  • = 0   La interrupción externa 1 es el modo de disparo de nivel bajo, cuando la entrada INTx es de nivel bajo, IE = 1
  • = 1 Cuando el   puerto de interrupción externa (INTx) cambia de "1" → "0", IE = 1

1.10.4.2, registro del modo de trabajo del temporizador / contador TMOD (modo de temporizador)

(1) GATE: el nombre chino es bit cerrado

  • Está en el registro TMOD, y hay dos correspondientes a T0 y T1 respectivamente.

    Manera de trabajar:

  • Cuando GATE = 0, el     temporizador está en modo de funcionamiento del temporizador. En este momento, el interruptor del temporizador solo se ve afectado por el bit TR. Específicamente, TR = 1 comienza a contar y TR = 0 termina contando.
  • Cuando GATE = 1, el temporizador está en el modo de trabajo de contador . Cuando se utiliza el temporizador para contar, es muy importante contar en qué condiciones y no contar en qué condiciones. Por lo tanto, cuando GATE = 1, si contar depende no solo de TR1 sino también del pin INT1 (P3.3) La regla real es: cuando TR1 = 1 y el pin INT1 también es alto, contará.

(2) Posición C / T

  • Configure T0 / T1 para que funcione en modo temporizador o modo contador.
  • = 1 significa modo contador
  • = 0 significa modo de temporizador.

(3) M1 + M0
       2 bits juntos indican en qué modo de trabajo se encuentra T0 / T1, generalmente hay 4 tipos: 13 bits, 16 bits, recarga automática de 8 bits, doble 8 bits.   


1.10.4.3, TLx, THx
TL0 + TH0: el registro de 16 bits del temporizador 0
TL1 + TH1: el registro de 16 bits del temporizador 1,
si decimos que nuestro ancho de pulso es 0.5us, necesitamos configurar el tiempo para 0.5ms y 4.444ms, Entonces los conteos son:
1000 = 0x3E8 = alto 0x3 bajo 0xE8 => TL0 = 0xE8 TH0 = 0x3
8888 = 0x22B8 = alto 0x22 bajo 0xB8 => TL0 = 0xB8 TH0 = 0x22 para

corregir el error anterior, el desbordamiento se refiere a que el temporizador excede ¡El número máximo de dígitos!

1.10.5. Práctica 1 de programación del temporizador

1.10.5.1 Tarea experimental
Originalmente, el retraso en el parpadeo lo realiza la función de retraso, durante el retraso, la CPU debe consumirse aquí y no puede hacer otras cosas. Esta es la desventaja anterior

Interrupción + temporización: la
CPU puede realizar la tarea principal ( pantalla de tubo digital estático 0-F ), el temporizador es de 500 ms, y la interrupción se genera cuando se alcanza la temporización y el LED parpadea en el controlador de interrupciones isr. !

1.10.5.2 Cómo programar
1. Ideas:

(1) Tiempo (inicialización del temporizador)

  • Asigne un valor a TMOD para determinar el modo de trabajo de T0.
  • Calcule el valor inicial del contador del temporizador y escríbalo en TH0, TL0
  • Abrir interrupción del temporizador, asignar valor a ET0 y EA
  • Configure TR0 para iniciar el temporizador.

(2) ¿Qué debe hacer el programa principal?
(3) ¡El manejador de interrupciones

se puede modificar directamente en el programa de interrupción de teclas de la última lección! 【Aprendizaje de SCM】 Lección 9: Botones

2. Pregunta pensando: ¿cómo calcular 0,5 s?
     El ciclo de la máquina es el tiempo necesario para que la CPU complete una operación básica. Ciclo de la máquina = 1 / frecuencia de reloj de un solo chip.

  • El oscilador de cristal externo de nuestra microcomputadora de un solo chip es de 12MHz y funciona en modo 12T , por lo que la frecuencia del reloj interno es de 1MHz y el ciclo de la máquina es de 1us . Puede configurar hasta 65535 (en el modo de funcionamiento del temporizador de 16 bits) pulsos , lo que significa que el tiempo máximo de temporización es 65535 * 1us = 65535us = 65.535ms .
  • Si desea establecer un tiempo relativamente largo (por ejemplo, 500 ms), el temporizador no se puede satisfacer directamente. La solución es agregar un tiempo largo después de varios tiempos .

    Método de temporización: primero use el temporizador para configurar 50ms, luego * 10.
    
¿Cuál es el valor inicial de nuestra temporización de 50ms?

  • Modo 12T, oscilador de cristal externo 12MHz , frecuencia de reloj interno 1MHz, ciclo interno de la máquina: 1us
  • El número de tiempo es: 50ms / 1us = 50000
  • Valor inicial: comience a contar desde 65535-50000 + 1 (porque el contador realmente cuenta hasta 65536 antes de que se desborde) = 15536 ​​= 0x3CB0 , el valor inicial es igual a 0x3CB0
  • TL0 = 0xB0, TH0 = 0x3C (También se puede entender así: TH0 = 15536/256 , TL0 = 15536% 256 )

¡Miremos estas dos imágenes juntas para analizar cómo necesitamos programar!

  • MCU funciona a 12T, no hay elección
  • Elijamos el temporizador 0

Configuración del modo de trabajo

  • Debido a que es contado por el reloj interno, es equivalente al modo de temporizador, GATE = 0
  • Debido a que es un modo de temporizador, C / T = 0
  • Debido a que se selecciona el modo de temporizador de 16 bits, M1 = 0, M0 = 1
  • Combinando los tres puntos anteriores: TMOD = 0x01

Establezca el valor inicial del temporizador (tenga en cuenta que es necesario recargar el modo de temporizador manual de 16 bits, TH0 y TL0)

  • TH0 = 0x3C
  • TL0 = 0xB0

Habilitar interrupción

  • ET0 = 1
  • EA = 1

Configuración de control de temporizador / contador

  • Permitir contar, TR0 = 1
  • Sin interrupciones externas involucradas, a TI e IE no les importa
  • SI cambiará automáticamente cuando el recuento se desborde, no importa

Manual de referencia del manejador de interrupciones del temporizador P141

El procedimiento final es el siguiente

#include <reg51.h>
 
/**************代码说明**************************
			本程序采用定时器中断方式,实现了静态数码管显示0-F并且每隔0.5s时,LED1闪一次
				P0--静态数码管
				P1.0 LED1
*************************************************/
 
sbit led = P1^0;//LED接在P1.0

unsigned char  CNT = 10;   //每次计数50ms,重复10次
unsigned char  count;
 
// 独立数码管的段码表
unsigned char val[16] = 
{
	0xc0, 0xf9, 0xa4, 0xb0, 
	0x99, 0x92, 0x82, 0xf8, 
	0x80, 0x90, 0x88, 0x83,
	0xc6, 0xa1, 0x86, 0x8e
};

/*************延时函数*************/
void delay()
{
	unsigned char i = 200,j = 100;
	while(i--)
		while(j--);
}
 
/******************************定时器中断服务程序*************************/
void tm0_isr() interrupt 1 using 1
{
		TH0 = 0x3C;
		TL0 = 0xB0;   //手工重载
	
		if (count--== 0)
		{
			// 说明已经中断了10次了,0.5s已经到了
			led = !led;				// LED取反
			count = CNT;
		}
}
 
/***************************主函数*********************************/
void main(void)
{
		unsigned char i = 0;
		/************定时器初始化*************/
		TMOD = 0x01;
		TH0 = 0x3C;
		TL0 = 0xB0;
		ET0 = 1;
		EA = 1;
		TR0 = 1;
	
		led = 1;
		count = CNT; 
	
		while (1)
		{
			//主线任务
			for (i=0; i<16; i++)
			{
				P0 = val[i];
				delay();
			}
		}
}

1.10.6.3, uso del widget de temporizador 51

Enlace de descarga: cálculo del temporizador 51

Enlace de descarga del programa para esta sección: Temporizador ¡
Esta lección ha terminado!

Supongo que te gusta

Origin blog.csdn.net/qq_27148893/article/details/109690947
Recomendado
Clasificación