谢谢各位和YEWUYI,
我的程序中有部分串口代码,就是负责把测得的设定温度和实际温度和PID的输出值发出到串口,从而电脑通过串口助手可以看到实时运行情况,现在我把这段代码,全部去掉,机器就运行正常了。为什么呢,下面是代码。
我看了手册的刊误表,也没有串口的BUG问题。
//***************************************************
////串口输出数据,xxx_xxx_xxx_xxx,
// PID次数_设定温度_实际温度_PWM输出值
//***************************************************
void uartputs(void)
{
unsigned char testcnthun,testcntten,testcntone,i;
unsigned int testtemp1;
testcnthun= testpidcnt/100;
testcntten= (testpidcnt/10)%10;
testcntone= testpidcnt%10;
uartout[0]= (testcnthun+48);
uartout[1]=(testcntten+48);
uartout[2]=(testcntone+48);
uartout[3]=45; //-
testcnthun= PID_Val.SetPoint/100; //settemp_buf/100;
testcntten= (PID_Val.SetPoint/10)%10; //(settemp_buf/10)%10;
testcntone= PID_Val.SetPoint%10; //settemp_buf%10;
uartout[4]= (testcnthun+48);
uartout[5]=(testcntten+48);
uartout[6]=(testcntone+48);
uartout[7]=45; //-
testtemp1=TEMPRETURE_1[ntcavr-40];
//testtemp1=testtemp1/100; //缩小100倍
testcnthun= testtemp1/100; //得到百位
testcntten= (testtemp1%100)/10; //得到十位
testcntone= testtemp1%10;
uartout[8]= (testcnthun+48);
uartout[9]=(testcntten+48);
uartout[10]=(testcntone+48);
uartout[11]=45; //-
testcnthun= pwmout/100;
testcntten= (pwmout/10)%10;
testcntone= pwmout%10;
uartout[12]= (testcnthun+48);
uartout[13]=(testcntten+48);
uartout[14]=(testcntone+48);
uartout[15]=32; //space
asm("nop");
for (i=0;i<16;i++)
{
Uart_TX(uartout[i]);
}
}
/**************************************************
//串口初始化
**************************************************/
void UART_init(void)
{
TXSTA = 0b00100100; //异步通信方式,8位数据发送格式,
RCSTA = 0b10010000; //8位数据接收格式.禁止接收数据.
SPBRG = 51 ; //103 ;//25 ; //600 bps,4Mhz 晶振
RCIE = 0; //使能串口接收中断.
RCIF = 0;
TXIE = 0; //发送不中断.
TXIF = 0;
}
void Uart_TX(unsigned char dcode)
{
TXREG=dcode;
while (TRMT ==0)
;
}
|