快捷搜索:

51单片机1秒定时C言语程序(通过调试)

/***************************
* 定义 硬件引脚连接
****************************/
sbit p1_0=P1^0;
/*************************
* 定义 全局变量
***********************/
// Byte data intrCounter; // 计时器中断次数
// Byte data beginNum; // 开始倒计时的时间
//Byte data counterBack; // 将中断次数放在里边 以备后用
unsigned char intrCounter;
unsigned char beginNum;
unsigned char counterBack;
void IT0_Init(void);
void Timer0_Overflow();
void GetCounter(void);
void main()
{
p1_0=1;
GetCounter() ;每一秒改变一次;
p1_0=!p1_0;;
}
/*********************************
* GetCounter
*
* Description: 取得预先设置的倒计不时 间
*******************************/
void GetCounter(void)
{
//beginNum=1;//在所有开关都没有拨动的时分 倒计时为1秒,比设置为0秒要好
intrCounter=20;//每一秒对应的中断次数为20次
}
/*****************************
* IT0_Init
* Description: 初始化计时器T0的状态
********************************/
void IT0_Init(void)
{
TMOD=0x01;//设置T0在方式1下工作
TH0=0x3C;
TL0=0xAF;//这两个存放 器存的是计数器的计数开始的值,核算 发现这两个值累加至溢出后正好是50ms
ET0=1;//使T0中断可以溢出
EA=1;//开启总中断
TF0=0;//溢出位清零
TR0=1;//开启T0
}

/******************************
* Timer0_Overflow() interrupt 1
* Description: 中断溢出效能 程序, 选用 的是中断方式1, 后边 最好不加using选择存放 器组避免 与体系 用在主程序的存放 器冲突

*********************************/
void Timer0_Overflow() interrupt 1
{
static unsigned char second=20;//用20次中断来判断1秒
TH0=0x3C;
TL0=0xAF;
second--;
intrCounter--;

if (second==0)//每隔一秒的操作
{

second=20;//从头 赋值每秒计数器
}
if (intrCounter==0)
{
TR0=0;//关闭T0计数器
}

您可能还会对下面的文章感兴趣: