完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ATOS实验箱中测量节点温度,并显示出来,程序运行正确,也成功下载,但是在串口助手却只能显示接收到数据,界面上啥都没有,改成16进制显示,界面上显示的全部是0,不知道是是怎么回事?求大神解答~ |
|
相关推荐
11个回答
|
|
波特率对吗?
|
|
|
|
|
|
|
|
波特率设置的是115200,没错~找了很久 都不知道是怎么回事?
|
|
|
|
/* initUART_Timer.h */ #include #define uint unsigned int #define uchar unsigned char #define LED1 P1_0 //定义LED1为P10口控制 #define LED2 P1_1 //定义LED2为P11口控制 #define LED3 P1_4 //定义LED3为P14口控制 // Data typedef unsigned char BYTE; // Unsigned numbers typedef unsigned char UINT8; typedef unsigned char INT8U; typedef unsigned short UINT16; typedef unsigned short INT16U; typedef unsigned long UINT32; typedef unsigned long INT32U; // Signed numbers typedef signed char INT8; typedef signed short INT16; typedef signed long INT32; #define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0x00)//三个 /************************** 系统时钟 不分频 计数时钟 32分频 **************************/ void InitClock(void) { CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振 while(CLKCONSTA & 0x40); // 等待晶振稳定 CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ } /**************************** //初始化程序 *****************************/ void InitLed(void) { P1DIR |= 0x13; //P1_0、P1_1定义为输出 LED1 = 0; //LED1灯熄灭 LED2 = 0; LED3 = 0; } /**************************** T3初始化 ****************************/ void InitT3(void) { T3CCTL0 = 0X44; // T3CCTL0 (0xCC),CH0 中断使能,CH0 比较模式 T3CC0 = 0xFA; // T3CC0设置为250 T3CTL |= 0x9A; // 启动T3计数器,计数时钟为16分频。使用MODULO模式 IEN1 |= 0X08; IEN0 |= 0X80; //开总中断,开T3中断 } /***************************************** 串口初始化函数:初始化串口 UART0 *****************************************/ void InitUART0(void) { PERCFG = 0x00; //位置1 P0口 P0SEL = 0x3c; //P0用作串口 P2DIR &= ~0XC0; //P0优先作为UART0 U0CSR |= 0x80; //串口设置为UART方式 U0GCR |= 11; U0BAUD |= 216; //波特率设为115200 UTX0IF = 1; //UART0 TX中断标志初始置位1 U0CSR |= 0X40; //允许接收 IEN0 |= 0x84; //开总中断,接收中断 } void UartTX_Send_String(char *Data,int len) { int j; for(j=0;j U0DBUF = *Data++; while(UTX0IF == 0); UTX0IF = 0; } U0DBUF = 0x0A; // 换行 while(UTX0IF == 0); UTX0IF = 0; } void Delay(uint n) { uint i; for(i=0;i void Delayms(uint xms) //i=xms 即延时i毫秒 (16M晶振时候大约数,32M需要修改,系统不修改默认使用内部16M) { uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); } /* main.c */ #include #include "InitUART_Timer.h" //注意在option里设置路径 #include "stdio.h" void initTempSensor(void) { DISABLE_ALL_INTERRUPTS(); //关闭所有中断 InitClock(); //设置系统主时钟为 32M TR0=0X01; //set '1' to connectthe temperature sensorto the SOC_ADC. ATEST=0X01; // Enablesthe temperature sensor } float getTemperature(void) { uint value; ADCCON3 = (0x3E); //选择1.25V为参考电压;12位分辨率;对片内温度传感器采样 ADCCON1 |= 0x30; //选择ADC的启动模式为手动 ADCCON1 |= 0x40; //启动AD转化 while(!(ADCCON1 & 0x80)); //等待 AD 转换完成 value = ADCL >> 4; //ADCL 寄存器低 4位无效 value |= (((UINT16)ADCH) << 4); return (value-1367.5)/4.5-5; //根据AD值,计算出实际的温度,温度系数应该是4.5 /℃ //进行温度校正,这里减去5℃(不同芯片根据具体情况校正) } void main(void) { // char i; char TempValue[6]; float Temp; InitUART0(); //初始化串口 initTempSensor(); //初始化 ADC while(1) { /*AvgTemp = 0; for(i = 0 ; i < 64 ; i++) { AvgTemp += getTemperature(); AvgTemp=AvgTemp/2; //每次累加后除 2 } */ Temp=getTemperature(); /****温度转换成ascii码发送****/ TempValue[0] = (unsigned char)(Temp)/10 + 48; //十位 TempValue[1] = (unsigned char)(Temp)%10 + 48; //个位 TempValue[2] = '.'; //小数点 TempValue[3] = (unsigned char)(Temp*10)%10+48; //十分位 TempValue[4] = (unsigned char)(Temp*100)%10+48; //百分位 TempValue[5] = ' |