永发信息网

c语言编程怎样给单片机的I/O口整口赋值而不影响其他几个不用的I/O口的值的变化?

答案:6  悬赏:20  手机版
解决时间 2021-03-05 10:41
c语言编程怎样给单片机的I/O口整口赋值而不影响其他几个不用的I/O口的值的变化?比如说我要操作P1口的1.0、1.1、1.2、1.3,不影响另外四个口,怎么写程序?求解大虾~~
最佳答案
通过位操作 假设P1口有1.0 1.1 ... 1.7 一共八个口 我想把1.0至1.3置为1 则我只需要将原来的p1_date和0x0f相或 则其他位不会变 前四位变成1 因为任何数和0或 都不会变 跟1或都置为1
若想要设为0 只需要跟0xf0相与 因为任何数跟1与 都不变 跟0与 置为0

例子:我有端口P1 我想使p1里的数据 1.0 1.1 1.2 1.3 为1 则有
P1date |= 0x0f;
若我只想使 1.0 1.3 为1 则有
P1date |= (1) | (1<<3); // <<是位移标志 表示在 x<
全部回答
  • 1楼网友:十鸦
  • 2021-03-05 06:58
来个标准的做法: P1|=0x0F,这样把P1口的低四位设置为1,高四位不变。 P1&=~0x0F,或者P1&=0xF0,这样把低四位清零,高四位不改变。
  • 2楼网友:逃夭
  • 2021-03-05 05:31
首先要弄清楚io口的赋值!! 使用并行输数据只能八位。所有,oxfffe要取出高八位和低八位!! 因为不存在取单独某位的问题,所有可以使用简单的移位语句 p1=(oxfffe&lt;&lt;8); //左移八位,得p1=oxfe p2=(oxfffe&gt;&gt;8); //右移8位,得p2=oxff 你这个程序的错误在于,p1口使用并行方法输送数据只能一次传输8位,而oxfffe位十六位,溢出错误!!
  • 3楼网友:一叶十三刺
  • 2021-03-05 04:42
一个个赋值就行了啊,别直接P1 = XXXX ,你在前面用sbit P1.0 = P1^0,重新定义一下单个管脚,下面就直接赋值单个管脚的高低电平就行啊
  • 4楼网友:野慌
  • 2021-03-05 04:13
可以这样尝试一下:单片机的I/O端口是可以设置成三种模态的即,推挽输出,开漏(可实现双向输入、输出),高祖态。可以将需要进行操作的端口配置成开漏输入,其他的配置成推免输出,或者高祖态这时候你写值是写不进去的。
  • 5楼网友:一把行者刀
  • 2021-03-05 03:33
哈哈,用按位 或“|” 逻辑最简单: 举两个例子吧~ P1 | = 0x0F; (假设给P1.0,P1.1,P1.2,P1.3赋值1)。 P1 | = 0x05; (假设给P1.3赋0,给P1.2赋1,给P1.1赋0,给P1.0赋1)。 注意:高4位的"0"不能改变哦(即:0F,05中的0)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯