Technology sharing

05: timer interpellare

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


1. Cum unitas centralis processus (CPU) aliquid dispensat, postulatio repentina ab exterioribus oritur, CPU postulans ut opus hodiernam suspendat et transitum ad eventum exigentias expediat . Primum opus, talis processus interpellatio appellabatur.
2. Solet, fons interrumpere, iuxta prioritatem fontis interpellandi, et interpellandi petendi fons instantissimus eventus primo discursum est, id est, unumquemque fontem interrumpere specificatur habere gradum prioritatis. CPU semper respondet petitioni interruptae cum prima prima summa.
3. C51 microcontroller habet 8 fontes petitionem interpellandi:

Insert imaginem descriptionis hic

1. Vicis T0 interrupt

Insert imaginem descriptionis hic

Ut in figura ostenditur: Interrumpit etiam tabularum configurationem opus. Duo genera registrorum sunt. Primum est mandare imperium obloquium (IE et XICON), et alterum est registri prioritas. Hic tantum studium interregem timer T0.
T0 uti timer adjicias;

ET0 = 1;ET0为定时器T0的中断开关,为1时打开中断
EA = 1;  EA为中断源的总开关。
  • 1
  • 2

Postquam tempus constitutum est, programmata munus in interpellatione facere scis. — Query numerum interrumpere (numeros interpellantes a diversis fontibus diversis generatos interrumpere)
Insert imaginem descriptionis hic

2. Casus: Timor T0 utens interrumpere ad cognoscendam lucem conversionis interdum in intervallis 1s

#include <REGX52.H>

sbit LED1 = P3^7;
int cnt = 0;

void Timer0_Init_10ms(void)		//10毫秒@11.0592MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0xDC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

void Timer0_interrupt_Init(void)//定时器T0中断初始化
{
	ET0 = 1;
	EA = 1;
}

void main(void)
{ 
	LED1 = 1;//先让灯熄灭的状态
	Timer0_Init_10ms();//打开定时器T0
	Timer0_interrupt_Init();//打开定时器T0中断
	while(1)
	{
		
	 }
}

/*定义中断函数*/
void Timer0Hander() interrupt 1
{
	TF0 = 0;//软件清零
	TL0 = 0x00; //重新给初值
	TH0 = 0xDC;
	cnt++;
	if(cnt == 100)//数100次,相当于1s
	{
		cnt = 0;
		LED1 = !LED1;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • Cum interrumpere possit, principale munus singulis 10 libris exiliet et programma in functione interruptione exsecutioni mandabitur.
  • Cum primum denas timoi advenit, functionem interrumpendam exsequuntur, timer pro 10ms, cnt=1, et lux adhuc interiit.
  • Cum secunda timentis 10 minuta advenit, munus interrumpendum exsequitur, timer re- pone pro 10ms = 2 et lux adhuc interiit.
  • Cum 100 10 centum timoris advenerit, functionem interrumpentem exsequens, timentem pro 10ms, cnt = 100 repone, et lux volvitur.

Hoc modo 1s interdum intervalla efficiuntur.