单片机 C 编程问题 高手来

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:13:28
#include"reg51.h"
#define uchar unsigned char
sbit key =P2^0;
int code dat[9]={63731,63628,63853,63928,64021,64103,64185,64260,64331 };
int num;

uchar count;

void init()
{
TMOD=0x11;num=64260;
TH0=num/256;
TL0=num%256;
TH1=64536/256;
TL1=64536%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;

}
void delay_ms(uchar ms)
{
count=0;
while(count!=ms);

}
void t1() interrupt 3 using 1
{
count++;
TH1=64536/256;
TL1=64536%256;
}

void t0() interrupt 1 using 0
{
key=!key;
TH0=num/256;
TL0=num%256;
}
void main()
{
uchar i;
init();
for(i=0;i<9;i++)
{
num=dat[i];
delay_ms(20); //执行此句后 i 为0 为什 么?????
}

while(1);
}
1,2楼的兄弟压根就不会单片机,3楼的看来是会的,不过好像把我题意给改了,照你说的也该改成wh

.

while(count!=ms); 有问题 (中断错乱)

while(count>ms); 正确(Keil仿真通过)

.
悬赏分:10 ,,应加200

void delay_ms(uchar ms)
{
count=0;
while(count!=ms);
这个函数有问题,这是一个死循环,改成下面的程序应该就没问题了:
void delay_ms(uchar ms)
{
count=0;
while(++count!=ms);

第一次循环是0,在执行一个就不是0了
for(A,B,C){D}

是先处理A,再判断B,执行D,再执行C,判断B,执行D.....直到不能满足B就退出

你第一次执行A的时候i=0;B的时候条件满足,执行D的时候i不变所以还是0