C51向串口屏发送数据总是失败

主函数如下

#include <STC8A8K64D4.H>  
#include <intrins.h>
#include <absacc.h>
#include <stdio.h> 
#include <math.h> 
#include <string.h> 
#include "uart.h"
sbit TX  = P3^0; 
sbit RX  = P3^1; 

#define uchar unsigned char
#define uint  unsigned int

int date1,date2;
uchar xdata buf[64];
void UartInit(void)        
{
    PCON &= 0x7F;        
    SCON = 0x50;        
    AUXR |= 0x40;        
    AUXR &= 0xFE;        
    TMOD &= 0x0F;        
    TMOD |= 0x20;        
    TL1 = 0xDC;            
    TH1 = 0xDC;            
    ET1 = 0;            
    TR1 = 1;            
}
void UART_Send_Byte(unsigned char mydata)    
{
 ES=0;
 TI=0;
 SBUF=mydata;
 while(!TI);
 TI=0;
 ES=1;
}


void UART_Send_Str(char *s)
{
 int i=0;
 while(s[i]!=0)
 {
     UART_Send_Byte(s[i]);
     i++;
 }
 
}
void UART_Send_END(void)
{
     UART_Send_Byte(0xFF);
     UART_Send_Byte(0xFF);
     UART_Send_Byte(0xFF);
}

void Delay100ms()        
{
    unsigned char data i, j, k;

    _nop_();
    _nop_();
    i = 5;
    j = 52;
    k = 195;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}
void main(void)
{
 uint s=0;
     P0M0 = 0x00; P0M1 = 0x00; 
    P1M0 = 0x00; P1M1 = 0x00; 
    P2M0 = 0x00; P2M1 = 0x00; 
    P3M0 = 0xff; P3M1 = 0x00; 
    P4M0 = 0x00; P4M1 = 0x00; 
    P5M0 &= ~0x0c; P5M1 &= ~0x0c; 
    P6M0 = 0x00; P6M1 = 0x00; 
    P7M0 = 0x00; P7M1 = 0x00; 
    
    P_SW1 = 0x00; 

 UART_Init();  
 Delay100ms();
 UART_Send_END();
 UART_Send_Str("page0");
 UART_Send_END(); 
 Delay100ms();
    Delay100ms();
    Delay100ms();
    Delay100ms();
    Delay100ms();
   while(1)
  {
        date1=1234,date2=5678;
        Delay100ms();
        UART_Send_END();
         sprintf(buf,"n0.val=%d",date1);
         UART_Send_Str(buf);
         UART_Send_END();
        UART_Send_END();
         sprintf(buf,"n1.val=%d",date2);
         UART_Send_Str(buf);
         UART_Send_END();
}
}


uart文件中函数如下:

#ifndef __UART_H__
#define __UART_H__

void UART_Init();
void UART_Send_Byte(unsigned char mydata);
void UART_Send_Str(char *s);
void UART_Send_Enter();
void u32tostr(unsigned long dat,char *str);
unsigned long strtou32(char *str);
void UART_Put_Num(unsigned long dat);
void UART_Put_Inf(char *inf,unsigned long dat);
void binary(unsigned char dat);

#endif

线路连接无误,波特率一致,为什么运行该代码时,淘晶驰的串口屏TJC3224T024_011上未显示结果?

引用GPT回答:

  1. 串口屏的波特率设置是否正确,要和单片机的波特率设置一致。
  2. 确保串口引脚连接正确,TX引脚连接到串口屏的RX引脚,RX引脚连接到串口屏的TX引脚。
  3. 检查您是否使用了正确的串口初始化函数,应该是"UartInit()"而不是"UART_Init()"。
  4. 确认串口屏的显示页面是否正确配置。您在主函数中调用了"UART_Send_Str("page0");"发送了命令切换到第0个页面,但需要确认该页面是否存在且配置正确。

如果您已经确认上述问题都没有出现,但串口屏仍未显示结果,请尝试以下方法:

  1. 通过串口工具(如TeraTerm、SecureCRT等)连接串口屏,查看串口屏是否接收到了数据。如果能够收到数据,说明单片机和串口屏之间的连接与通信正常,问题可能出在您的代码逻辑上。
  2. 在发送数据之前,可以尝试给串口屏发送一个固定的指令(如"UART_Send_Str("ok");"),并查看串口屏是否能够正常显示该指令。如果串口屏不能显示这个固定指令,可能是串口屏本身的问题。

从你提供的代码中,我注意到你在使用串口通信时,使用了波特率 9600(在 UART_Init 函数中初始化波特率为 9600),但你没有指定数据位、校验位和停止位等其他串口参数。在使用串口通信时,确保配置正确的波特率以及其他必要的串口参数,这样才能确保通信正常。

另外,你的代码中使用了淘晶驰的串口屏 TJC3224T024_011,并且在代码中通过 UART_Send_Str 函数发送了一些字符串数据和数字数据。请确保你在 TJC3224T024_011 的配置中设置了正确的波特率和串口参数,以便与你的代码进行通信。

以下是一些可能导致通信失败的问题和解决方案:

  1. 波特率设置: 确保你的代码和 TJC3224T024_011 上的波特率设置一致,例如都是 9600。

  2. 数据位、校验位和停止位设置: 确保你的代码和 TJC3224T024_011 上的数据位、校验位和停止位设置一致。

  3. 引脚连接: 确保你的串口引脚连接正确,TX 和 RX 引脚连接正确,并且没有短路或接触不良。

  4. 配置文件检查: 确保 TJC3224T024_011 上的配置文件没有问题,特别是关于串口通信设置的部分。

  5. 调试信息: 可以在代码中加入一些调试信息,如在发送数据之前打印一些调试信息,以确保代码执行到正确的地方,并且发送数据成功。

如果你尝试了以上解决方案后,仍然无法解决问题,建议查阅 TJC3224T024_011 的官方文档或技术支持,获取更具体的帮助和支持。他们可能会对该串口屏的配置和通信有更深入的了解,并提供更专业的技术支持。