求助各位大神
小弟在编写程序的过程中碰到了如题所示的问题,三个定时器其中0和1用于定时,定时器2用于波特率发生器,但是一旦将串口发送的函数放在main大循环中,串口没有输出,但是放在main的循环前面,串口是可以执行一次的,而且T2初始化之后要想保证T0 T1正常,必须重新给T0 T1初始化,以下是部分代码:
void T2init()
{
T2MOD = 0x01; //自动重载
T2CON = 0x30; //T2用做发送接收时钟
// TH2 = 0xFF; //9600波特率,11.0592Mhz晶振
// TL2 = 0xDC;
RCAP2H = 0xFF;
RCAP2L = 0xDC;
SCON = 0x50; //串口方式1,1个起始位,1个停止位,8位数据
TR2 = 1; //启动T2
}
main()
{
int i;
int j;
IP=0X10;
t=30000;
T2init();
// uart_cfg();
send_string(alARM);
delay(5);
send_string(weizhi);
// a=0; //发送报警之后恢复T0 T1基本参数
TH0=(65536-t)/256;
TL0=(65536-t)%256;
TMOD=0X11;
TR0=0X01;
TF0=0X00;
PT0=0;
ET0=0X01;
TH1=0xd8;
TL1=0xef;
TR1=0X01;
TF1=0X00;
PT1=1;
ET1=0X01;
while(1)
{
//圈数计算
j=z/4;
i=j;
ge=i%10;
i=j/10;
shi=i%10;
i=j/100;
bai=i%10;
i=j/1000;
qian=i%10;
i=j/10000;
wan=i%10;
//键盘显示值计算
P1=0x0f;
if(P1!=0x0f&&a==0)//电机未运转则键盘有效
{
if(P1!=0x0f&&a==0)
{
Key_Scan();
}
if(key==15) //清零
{
age=0;
ashi=0;
abai=0;
aqian=0;
awan=0;
x=0;
m=0;
// (*((void (*)())(rst)))(); // 将rst数组当函数调用 产生复位效果 (已经屏蔽)
}
else if(m<6553) //键盘设定值要小于65535
{
m=m*10+key;
age=m%10;
n=m/10;
ashi=n%10;
n=m/100;
abai=n%10;
n=m/1000;
aqian=n%10;
n=m/10000;
awan=n%10;
x=m;
}
while(P1!=0xf0);
}
if(already==0)
{
if(z/2==x)
{
//a=~a;
b=~b;
already=1;
}
}
while(P3_7) //开关
{
while(P3_7) ;
a=~a;
}
while(P3_6) //方向
{
while(P3_6) ;
b=~b;
}
while(P3_5) //减速
{
while(P3_5); // t值最大为65535
if(t<=40000)
{
t=t+10000;
}
}
while(P3_4) //加速
{
while(P3_4) ;
if(t>=20000)
{
t=t-10000;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>