MCS-51单片机的系统时钟频率:f=12MHz,利用定时器T0,采用工作方式2,T0以中断方式工作,

试编写又P1.0输出如下的连续脉冲波形的程序。上升沿延时50us,下降沿延时350us,上升沿延时50us,下降沿延时350us…………(C语言版)哪位高手给指点指点……小弟在这谢了

楼主:
1,你首先要知道:T0,采用工作方式2最大延迟时间为256us.
2,你可以通过计算公式:初值=256-t*F/12。t为定时时间,F就是你选用的晶体频率。
3,因此,你先编写一个50us的T0中断函数,350US通过设置一个全局的变量,让定时器T0产生7次中断后清0,这样你的两个延时都兼顾了。
4,你在MAIN函数初始化时,要将工作方式为你设置的方式。
如有其它问题,你go on...........
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-13
#include<reg51.h>
sbit P1_0=P1^0;
unsigned char i;
main()
{
i=0;
TMOD=0x02; //定时器0方式1
EA=1; //允许中断
ET0=1; //TI中断
TR0=1; //TI计数
while(1);
}

void timer_int(void) interrupt 1
{

TH0=199;//重新装入,考虑程序延时问题,大约6-7us
if(i==1)P1_0=0;
else if(i==7)
{
i=0;
P1_0=1;
}
i++; //方波实现
}追问

延时是那一句,能给说说嘛……

追答

因为下面执行的语句
if(i==1)P1_0=0;
else if(i==7)
{
i=0;
P1_0=1;
}
i++;

是需要时间的,大约是6-7us,是不能忽略的,如果是ms级的方波是可以忽略的,可以用
理论方式TH0=206;但稍微有误差的

因为下面执行的语句
if(i==1)P1_0=0;
else if(i==7)
{
i=0;
P1_0=1;
}
i++;

是需要时间的,大约是6-7us,是不能忽略的,如果是ms级的方波是可以忽略的,可以用
理论方式TH0=206;但稍微有误差的

本回答被提问者采纳
第2个回答  2011-12-13
工作方式1不行么