请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 1247|回复: 9

请问这样的IO操作怎么简洁?

[复制链接]

该用户从未签到

34

主题

75

回帖

412

积分

中级会员

积分
412
发表于 2023-3-12 15:09:16 | 显示全部楼层 |阅读模式
本帖最后由 sky999 于 2023-3-12 15:10 编辑

  1. sbit IN1 P3^1;
  2. sbit IN2 P2^2;
  3. sbit IN3 P3^3;
  4. sbit IN4 P1^4;
  5. ....
复制代码
纯粹是写程序中突然发现好奇,
假设有30个IO是IN,IO口又都杂乱不按规律来的,下面写判断的时候很麻烦,每个都要判断和赋值,我意思是,能不能用结构体数组来控制IO,然后在for循环内操作?谢谢
回复 送花

使用道具 举报

该用户从未签到

34

主题

75

回帖

412

积分

中级会员

积分
412
 楼主| 发表于 2023-3-12 15:13:08 | 显示全部楼层
编辑后好像总被网页自动删除了

if(IN1==0)
{
  X[0]=0;
}
else  X[0]=1;

假设30个IO都要进行这样的判断
  • TA的每日心情
    开心
    2024-1-4 08:56
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    16

    主题

    711

    回帖

    2508

    积分

    超级版主

    积分
    2508
    发表于 2023-3-13 12:28:14 | 显示全部楼层
    没有更简洁的办法,只能逐个判断
    由于8051单片机体系的SFR不支持间接寻址,所以无法使用指针或者数组的方式访问SFR
    8051的I/O口也是通过SFR进行访问的,所以同样也无法使用指针或者数组的方式进行访问

    点评

    好的,谢谢  发表于 2023-3-13 20:30
  • TA的每日心情
    奋斗
    2024-2-1 21:56
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    32

    回帖

    284

    积分

    中级会员

    积分
    284
    发表于 2023-3-18 09:32:59 | 显示全部楼层
    我曾经也像你这样尝试过,不行的!:lol
  • TA的每日心情
    慵懒
    昨天 07:51
  • 签到天数: 142 天

    [LV.7]常住居民III

    21

    主题

    641

    回帖

    1569

    积分

    金牌会员

    积分
    1569
    发表于 2023-3-20 10:53:31 | 显示全部楼层
    你可以试试用联合试试
  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    15

    主题

    523

    回帖

    1872

    积分

    金牌会员

    打工人

    积分
    1872
    发表于 2024-1-18 10:34:48 | 显示全部楼层
    我写PLC程序时也有类似情况,解决办法是定义一些地址连续的布尔变量,然后把零散的数字输入赋值给这些布尔变量,程序光操作这些布尔变量就可以了。
    打工人
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2024-1-18 10:52:45 | 显示全部楼层
    可以, 用异或
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 01:53
  • 签到天数: 122 天

    [LV.7]常住居民III

    36

    主题

    826

    回帖

    3843

    积分

    荣誉版主

    积分
    3843
    发表于 2024-1-18 10:57:39 | 显示全部楼层
      IN_P1 = P1;
      if !(IN_P1 ^ IN_P1_bak)
             IN_P1_new =  IN_P1 ;
      IN_P1_bak =  IN_P1 ;
      
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:43
  • 签到天数: 123 天

    [LV.7]常住居民III

    19

    主题

    989

    回帖

    2312

    积分

    金牌会员

    积分
    2312
    发表于 2024-1-18 11:06:25 | 显示全部楼层
    想过这个问题,,,也类比STM32标准库的形式类比的写过一个,,发现有些地方用起来不符合预期,现在想想可能是没有注意函数重入的问题,,
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-19 05:57 , Processed in 0.064884 second(s), 61 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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