找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1483|回复: 5
打印 上一主题 下一主题
收起左侧

51单片机引脚使用问题

[复制链接]
跳转到指定楼层
楼主
ID:1016228 发表于 2022-4-6 19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我这里有一堆对单个引脚的操作代码
但是现在我要对多个引脚重复操作这些代码

有没有方法能循环遍历引脚?
或者只能重复写大量代码,对每个代码块里的引脚单独定义?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 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支
回复

使用道具 举报

板凳
ID:688692 发表于 2022-4-6 22:52 | 只看该作者
他的意思是可以像函数调用那样灵活的选中某个引脚。

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

但是你可以自己写个函数里面写上一堆  if  或者 switch 来实现。
回复

使用道具 举报

地板
ID:584814 发表于 2022-4-7 08:15 | 只看该作者
直接放上代码,直接提出问题,大家中有猜的兴趣的未必是你想要的
回复

使用道具 举报

5#
ID:123289 发表于 2022-4-8 16:06 | 只看该作者
有!
但是,你的现有代码大概率是不能用的。原因,参见板凳的解释。
不过,通过一些编程技巧,能实现你的目标,当然程序就比板凳提出的方案复杂多了。
回复

使用道具 举报

6#
ID:624769 发表于 2022-4-8 16:19 | 只看该作者
原则上, 在51核的前提下, "复写大量代码,对每个代码块里的引脚单独定义" 无论是代码量, 还是执行效率反而会比你 强行弄出一个 "函数" 更高效,更精简。
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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