标题:
对单片机的一个IO口赋值1000 0000和0000 0001有区别吗?
[打印本页]
作者:
15119014737
时间:
2021-2-23 21:12
标题:
对单片机的一个IO口赋值1000 0000和0000 0001有区别吗?
小弟我在学习51单片机的SDA数据发送时,经常遇到类似于这样的write子函数(从设备先发送高位数据,假设dat = 1001 0111):通过一个八次的
for循环,先把temp = dat>>7右移七位变为0000 0001,接着 P1^0 = temp, 然后dat<<1,循环八次,从而把dat的八位数据读给单片机的IO口,可这就相
当于P1^0 = 0000 0001,把一个十六进制的数0x01 赋给了一个IO口,这样行吗?
当write子函数(从设备先发送低位数据,假设dat = 1001 0111),通过一个八次的for循环,先把temp = dat<<7左移七位变为1000 0000,接着
P1^0 = temp, 然后dat>>1,循环八次,从而把dat的八位数据读给单片机的IO口,可这就相当于P1^0 = 1000 0000,那么P1^0 = 1000 0000和P1^0 =
0000 0001有区别吗?
作者:
人人学会单片机
时间:
2021-2-23 21:42
建议你先去看看 单片机的基础部分 学习一下移位操作
作者:
robinsonlin
时间:
2021-2-23 22:32
你说的应该是两个概念的事情。
1,给IO口赋值,可以直接给端口 P1 = 0xf1,这个效果相当于 P1^7、P1^6、P1^5、P1^4、P1^1输出都为1,P1^3、P1^2、P1^1输出都为0 。 可以理解为并行赋值。这个时候的硬件对象是一个端口。也就是8个引脚。
2,把一个16进制的值,通过一个端点,串行的传输出去。 这就是你举例描述了半天的过程。 有时会是循环左移,有时会是循环右移。接收的时候再去解码编译。这个操作是按位把数据串行的传递出去。这个时候,硬件对象是一个端口的某一位,也就是单片机的某一个引脚。
作者:
yoxi
时间:
2021-2-24 08:08
去了解一下什么叫赋值,什么叫数据传输
作者:
黄youhui
时间:
2021-2-24 08:24
C语言里面你对IO口赋值只有只有0和非0.懂吗?
作者:
glinfei
时间:
2021-2-24 08:40
没区别,只有0和非0的区别。 你举的例子是为了取每位的值,而不是你说的区别,如:移位后还要与如temp=(dat>>7)&&0x01左移就与0x80
作者:
munuc_w
时间:
2021-2-24 08:51
在单片机中有端口和IO之分,端口是单片机上可以并行输入/输出的口,是八位二进制数据并行操作,一次可以读写八位二进制数,如51的P0,P1,P2,P3等。IO口是端口中的一个位,就是平常说的一根口线,只能位操作。 举例中P1^0 = temp;是不行的,这样是对的: P1^0 =(bit) temp;
作者:
51hei**1140
时间:
2021-2-24 09:04
10000000,00000001,如果没区别为什么两种写法;
比方,给你1000块钱和给你0001块钱,你说有区别吗
作者:
cn_zhx
时间:
2021-2-24 09:18
左移1位一个字节数据,相当于把最高位移入了CY,再把该字节付给1个IO,就是把CY的值付给了这个IO
作者:
wulin
时间:
2021-2-24 10:04
单片机与外设串行通讯中发送/接收1个字节,是由高到低还是由低到高逐位传输不是随意的。它是由此外设的制造商确定的。用户只能根据所选用的外设规制编写程序才能完成单片机与此外设的正确通讯。不论是由高到低还是由低到高逐位传输,程序可以有多种写法,但功能是相同的。楼主举例中的P1.0只能赋值0或1,不可能赋值一个字节,一个字节的8位数据是分8次对P1.0赋值传输的。
作者:
adject
时间:
2021-2-24 19:19
P1^0 是位操作,只能是0 或 1
作者:
15119014737
时间:
2021-2-24 22:33
munuc_w 发表于 2021-2-24 08:51
在单片机中有端口和IO之分,端口是单片机上可以并行输入/输出的口,是八位二进制数据并行操作,一次可以读 ...
讲得十分精辟,谢谢您的答复!
作者:
rayin
时间:
2021-2-25 08:39
对单片机的一个IO口赋值1000 0000和0000 0001有区别吗?以51单片机为例, 串行输出时候就是有很大不同, 前面一个是第一个clk对应数据为1,后面对应clk一直为零; 后面一个是前面的那些clk对应数据为零,直至最后一个clk对应数据为1.
作者:
名字不是重点
时间:
2021-2-27 10:50
有什么区别呢?
如果是并行输出,就是你要进男洗手间和女洗手间的问题;
如果是串行输出,就是你先刷牙后吃饭和先吃饭再刷牙的问题了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1