最近做了一個小的項目,寫了一段程序,編譯沒有錯,但是在用keil進行仿真時,有的程序段直接跳過不執行了,百思不得其解!望哪位高手指點指點!
附:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit d_q=P1^1;
sbit d_h=P1^0;
sbit d_z=P1^3;
sbit d_y=P1^2;
sbit feng=P2^0;
uchar dot,flag;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init ()
{
TMOD=0x05;// T0的方式1
TH0=0;
TL0=0;
TR0=1;//計數器0的設置
d_q=0;
d_h=0;
}
main()
{
init ();
while(1)
{
d_q=1;
delay(5);
d_q=0;
delay(7);
dot=TL0;
if(dot>5)
{
TH0=0;
TL0=0;
}
dot=TL0;
if(dot==5)
{
//主要是從這兒開始的
TL0=0;
d_q=0;
d_h=0;
d_z=0;
d_y=0;
feng=1;
delay(600);
feng=0;
delay(600);
feng=1;
delay(600);
feng=0;
delay(600);
feng=1;
delay(600);
// 后面在中斷子程序里面的相同部分也是一樣
feng=0;
delay(2000);
d_q=1;
TL0=0;
flag=0;
}
dot=TL0;
if(dot==3&flag==0)
{
flag=1;
feng=1;
delay(600);
feng=0;
delay(4400);
d_q=1;
TL0=0;
}
d_q=1;
delay(8);
d_q=0;
}
}
你這個程序看起來問題有點大!可能定時器會 跑飛。建議把定時器中斷在理解一下吧!
哦, 這不是原程序, 我只是把它用作的普通計數器 就記一個0—5的數,采用的是查詢的方式沒采用中斷的方式!EA=1,是原程序中的外部中斷,忘刪了!
你這個程序看起來問題有點大!可能定時器會 跑飛。建議把定時器中斷在理解一下吧!
哦, 這不是原程序, 我只是把它用作的普通計數器 就記一個0—5的數,采用的是查詢的方式沒采用中斷的方式!EA=1,是原程序中的外部中斷,忘刪了!
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |