以下程序擇晶振為12MHz
時鐘i周期為晶振的倒數(shù),位1/f(晶振),機器周期為時鐘周期的12分頻,即為12*1/f(晶振),故12MHz的機器周期為1us
定時器1/0
/******************************************************************************/
#include
#define uint unsigned int //宏定義,為了后面定義變量書寫簡便
#define uchar unsigned char
uchar mm=0; //全局變量
uchar flag_get=0; //定義標(biāo)志位,為1則燈亮
/****************************************************************************/
/* 名稱:延時函數(shù) */
/* 功能:C語言中常用的for循環(huán)延時方法 */
/* 延時長短可以通過變量初值來改變 */
/****************************************************************************/
void Delay1ms(uint count)
{
uint i,j;
for(i=0;i for(j=0;j<110;j++); } /****************************************************************************/ /* 名稱:主函數(shù) */ /* 功能:利用定時器1每隔1秒使P1口LED燈全亮 */ /****************************************************************************/ void main() { TMOD=0x10; //設(shè)置T1工作于定時方式1(有16位計數(shù)) TH1=(65536-50000)/256; //定時器1賦初值,是TH1而不是TH0噢(若要設(shè)置是定時器0的話,把1改為0,下同);計數(shù)了50000次,即為50ms TL1=(65536-50000)%256; EA=1; //開總中斷 ET1=1; //開定時器1中斷 TR1=1; //開始計數(shù) while(1) { if(flag_get==1) { P1=0x00; Delay1ms(200); flag_get=0; } else P1=0xff; } } /****************************************************************************/ /* 名稱:定時器1中斷 */ /* 功能:通過定時1秒產(chǎn)生中斷使標(biāo)志位置1 */ /****************************************************************************/ void timer1() interrupt 3 //注意了,這里是3,為定時器1的標(biāo)號,若改為1的話則為定時器0,要區(qū)別于基于TMOD控制的工作方式和中斷向量入口地址 { mm++; TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(mm==20) { mm=0; flag_get=1; } } 外部中斷1/0 #include #define uint unsigned int //宏定義,為了后面定義變量書寫簡便 #define uchar unsigned char Init() { EX0 = 1; //打開外部中斷(若要設(shè)置外部中斷1的話,把0改為1,下同) IT0 = 1; //設(shè)置外部中斷的脈沖觸發(fā)方式 EA = 1; //開總中斷 } void main (void) { Init(); while(1) { //you want。。。 } } void exter0(void) interrupt 0 //0位外部中斷0的的標(biāo)號,2為外部中斷2的標(biāo)號 { //you want。。。 }