STC89C52单片机用定时器2怎么写1分钟延时的C程序?只要用定时器2的,定时器0和定时器1我都会了!
展开全部
#include<stc89.h>
#define uchar unsigned char
#define uint unsigned int
void TI2_way0(uint numerical);//定时器2 16位定时计数 numerical 定时计数数值 传统方式
void TI2_way1(uint numerical);//定时器2 16位自动重装定时计数 numerical 定时计数数值
void TI2_RUNset(bit state,way,control);//计数器/定时器2 运行与设置函数
/*定时器2相关函数开始*/
void TI2_way0(uint numerical) //定时器2 numerical 定时计数数值
{
numerical=(65536-numerical); //计算出定时值
TH2=(numerical/256); //定时器2的高8位计数值
TL2=(numerical%256); //定时器2的低8位计数
}
/*定时器2 16位自动重装定时计数 numerical 定时计数数值*/
void TI2_way1(uint numerical)//定时器2 16位自动重装定时计数 numerical 定时计数数值
{
//numerical=(65536-numerical); //计算出定时值
TH2=RCAP2H=(numerical/256); //定时器2的高8位计数值
TL2=RCAP2L=(numerical%256); //定时器2的低8位计数
}
/*
计数器/定时器2 运行与设置函数
state 0关闭定时计数器2 1启动定时计数器2
way 0定时器模式 1计数器模式
control 0:16位自动重装定时器计数器 1:16位捕获
*/
void TI2_RUNset(bit state,way,control)//计数器/定时器2 运行与设置函数
{
//IPH=PT2H; //定时器2中断优先级控制高位
RCLK=0;//接收时钟标志,0:使用定时器1作为串口接收发生器 1:使用定时器2作为串口接收发生器
TCLK=0;//发送时钟标志,0:使用定时器1作为串口发送发生器 1:使用定时器2作为串口发送发生器
switch(control) //启动方式选择
{
case 0x00:CP_RL2=0;EXEN2=0;break; // 0:16位自动重装定时器计数器
case 0x01:CP_RL2=1;EXEN2=1;break; // 1:16位捕获 捕获模式使能位
}
switch(way) //启动方式选择
{
case 0x00:C_T2=0;break; //定时器模式
case 0x01:C_T2=1;break; //计数器模式
}
TR2=state;//定时器2的启动控制位,1:启动定时器 0:停止定时器
ET2=1; //定时器2中断使能位
EA =1; //打开总中断
}
/*
void Timing_count2() interrupt 5 //引脚P10
{
TF2=0;//定时器2溢出标志,由硬件置1,必须由软件清0
EXF2=0;//定时器2的外部标志,由硬件置1,必须由软件清0
}
*/
#define uchar unsigned char
#define uint unsigned int
void TI2_way0(uint numerical);//定时器2 16位定时计数 numerical 定时计数数值 传统方式
void TI2_way1(uint numerical);//定时器2 16位自动重装定时计数 numerical 定时计数数值
void TI2_RUNset(bit state,way,control);//计数器/定时器2 运行与设置函数
/*定时器2相关函数开始*/
void TI2_way0(uint numerical) //定时器2 numerical 定时计数数值
{
numerical=(65536-numerical); //计算出定时值
TH2=(numerical/256); //定时器2的高8位计数值
TL2=(numerical%256); //定时器2的低8位计数
}
/*定时器2 16位自动重装定时计数 numerical 定时计数数值*/
void TI2_way1(uint numerical)//定时器2 16位自动重装定时计数 numerical 定时计数数值
{
//numerical=(65536-numerical); //计算出定时值
TH2=RCAP2H=(numerical/256); //定时器2的高8位计数值
TL2=RCAP2L=(numerical%256); //定时器2的低8位计数
}
/*
计数器/定时器2 运行与设置函数
state 0关闭定时计数器2 1启动定时计数器2
way 0定时器模式 1计数器模式
control 0:16位自动重装定时器计数器 1:16位捕获
*/
void TI2_RUNset(bit state,way,control)//计数器/定时器2 运行与设置函数
{
//IPH=PT2H; //定时器2中断优先级控制高位
RCLK=0;//接收时钟标志,0:使用定时器1作为串口接收发生器 1:使用定时器2作为串口接收发生器
TCLK=0;//发送时钟标志,0:使用定时器1作为串口发送发生器 1:使用定时器2作为串口发送发生器
switch(control) //启动方式选择
{
case 0x00:CP_RL2=0;EXEN2=0;break; // 0:16位自动重装定时器计数器
case 0x01:CP_RL2=1;EXEN2=1;break; // 1:16位捕获 捕获模式使能位
}
switch(way) //启动方式选择
{
case 0x00:C_T2=0;break; //定时器模式
case 0x01:C_T2=1;break; //计数器模式
}
TR2=state;//定时器2的启动控制位,1:启动定时器 0:停止定时器
ET2=1; //定时器2中断使能位
EA =1; //打开总中断
}
/*
void Timing_count2() interrupt 5 //引脚P10
{
TF2=0;//定时器2溢出标志,由硬件置1,必须由软件清0
EXF2=0;//定时器2的外部标志,由硬件置1,必须由软件清0
}
*/
追问
额 我们写的头文件都是#include
这个,你能不能写简单点。我对T2MOD和T2CON的设置还是不明白,能教教我吗?谢谢
追答
只是个16位自动重装定时/计数器
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |