📄 timerr_c.c
字号:
//*****************************************************
//实现功能:单片机的晶振为12MHz,使用定时/计数器0实现每
// 0.5秒改变一次接在P1.0上的发光二极管的状态.
//目标板 :至强51开发板
//开发商 :电子开发网www.dzkf.com (专业提供开发方案,
// 电子元器件网上订购,单片机培训服务)
//对开发板有什么疑问,请上我们的论坛bbs.dzkf.com探讨
//*****************************************************
#include <reg51.h>
//*****************宏定义*****************************
sbit p_light=P1^0;//宏定义P1.0为p_light
//****************************************************
//******************定义子函数************************
void timer_init(unsigned char time_num,unsigned char time_GATE,unsigned char time_CT,unsigned char time_mode);
//****************************************************
//*********************主函数************************
//描 述:使用定时/计数器0实现每0.5秒改变一次接在
// P1.0上的发光二极管的状态
//入口参数:无
//返回参数:无
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//****************************************************
int main(void)
{unsigned char i;
timer_init(0,0,0,1);//定时器0,GATE=0仅由TR0控制定时器0的启动,
//设定为定时器功能,方式1(计数器长度为16位)
//对定时器赋初值TC=15535,也就是计数50000次后溢出
TH0=0x3c;
TL0=0xaf;
TR0=1;//启动定时器0
while(1)
{p_light=!p_light;//取反i/o电平
for(i=0;i<10;i++)//循环10次,每次50ms,
{
while(!TF0);//等待计数器溢出
//计数器溢出,重新对定时器赋值
TH0=0x3c;
TL0=0xaf;
TF0=0;//清除定时器溢出标志
}
}
}
//************************定时器初始化函数***************************
//描 述:对定时/计数器初始化
//入口参数:unsigned char time_num 定时/计数器的编号(0或者1)
// unsigned char time_GATE 定时/计数器的门控制位(0或者1)
// unsigned char time_CT 定时/计数器的功能选择位(0或者1)
// unsigned char time_mode 定时/计数器的方式选择(0~3)
//返回参数:无
//设 计:ycj
//最后修改:时间(2006.5.2) 修改人(ycj)
//****************************************************
void timer_init(unsigned char time_num,unsigned char time_GATE,unsigned char time_CT,unsigned char time_mode)
{
if (time_num==0)
{
TMOD&=0xf0;
TMOD|=(time_GATE<<4)+(time_CT<<3)+(time_mode);
}
else if (time_num==1)
{
TMOD&=0x0f;
TMOD|=(time_GATE<<8)+(time_CT<<7)+(time_mode<<4);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -