QQ圖片20170829180917.jpg (133.08 KB, 下載次數: 115)
下載附件
2017-8-29 18:14 上傳
如上圖 用定時器只取一段方波出現 怎么用
使用按鍵 出現一段方波 也可以不用定時器
有個問題 {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--);
//}
|