ERTW 发表于 2024-3-25 11:17:30

一言难尽的STC8H串口问题

因为串口 转移I/O 后不能正常使用的问题,用ISP工具的例程单独测试一下。发现ISP下载成功一次后就不能下载了。。{:mad:},以为芯片坏了,再试一下还这样。。{:funk:};赶脚串口也被转移了。。

程序:

#include "reg51.h"
#include "intrins.h"

#define FOSC      11059200UL
#define BRT         (65536 - FOSC / 115200 / 4)

sfr   T4T3M   =   0xd1;
sfr   T4L   =   0xd3;
sfr   T4H   =   0xd2;
sfr   T3L   =   0xd5;
sfr   T3H   =   0xd4;
sfr   T2L   =   0xd7;
sfr   T2H   =   0xd6;
sfr   S3CON   =   0xac;
sfr   S3BUF   =   0xad;
sfr   IE2   =   0xaf;

sfr   P0M1    =   0x93;
sfr   P0M0    =   0x94;
sfr   P1M1    =   0x91;
sfr   P1M0    =   0x92;
sfr   P2M1    =   0x95;
sfr   P2M0    =   0x96;
sfr   P3M1    =   0xb1;
sfr   P3M0    =   0xb2;
sfr   P4M1    =   0xb3;
sfr   P4M0    =   0xb4;
sfr   P5M1    =   0xc9;
sfr   P5M0    =   0xca;
sfr   P_SW2       =   0xba;

bit busy;
char wptr;
char rptr;
char buffer;

void Uart3Isr() interrupt 17
{
    if (S3CON & 0x02)
    {
      S3CON &= ~0x02;
      busy = 0;
    }
    if (S3CON & 0x01)
    {
      S3CON &= ~0x01;
      buffer = S3BUF;
      wptr &= 0x0f;
    }
}

void Uart3Init()
{
    S3CON = 0x50;
    T3L = BRT;
    T3H = BRT >> 8;
    T4T3M = 0x0a;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;
}

void Uart3Send(char dat)
{
    while (busy);
    busy = 1;
    S3BUF = dat;
}

void Uart3SendStr(char *p)
{
    while (*p)
    {
      Uart3Send(*p++);
    }
}


void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
        P_SW2 |= 0x02;                                                //UART3: RxD3(P5.0), TxD3(P5.1)
    Uart3Init();
    IE2 = 0x08;
    EA = 1;
    Uart3SendStr("Uart Test !\r\n");

    while (1)
    {;
      if (rptr != wptr)
      {
            Uart3Send(buffer);
            rptr &= 0x0f;
                                       
      }
    }
}

ERTW 发表于 2024-3-25 11:18:12

串口1 被转移了?

乘风飞扬 发表于 2024-3-25 11:52:04

ERTW 发表于 2024-3-25 11:18
串口1 被转移了?

芯片烧录运行的是芯片内部固化的系统ISP程序,跟用户程序没有关系。
而且芯片复位运行系统ISP程序时用户配置的寄存器也全部被复位了,所以用户程序不管怎么写,都不会影响到系统ISP程序的下载功能。

ERTW 发表于 2024-3-25 15:32:59

乘风飞扬 发表于 2024-3-25 11:52
芯片烧录运行的是芯片内部固化的系统ISP程序,跟用户程序没有关系。
而且芯片复位运行系统ISP程序时用户 ...

好巧不巧,下载器坏了,多谢大师答疑

yjawei 发表于 2024-3-25 16:32:02

ISP不过是一段开机启动程序,还没有跑到用户代码区,串口是不会转移的。

soma 发表于 2024-3-25 16:56:21

ISP引脚是固定的不会转移吧

小飞侠 发表于 2024-3-25 19:44:45

soma 发表于 2024-3-25 16:56
ISP引脚是固定的不会转移吧

ISP引脚是固定的不会转移

jwd 发表于 2024-3-25 20:35:48

这锅背的{:4_165:}
页: [1]
查看完整版本: 一言难尽的STC8H串口问题