标题: 51单片机引脚使用问题 [打印本页]

作者: 1192833874    时间: 2022-4-6 19:44
标题: 51单片机引脚使用问题
我这里有一堆对单个引脚的操作代码
但是现在我要对多个引脚重复操作这些代码

有没有方法能循环遍历引脚?
或者只能重复写大量代码,对每个代码块里的引脚单独定义?

作者: lkc8210    时间: 2022-4-6 22:46
你可以把他们组合起来

void IO_out(uchar dat)
{
  P34=dat&0x80;
  P30=dat&0x40;
  P12=dat&0x20;
  P10=dat&0x10;
  P32=dat&0x08;
  P33=dat&0x04;
  P13=dat&0x02;
  P11=dat&0x01;
}
IO_out(0xFF)就是全1
char可同时控制8支脚
int 16支
long32支
作者: cnos    时间: 2022-4-6 22:52
他的意思是可以像函数调用那样灵活的选中某个引脚。

51内核的基本指令不支持这样的操作。不管是MOV 指令还是SETB指令,都只能以直接地址的方式访问相应的IO口整个口或者是单个的bit。不能使用@Ri,或者@A,或者@DPTR的方式去访问SFR和bit。所以底层上没法直接支持。

但是你可以自己写个函数里面写上一堆  if  或者 switch 来实现。
作者: man1234567    时间: 2022-4-7 08:15
直接放上代码,直接提出问题,大家中有猜的兴趣的未必是你想要的
作者: yzwzfyz    时间: 2022-4-8 16:06
有!
但是,你的现有代码大概率是不能用的。原因,参见板凳的解释。
不过,通过一些编程技巧,能实现你的目标,当然程序就比板凳提出的方案复杂多了。
作者: 188610329    时间: 2022-4-8 16:19
原则上, 在51核的前提下, "复写大量代码,对每个代码块里的引脚单独定义" 无论是代码量, 还是执行效率反而会比你 强行弄出一个 "函数" 更高效,更精简。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1