标题: 单片机引脚只有高低电平1、0之分,那数据是如何传输的? [打印本页]

作者: SXP210624    时间: 2020-3-15 20:20
标题: 单片机引脚只有高低电平1、0之分,那数据是如何传输的?
void Write_MAX7219_Byte(uchar record)        //MAX7219写入字节
{  //假如record = 0xF0
        uchar i = 0;
        MAX7219_CS = 0;
        for(i=1;i<=8;i++)  //传输8位数据
        {
                MAX7219_CLK = 0;
                MAX7219_DIN = record & 0x80; //MAX7219_DIN = 1111 0000 | 1000 0000 = 1000 0000(取出高位)
                record = record << 1;  //左移,准备提取下一位
                MAX7219_CLK = 1;
        }
}
因为单片机引脚只有高低电平(1、0)之分,那么我想知道当i=1时,MAX7219_DIN(STC89C52中P20引脚)是怎么传输的?是传输高电平1,
还是传输字节1000 0000?原理是什么?



作者: csmyldl    时间: 2020-3-15 23:12
1个引脚每一时刻只能表示0和1里的1个,表示0时电压0.8V以下,表示1时电压2.4V以上,对单片机来说,3.3V单片机一般3.3V表示1,0V表示0;5V单片机一般5V表示1,0V表示0;
作者: 文心雕龙7    时间: 2020-3-16 00:11
0和1决定信号电平,每次传送1个0或1,即每次传送1个低或高电平。
作者: hantu    时间: 2020-3-16 00:46
串行的话每次传一个bit,循环8次正好传完一个字节
作者: TTQ001    时间: 2020-3-16 05:39
在数字电子产品中,0和1代表一切。 数据包中的所有位都用0或1编码。数据包在设备之间传输并在接收到数据后解码。
作者: 张小不懂    时间: 2020-3-16 16:43
当i=1时,MAX7219_DIN=1000 000的真值为1,所以传输1个位“1”,而不是一个字节“0x80”。
作者: 张小不懂    时间: 2020-3-16 16:49
当i=1时, MAX7219_DIN = 0x80的真值为1,所以传输的是1个位“1”,而不是1个字节“0x80”。相反,为假时传输“0”,而不是传输“0x00”
例如:if(MAX7219_DIN = 0x80),括号里的真值为1时,执行if语句,否则跳过。
作者: 天地一微尘    时间: 2020-3-17 23:21
一个io口一次只能传输一个
作者: 天地一微尘    时间: 2020-3-17 23:24
一个io口一次只能传输一个位,就是0或者1!!你有一个for循环八次。就是八次一起才传一个八位的16进制数。后面有一个clk。这个是给模块信号:你可以读我给你的数据了。避免模块在你不要它读的时候读了错误的数。
作者: 王天星    时间: 2020-3-18 11:17
这个可以这样理解,串行通信就是在一个单位时间内,比如1s内 我们把它划分成10份就是100ms,引脚在1s内就有10个状态,比如1100100011,这样一串二进制编码就可以表示一个含义。这就是串行通信,并行通信就更好理解了,比如有10个引脚在数据采集的时候就可以得到一串10位二进制编码。
这要理解就很简单了。
作者: sduking    时间: 2020-3-18 16:03
首先搞明白,MAX7219是SPI接口,使用时最好用单片机或DSP的SPI接口来操作,如果使用IO模拟SPI接口,那会很费劲的
作者: lxy123..    时间: 2020-4-7 21:01
一个io口一次只能传输一个
作者: 学习单片机lq    时间: 2020-4-7 21:18
这样理解,把一段时间画成一个线段,再把线段分成很多个小段,每一小段时间里单片机引脚只能有高或低电平,但下一小段又可以有相同或不同的高低电平,经过几个小段,就可以表示几位二进制数了。




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