一言难尽的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;
}
}
}
串口1 被转移了? ERTW 发表于 2024-3-25 11:18
串口1 被转移了?
芯片烧录运行的是芯片内部固化的系统ISP程序,跟用户程序没有关系。
而且芯片复位运行系统ISP程序时用户配置的寄存器也全部被复位了,所以用户程序不管怎么写,都不会影响到系统ISP程序的下载功能。 乘风飞扬 发表于 2024-3-25 11:52
芯片烧录运行的是芯片内部固化的系统ISP程序,跟用户程序没有关系。
而且芯片复位运行系统ISP程序时用户 ...
好巧不巧,下载器坏了,多谢大师答疑 ISP不过是一段开机启动程序,还没有跑到用户代码区,串口是不会转移的。 ISP引脚是固定的不会转移吧 soma 发表于 2024-3-25 16:56
ISP引脚是固定的不会转移吧
ISP引脚是固定的不会转移 这锅背的{:4_165:}
页:
[1]