找回密码
 立即注册
查看: 252|回复: 6

有实验箱的朋友帮忙试试能打印出什么内容?

[复制链接]
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    43

    主题

    367

    回帖

    1075

    积分

    金牌会员

    静坐常思己过,闲谈莫论人非

    积分
    1075
    发表于 2023-11-19 14:01:24 | 显示全部楼层 |阅读模式

    P6 =~(~P6<<1)是将P6=0b1111 1110的值变成P6=0b1111 1101



    疑问1.png
    处事要代人所想,读书需切己用功
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 09:36
  • 签到天数: 81 天

    [LV.6]常住居民II

    3

    主题

    59

    回帖

    524

    积分

    荣誉版主

    积分
    524
    发表于 2023-11-20 15:05:07 | 显示全部楼层
    bw3y21wa.png
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    43

    主题

    367

    回帖

    1075

    积分

    金牌会员

    静坐常思己过,闲谈莫论人非

    积分
    1075
     楼主| 发表于 2023-11-20 15:24:21 | 显示全部楼层

    理论计算是这样,但是实际情况还真不一定是,第二次输出有可能是255。如果申请到了实验箱你可以试试,我还没学完,没法申请,所以暂时无法试验。
    处事要代人所想,读书需切己用功
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 09:36
  • 签到天数: 81 天

    [LV.6]常住居民II

    3

    主题

    59

    回帖

    524

    积分

    荣誉版主

    积分
    524
    发表于 2023-11-20 17:36:30 | 显示全部楼层
    rengran 发表于 2023-11-20 15:24
    理论计算是这样,但是实际情况还真不一定是,第二次输出有可能是255。如果申请到了实验箱你可以试试,我 ...

    我这是pc上运行的结果
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    43

    主题

    367

    回帖

    1075

    积分

    金牌会员

    静坐常思己过,闲谈莫论人非

    积分
    1075
     楼主| 发表于 2023-11-20 19:18:14 | 显示全部楼层
    yefeng 发表于 2023-11-20 17:36
    我这是pc上运行的结果

    PC上运行和实际的单片机还是两码事,毕竟PC运行只是进行运算,1+1咋算都等于2,可是实际当中就有可能是3,因为它忽略了实际硬件上的状况
    处事要代人所想,读书需切己用功
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 137 天

    [LV.7]常住居民III

    26

    主题

    1323

    回帖

    4119

    积分

    论坛元老

    积分
    4119
    发表于 2023-11-21 11:02:07 | 显示全部楼层


    STC芯片使用多级流水线结构,修改IO口状态指令后面需要等待2个时钟周期再去读取:
    1.     while(1)
    2.     {
    3.         if(P32 == 0)
    4.         {
    5.             delay_ms(10);
    6.             if(P32 == 0)
    7.             {
    8.                 printf("P6=0x%02bx\r\n", P6);
    9.                 P6 = ~(~P6<<1);
    10.                 _nop_();
    11.                 _nop_();
    12.                 i = P6;
    13.                 printf("i=0x%02bx\r\n", i);
    14.                 while(P32 == 0);
    15.             }
    16.         }
    17.     }
    复制代码

    这样就能获取修改后的状态:
    截图202311211057076413.jpg

    规格书上也有相应的介绍:
    截图202311211101021469.jpg

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    43

    主题

    367

    回帖

    1075

    积分

    金牌会员

    静坐常思己过,闲谈莫论人非

    积分
    1075
     楼主| 发表于 2023-11-21 15:38:20 | 显示全部楼层
    乘风飞扬 发表于 2023-11-21 11:02
    STC芯片使用多级流水线结构,修改IO口状态指令后面需要等待2个时钟周期再去读取:

    这样就能获取修改后的 ...

    这两个_nop_()指令,其实是给端口改变一个时间,毕竟端口内部也是硬件组成的,锁存器里的值改变后不会立马反映到端口上,所以此时所有针对端口的操作比如Pn &=,Pn |= 等操作都需要增加_nop_()函数,这样Pn &=,Pn |= 的值才会做出更改。Pn &=,Pn |= 这类的操作都是先读取端口,根据端口的状态再进行更改锁存器里的值。如果连续对端口值进行如Pn &=,Pn |=等操作而不加_nop_()的话,端口状态其实并不会如理论计算那样是最后一次更改的状态,有可能是连续更改最后一次更改前两个或者前三个时的状态。
    处事要代人所想,读书需切己用功
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-10 23:09 , Processed in 0.065905 second(s), 55 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表