在AT89S51单片机中,已知时钟频率为12MHZ请编程使p0.0和p0.1分别输出周期为2s和5

2024-12-17 13:07:45
推荐回答(2个)
回答1:

#include
void delay1ms(unsigned int i)
{
unsigned char j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{
;
}
}
}
void main()
{
while(1){
P0=0xfe; //就是P0.0=0
delay1ms(1000);
P0=0xff;//就是P0.0=1
delay1ms(1000);//这里就是P0.0输出周期为2S的方波。

P0=0xfd;//就是P0.1=0
delay1ms(250);
P0=0xff;//就是P0.1=1
delay1ms(250);//P0.1输出周期为500MS的方波。

}
}
可能程序写的不规范,但原理就是这样,当然你熟练的话是可以用定时器来设计的,那样会更准确,我这里是用程序延时,基本上也没有差别。只是定时器会更准确些。但这个是可以满足你的要求的

回答2:

#include
#define uchar unsigned char
#define uint   unsigned int 

sbit pause1= P0^0;
sbit pause_2s= P0^1;

uint t_500ms;
uint t_2s;

void delay1ms(uint i)
{
  uchar i;
  for(i=0;i<125;i++)//时间可调整
  {
    ;
  }
}
void main(void)
{
    t_500ms=0;
    t_2s=0;
     while(1)
{
    t_500ms++;
    t_2s++;
    if(t_500ms>=500)
    {
       pause1 =~pause1;    //500毫秒方波输出
       t_500ms=0;
    }
    if(t_2s>=2000)
    {
       t_2s=0;
       pause_2s=~pause_2s; //2秒的方波输出
    }
    delay1ms();
}
}