如上图 用定时器只取一段方波出现 怎么用
使用按键 出现一段方波 也可以不用定时器
有个问题 {case 1:这个for循环执行不了()}
#include<reg52.h>
/*****************************************************************/
unsigned char a,s,x,y,z;
int flag;
sbit ANJIAN=P2^0; //按键
sbit P00=P0^0;
sbit P01=P0^1;
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
50hz,每秒50个脉冲,就是100次跳变。1/100 =10ms 这是频率
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=(65536-50)/256; //重新赋值 12M晶振计算,指令周期1uS,
TL0=(65536-50)%256; //0.1mS方波半个周期0.05mS,
if(ANJIAN==0) //按键按下
{
a++; //按键累加
while(!ANJIAN);
}
switch(a)
{
case 1:
P01=0; //正转
if(flag++==10) // 计数10次
{
P00=!P00; // 取反
flag=0; // 清除i
}
break;
//case 1:
//这个for循环执行不了
// P01=0; //正转
// for(i=0;i<5;i++)
// {
// P00=0;
// delay(50);
// P00=1;
// delay(50);
// }
// break;//
case 2:a=0;break;
default:break;
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
while(1)
{
Init_Timer0();
}
}
//
///*------------------------------------------------
// 延时函数 11.0592MHZ z=1时精确延时1ms
//------------------------------------------------*/
//
//void delay(z)
//{
// for(x=z;x>0;x--)
// for(y=848;y>0;y--);
//}
|