已知AT89C51的时钟频率为6MHz,用定时器编写程序,使P1.0输出一个占空比为1/4的脉冲波。(用c语言)

在线等,先谢谢了!

楼上写得不错,不过用穷举法太占空间,也不利于阅读,如果要产生1%占空比,你不会就穷举100次吧,结构改一下,增加一个中断计数变量CNT,在中断处理程序中写入以下:
计数初始化;
if(++CNT==3)
{
P1.0=1;
CNT==0;
}
else P1.0=0;
详细程序就不写了,很简单的,无非就是初始化一下,分给楼上吧,人家花了不少的时间来帮你。建议直接用中断,个人不喜欢用查询法。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-13
C语言的控制程序如下:
//---------------------------------------
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit P1_0 = P1^0;

void main(void)
{
TMOD = 0x01;
TR0 = 1;

while (1) {
P1_0 = 1; //输出高电平.
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256;
while (TF0 == 0);
TF0 = 0;
//-----------以上,P1.0输出了40ms的高电平
//=========================================
P1_0 = 0; //输出低电平.
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256;
while (TF0 == 0);
TF0 = 0;
//-----------以上,P1.0输出了40ms的低电平.

P1_0 = 0; //输出低电平.
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256;
while (TF0 == 0);
TF0 = 0;
//-----------以上,P1.0输出了40ms的低电平.

P1_0 = 0; //输出低电平.
TH0 = (65536 - 20000) / 256;
TL0 = (65536 - 20000) % 256;
while (TF0 == 0);
TF0 = 0;
//-----------以上,P1.0输出了40ms的低电平.

}
}追问

使用中断

本回答被网友采纳
相似回答