15818564352 发表于 2024-6-3 17:22:24

一个普通又奇怪的问题

                P02=!P02;
                if(P02)
                  PortStar=1;
                else
                        PortStar=0;
               
                printf("PortStar=%u %u\n",PortStar,P02);


接收←PortStar=0 1


打印结果和程序相反,是什么原因呢,大神有空回复一下吗

_奶咖君_ 发表于 2024-6-3 17:43:06

往 P02!=P02后面加一个小延时,,你再试一试

zhange 发表于 2024-6-3 18:47:48

本帖最后由 zhange 于 2024-6-3 18:53 编辑

_奶咖君_ 发表于 2024-6-3 17:43
往 P02!=P02后面加一个小延时,,你再试一试
这个大佬回复的对

至少给它一个机器周期的反应时间吧应该是吧我记得是这样延时1毫秒

zhange 发表于 2024-6-3 18:55:40

        P40 = 0;
       
P66=!P66;
        _nop_();
if(P66)
    P62 = 1;
else
    P62 = 0;

加上这个就可以了   不用延时函数了就是个无效指令给机器个反应时间我测试可以

jwd 发表于 2024-6-3 21:11:57

_奶咖君_ 发表于 2024-6-3 17:43
往 P02!=P02后面加一个小延时,,你再试一试

{:4_250:}

晓飛飛 发表于 2024-6-3 23:14:10

我用类似的代码在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翻转速度接近。


wangxiangtan 发表于 2024-6-4 10:49:59

涨知识了,IO口翻转得这么慢么{:4_164:}

soma 发表于 2024-6-4 11:16:45

wangxiangtan 发表于 2024-6-4 10:49
涨知识了,IO口翻转得这么慢么

也的给点反应时间吧
页: [1]
查看完整版本: 一个普通又奇怪的问题