标题:
51单片机能同时操作2个IO口得到相反的操作吗?
[打印本页]
作者:
jindizhiwa
时间:
2020-3-24 21:35
标题:
51单片机能同时操作2个IO口得到相反的操作吗?
请教下,51单片机能通过位操作同时操作2个IO口得到相反的操作吗?比如同时让P3.4输出高电平而P3.5输出低电平;下次操作让P3.4输出低电平而P3.5输出高电平?
作者:
xxpp2011
时间:
2020-3-24 22:21
用一个按键进行交替不同操作可以设置标志,每进入一次函数标志加1,通过判断标志为奇数还是偶数来进入不同操作。
比如标志为奇数则让P3.4输出高电平而P3.5输出低电平;下次标志为偶数则让P3.4输出低电平而P3.5输出高电平。
作者:
刀刀见红
时间:
2020-3-24 22:23
很容易做到,看你是要用延时还是按键开效果?第二次时分别将原来结果取反就好了
作者:
通信傅清
时间:
2020-3-24 23:09
其实怎么说呢,你写p3-4=0,实际上操作的是地址,不知道p3-5=~p3-4,是不是你想要的位操作,但是这种有必要吗
作者:
lovexulu
时间:
2020-3-24 23:11
理论上是可以的,但实际上总会有微小的时间差距。
作者:
csmyldl
时间:
2020-3-24 23:42
可以的 P3=0x10; P3=0x20;
汇编语言
MOV P3,#10H
MOV P3,#20H
作者:
jian_love_qia
时间:
2020-3-25 01:43
可以。标志位控制取反
作者:
jian_love_qia
时间:
2020-3-25 01:45
通过建立标志位。进行取反。
作者:
lmn2005
时间:
2020-3-25 07:58
要实现绝对的同时不大可能,因为要先操作一个引脚后再操作另一个引脚。但是,实际应用中,我们是绝对感觉不到它们是不同时的,因为这取决于芯片的运行速度,运行速度越快,时差就越短。当然,即使使用6MHz主频率+12T模式,我们也感觉不到时差。
作者:
wulin
时间:
2020-3-25 09:39
楼主想通过位操作P3.4、P3.5不同电平同时取反比较困难,两者会有几us时差。如果用字节操作P3,同时不影响P3其它端口状态,可以做到P3.4、P3.5同时取反0时差。示例程序:
#include <AT89X52.H>
unsigned char time;
unsigned int i;
void main(void)
{
P3=0x55; //初始状态0101 0101
while(1)
{//精确的周期2ms,50%占空比
time=P3;//保存P3现状
if(P3&0x10)//判断P3.4电位
time+=16;
else time-=16;
P3=time;//只改变P3.4、P3.5,其它位不变
i=108;
while(i--);//延时
i=1;//此句补偿2us延时
}
}
复制代码
作者:
billaj
时间:
2020-3-25 11:10
按照单片机顺序执行代码的规则,至少会有运行一行代码的时间差
作者:
hbcqd
时间:
2020-3-25 15:13
主要程序运行的时间,有时间差
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1