一个普通又奇怪的问题
P02=!P02;if(P02)
PortStar=1;
else
PortStar=0;
printf("PortStar=%u %u\n",PortStar,P02);
接收←PortStar=0 1
打印结果和程序相反,是什么原因呢,大神有空回复一下吗
往 P02!=P02后面加一个小延时,,你再试一试 本帖最后由 zhange 于 2024-6-3 18:53 编辑
_奶咖君_ 发表于 2024-6-3 17:43
往 P02!=P02后面加一个小延时,,你再试一试
这个大佬回复的对
至少给它一个机器周期的反应时间吧应该是吧我记得是这样延时1毫秒 P40 = 0;
P66=!P66;
_nop_();
if(P66)
P62 = 1;
else
P62 = 0;
加上这个就可以了 不用延时函数了就是个无效指令给机器个反应时间我测试可以 _奶咖君_ 发表于 2024-6-3 17:43
往 P02!=P02后面加一个小延时,,你再试一试
{:4_250:} 我用类似的代码在STC8G1K17A-SOP8测试了一下,这个程序的运行结果和单片机速度也是有关系的,代码如下:
P3M0 = 0xFF; P3M1 = 0x00; //推挽输出,确保IO翻转速度
P5M0 = 0x00; P5M1 = 0x00;
_nop_();_nop_();
P32 = 1;
_nop_();_nop_();
P32 = 0;
P54 = P32;
P55 = P32;
while(1);测试结果是这样的,烧录时IRC频率设置为20MHz及以下P54和P55输出状态一致,IRC频率设置为22.1184MHz及以上P54和P55输出状态不一致,说明20MHz附近的时候MCU的指令速度与IO翻转速度接近。
涨知识了,IO口翻转得这么慢么{:4_164:} wangxiangtan 发表于 2024-6-4 10:49
涨知识了,IO口翻转得这么慢么
也的给点反应时间吧
页:
[1]