c编程时,51单片机怎么用定时器写一个延时1ms的子函数
如题,作用像voiddelay(uint16n){uint16i,j;for(i=n;i>0;i--)for(j=125;j>0;j--);}可以设置参数来决定调用时延长...
如题,作用像
void delay(uint16 n)
{uint16 i,j;
for(i=n;i>0;i--)
for(j=125;j>0;j--);}
可以设置参数来决定调用时延长时间 展开
void delay(uint16 n)
{uint16 i,j;
for(i=n;i>0;i--)
for(j=125;j>0;j--);}
可以设置参数来决定调用时延长时间 展开
4个回答
展开全部
51单片机的定时器工作方式有4中,其中3种需要在中断函数中重装初值,而且C51明确规定中断函数不能传入参数也不能返回参数,那么这样一来就只能用不用重装初值的工作方式2了,我给出了工作方式2的初始化函数:
void init(unsigned int x)
{
TMOD=0x02;
TH0=x;
TL0=x;
EA=1;
ET0=1;
TR0=1;
}
这样将x作为定时器的初值传入,当TL0计数完成时,TH0会自动将值赋给TL0,TH0不变,当然你自己来定义键盘函数或者什么函数来决定x的值。
希望我的回答能帮助到你。
void init(unsigned int x)
{
TMOD=0x02;
TH0=x;
TL0=x;
EA=1;
ET0=1;
TR0=1;
}
这样将x作为定时器的初值传入,当TL0计数完成时,TH0会自动将值赋给TL0,TH0不变,当然你自己来定义键盘函数或者什么函数来决定x的值。
希望我的回答能帮助到你。
展开全部
好办
用C51,方式一
void delay(unsigned int T) //T的单位取微秒
{
signed int cnt; //这里用符号数的相反数 就是2^16-n的原码,也可以定义无符号数自己换成2^16-n
cnt=-(fosec*1.0/12)*T; // fosec的单位MHz
TMOD=0x01;
TH0=(unsigned char)(cnt>>8);
TL0=(unsigned char)cnt;
TR0=1;
while(!TF0);
TR0=0;
TF0=0;//加这句是为了可以循环使用
}
用C51,方式一
void delay(unsigned int T) //T的单位取微秒
{
signed int cnt; //这里用符号数的相反数 就是2^16-n的原码,也可以定义无符号数自己换成2^16-n
cnt=-(fosec*1.0/12)*T; // fosec的单位MHz
TMOD=0x01;
TH0=(unsigned char)(cnt>>8);
TL0=(unsigned char)cnt;
TR0=1;
while(!TF0);
TR0=0;
TF0=0;//加这句是为了可以循环使用
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假如使用12MHZ晶振
定时器初始化:
void init(void )
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}
主程序;
main(void)
{
init();
while(1)
{
;
}
}
void inter_t0(void) //1ms中断一次
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
; // 1毫秒中断后要添加的代码
}
定时器初始化:
void init(void )
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}
主程序;
main(void)
{
init();
while(1)
{
;
}
}
void inter_t0(void) //1ms中断一次
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
; // 1毫秒中断后要添加的代码
}
追问
这个好像不能自己定义延长时间呀
追答
你可以在中断中对中断次数进行计数,例如1毫秒中断一次,你要延时1秒,就计数1000次就是1秒了。 计数要用一个整形变量; int cnt;
计数到1000后要对变量清零,再重新 开始计数
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void main()
{
TMOD = 0x01;//设置T0为工作方式1
for(;;)
{
TH0 = (65536-1000)/256 //设定初值
TL0 = (65536-1000)%256; //设定初值
TR0 = 1;//启动定时器0
}
{
TMOD = 0x01;//设置T0为工作方式1
for(;;)
{
TH0 = (65536-1000)/256 //设定初值
TL0 = (65536-1000)%256; //设定初值
TR0 = 1;//启动定时器0
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询