天天看點

SCM文章10課時:定時器中斷

JP3遇見P0口。

SCM文章10課時:定時器中斷
#include<reg51.h>
#define uchar unsigned char
uchar flag,num;
uchar code smg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//聲明子函數
void init();
void initTimer0();

void main()
{
	init();
	initTimer0();
	while(1)
	{
		//一句代碼都沒有
	}
}

void timer0() interrupt 1
{
	//又一次裝初值,由于要循環定時,定時50毫秒
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	flag++;
	if(flag == 20)
	{
		//每隔一秒數值加1
		flag = 0;
		P0 = smg[num];
		num++;
		if(num == 10)
		{
		   	num = 0;
		}

	}

}

void initTimer0()
{
	//裝初值。定時50毫秒
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	//選擇定時器T0方式1
	TMOD = 0x01;
	//開中斷同意位
	ET0 = 1;
	//開CPU總中斷
	EA = 1;
	//啟動定時器
	TR0 = 1;
}

void init()
{
	flag = 0;
	num = 0;

}      

兩個定時器的使用方式同樣,如今就總結一下定時器的使用步驟:

1、裝初值

2、确定工作方式,相關的寄存器是TMOD

3、開中斷同意ET0或者ET1,,和EA

4、啟動定時器

5、寫中斷服務程式

void 函數名() interrupt 1(假設選擇定時器1,代号就是3)

{

//又一旦早期安裝值

}

版權聲明:本文部落客原創文章,部落格,未經同意不得轉載。