mtt661 发表于 2025-2-18 15:59:37

请问AI8051U 32bit模式,串口自动下载问题?

相同的程序,在8位下可以正常自动烧录,在32位下,不行,但是在32位下,串口的收发又是正常的,
程序都是抄官方的{:ciya:},ISP软件的设置,除了从8位改到32位,其他都没变,keil也是用c251新建的工程。
//#define FOSC      40000000UL
#define FOSC      33177600UL
//#define FOSC      24000000UL
//#define FOSC      11059200UL
#define BRT         (65536 - FOSC / 115200 / 4)


void UartInit()                //定时器1(模式0)做串口1波特率发生器
{
    SCON = 0x50;
    TMOD = 0x00;
    TL1 = BRT;
    TH1 = BRT >> 8;
    TR1 = 1;
    AUXR = 0x40;
    ES = 1;      //打开串口中断
    EA = 1;      //打开总中断

}
void UartSend(unsigned char dat)      //发送一个字节
{

    SBUF = dat;
      while(TI==0);
      TI=0;
}

void CheckCustomCmd(unsigned char dat)                   //检测命令序列:"@STCISP#"
{
      unsigned char bStage;
      
    switch (bStage++)
    {
    default:
      L_Check1st:
    case 0:                                     //检测命令头
      bStage = (dat == '@');
      break;
    case 1:
      if (dat != 'S') goto L_Check1st;
      break;
    case 2:
      if (dat != 'T') goto L_Check1st;
      break;
    case 3:
      if (dat != 'C') goto L_Check1st;
      break;
    case 4:
      if (dat != 'I') goto L_Check1st;
      break;
    case 5:
      if (dat != 'S') goto L_Check1st;
      break;
    case 6:
      if (dat != 'P') goto L_Check1st;
      break;
    case 7:
      if (dat != '#') goto L_Check1st;
//      delay(5);                           //检测到正确的命令序列后复位到系统区
      IAP_CONTR = 0x60;                     //复位到系统区
      break;
    }
}

void UartIsr() interrupt 4      //串口1中断函数
{

      unsigned char i=0;
    if (RI)      //接收
    {
      RI = 0;
      CheckCustomCmd(SBUF);      //检测串口为指定命令函数

    }
      
//    if (TI)
//    {
//      TI = 0;

//    }      
      
}


DebugLab 发表于 2025-2-18 18:52:12

任何情况下,只要CPU还能正常工作,IAP_CONTR=0x60都能软复位到ISP区,先把IAP_CONTR=0x60替换为点亮一个LED,观察LED有无变化,再修改程序排查问题
串口收发框架可以看看我的程序:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598

mtt661 发表于 2025-2-18 21:17:54

DebugLab 发表于 2025-2-18 18:52
任何情况下,只要CPU还能正常工作,IAP_CONTR=0x60都能软复位到ISP区,先把IAP_CONTR=0x60替换为点亮一个LE ...

你好 我好像找到问题了,这个发送字节的函数没问题,但是发送字符串的函数发出来的是乱码,请问我应该怎么改?,AI8051 32模式 33.1776MHz波特率115200,
可奇怪 相同的函数 在8位就没问题

void UartSend(unsigned char dat)        //单片机发送一个字节
{

    SBUF = dat;
        while(TI==0);
        TI=0;
}

void UartSendStr(unsigned char *p)//单片机发送字符串
{
    while (*p)
    {
      UartSend(*p++);
    }
}

邮箱 发表于 2025-2-18 23:14:49

mtt661 发表于 2025-2-18 21:17
你好 我好像找到问题了,这个发送字节的函数没问题,但是发送字符串的函数发出来的是乱码,请问我应该怎 ...

这里试一下
页: [1]
查看完整版本: 请问AI8051U 32bit模式,串口自动下载问题?