STC8H8K64U/32U,实测有串口接收超时,但新版手册上没见标注!【已澄清:没有】
本帖最后由 Mr_LG 于 2024-5-9 19:18 编辑这里:
超时没有,奇偶校验有吧 啥玩意,,STC8H8K64U这个单片机有超时中断?
本帖最后由 Mr_LG 于 2024-5-7 13:43 编辑
_奶咖君_ 发表于 2024-5-7 13:25
啥玩意,,STC8H8K64U这个单片机有超时中断?
呵呵,以图为证:
能看看你手头上的STC8H8K64U是什么版本的么0.0 如果和我手头上的是一样的话 我也测测去,,,如果有这个东西配DMA就太好用了
不是 不是 我说的是芯片丝印上最后两个字母。那个是芯片的硬件版本。。。 _奶咖君_ 发表于 2024-5-7 14:56
不是 不是 我说的是芯片丝印上最后两个字母。那个是芯片的硬件版本。。。 ...
好的 感谢了解了 ,,您这个是C版的我手头上的是D版的有空了我也测试一下。。 我这里测试没有这个功能。有点儿难受{:4_167:}。。
你再研究研究你的测试方法吧,可以试一试不开启发送接收中断设置一个最长的超时时间,看看灯的变化或者用其他的串口打印输出一下。 本帖最后由 Mr_LG 于 2024-5-9 17:23 编辑
_奶咖君_ 发表于 2024-5-8 11:14
我这里测试没有这个功能。有点儿难受。。
你再研究研究你的测试方法吧,可以试一试不开启发送接收中断设置 ...
谢谢你的提醒,反思了下,应该是原测试代码只能验证“有”而不能验证“无”!
//1,原中断服务:
//===================================================
void UART1_Intr(void) interrupt 4
{ //-------------------------------------
if(RI)
{ RI = 0;
RX1_Buffer = SBUF;
if(++RX1_Cnt >= S1Buf_Len)
RX1_Cnt = 0;
}
//-------------------------------------
if(TI)
{ TI = 0;
B_TX1_Busy = 0;
}
//-------------------------------------
//下面当UR1TOSR寄存器不存在时,可能各位恒为1?
if(UR1TOSR & 0x01) //判断是否产生超时中断
{ B_RX1_OK = 1;
UR1TOSR &= ~0x01; //清除超时标志位 TOIF
C_LED = ~C_LED; //点灯!
}
}
//2,是否应该改成这样:
//===================================================
void UART1_Intr(void) interrupt 4
{ //-------------------------------------
if(RI)
{ RI = 0;
RX1_Buffer = SBUF;
if(++RX1_Cnt >= S1Buf_Len)
RX1_Cnt = 0;
}
//-------------------------------------
else if(TI)
{ TI = 0;
B_TX1_Busy = 0;
}
//-------------------------------------
else if(UR1TOSR & 0x01) //判断是否产生超时中断
{ B_RX1_OK = 1;
UR1TOSR &= ~0x01; //清除超时标志位 TOIF
C_LED = ~C_LED; //点灯!
}
}
主要的问题时,,如果读取一个不存在的寄存器,,,读出的不是零,,你那里的程序也是会执行的,,,
我那天稍微试了一下,先读取寄存器数值,,发现和默认值对不上,,然后赋值之后再读取也完全不对,,,所以认为可能是没有这个寄存器的。
页:
[1]
2