sky999 发表于 2023-3-12 15:09:16

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

本帖最后由 sky999 于 2023-3-12 15:10 编辑


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

sky999 发表于 2023-3-12 15:13:08

编辑后好像总被网页自动删除了

if(IN1==0)
{
X=0;
}
elseX=1;

假设30个IO都要进行这样的判断

zhp 发表于 2023-3-13 12:28:14

没有更简洁的办法,只能逐个判断
由于8051单片机体系的SFR不支持间接寻址,所以无法使用指针或者数组的方式访问SFR
8051的I/O口也是通过SFR进行访问的,所以同样也无法使用指针或者数组的方式进行访问

mxdyeah 发表于 2023-3-18 09:32:59

我曾经也像你这样尝试过,不行的!:lol

jwd 发表于 2023-3-20 10:53:31

你可以试试用联合试试

zhudean11 发表于 2024-1-18 10:34:48

我写PLC程序时也有类似情况,解决办法是定义一些地址连续的布尔变量,然后把零散的数字输入赋值给这些布尔变量,程序光操作这些布尔变量就可以了。

LAOXU 发表于 2024-1-18 10:52:45

可以, 用异或

LAOXU 发表于 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 ;

_奶咖君_ 发表于 2024-1-18 11:06:25

想过这个问题,,,也类比STM32标准库的形式类比的写过一个,,发现有些地方用起来不符合预期,现在想想可能是没有注意函数重入的问题,,
页: [1]
查看完整版本: 请问这样的IO操作怎么简洁?