操作IE2后再EUSB=1,EUSB也会被清零一下,可能会导致未知的错误,应该
unsigned char a;
a=IE2;//先读出
stc32的这些寄存器可以位寻址,可以直接用位变量操作,这样就不影响其它位了 test_tmp 发表于 2024-3-26 21:57
研究了一下,确实是EUSB的问题,新版手册里面,提到这个问题了,只要操作了IE2,就需要重新置EUSB=1 ...
你可以试试相应位直接置1,这样不影响其它位 还没注意到这个问题,学习了,寄存器不可读估计是个bug,后期应该能修复吧 开天斧/屠龙刀例程包初始化代码里面基本上都有这么一条指令:
IE2 |= 0x80; //IE2相关的中断位操作使能后,需要重新设置EUSB
EUSB = 1; //IE2相关的中断位操作使能后,需要重新设置EUSB 本帖最后由 晓飛飛 于 2024-3-27 09:34 编辑
乘风飞扬 发表于 2024-3-27 09:27
开天斧/屠龙刀例程包初始化代码里面基本上都有这么一条指令:
STC8HxxU的手册里面描述的是“IE2相关的中断位操作使能后,需要重新设置EUSB”
STC32G/F的手册里面附录N.1有特别描述,说IE2的bit7(EUSB)位为只写寄存器,不可读取。
在手册正篇关于寄存器的介绍里面没有详细描述,只有红字提示,我猜测这只是个暂时性的bug,估计后期会更新处理。
能有解决方案就不是BUG。 应该定义一个 变量 当作IE2寄存器的影子寄存器(虚拟的),IE2当作只写寄存器,程序尽量不要去执行“读”操作,每次写影子寄存器(变量),顺带更新写一次IE2, 读取的话读取影子寄存器(变量)就可以完美解决这个问题 谢谢大家的建议,学习了
页:
1
[2]