单片机实现并行输入转串行输出

假如从PO口采集到并行数据,怎么通过一个I/0接口,比如P1.0,串行输出

从PO口采集到并行数据:
MOV A,P0
通过一个I/0接口,P1.0,串行输出:
(协议:P1.0低3ms为通信开始,3ms后定时每1ms送出1位,共8位,没有校验位.11ms后检测到P1.0为高就结束了)
自已写程序吧!
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-16
74hc595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在sck的上升沿输入,在rck的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(si),和一个串行输出(q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能
oe时(为低电平),存储寄存器的数据输出到总线。
qb--|1
16|--vcc
qc--|2
15|--qa
qd--|3
14|--si
qe--|4
13|--/g
qf--|5
12|--rck
qg--|6
11|--sck
qh--|7
10|--/sclr
gnd-|8
9|--qh'
74595的数据端:
qa--qh:
八位并行输出端,可以直接控制数码管的8个段。
qh':
级联输出端。我将它接下一个595的si端。
si:
串行数据输入端。
74595的控制端说明:
/sclr(10脚):
低点平时将移位寄存器的数据清零。通常我将它接vcc。
sck(11脚):上升沿时数据寄存器的数据移位。qa-->qb-->qc-->...-->qh;下降沿移位寄存器数据不变。(脉冲宽度:5v时,大于几十纳秒就行了。我通常都选微秒级)
rck(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将rck置为低电平,当移位结束后,在rck端产生一个正脉冲(5v时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
/g(13脚):
高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。
应用如下:
以下是用c语言编写的,采用动态扫描方式显示0123这四个数字,此程序是经过模拟仿真的。
//#################################################################
//程序名称:8位数码管显示程序
//程序功能:让8位数码管显示display_7leds[8]中的内容
//程序说明:使用时改变display_7leds[8]中的内容,调用wr7leds()函数即可
//#################################################################
#include
<reg51.h>
#include
<intrins.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
//#############管脚定义#######################
#define
port_led
p0
//led位选信号输入管脚
sbit
sclk=p2^0;
//595移位时钟信号输入端
sbit
st=p2^1;
//595锁存信号输入端
sbit
da=p2^2;
//595数据信号输入端
//#############################################
//共阴极数码管显示代码:7
6
5
4
3
2
1
0
//
a
b
c
d
e
f
uchar
code
led_7seg[16]={0xfc,0x60,0xda,0xf2,//0,1,2,3,
0x66,0xb6,0xbe,0xe0,
//4,5,6,7,
0xfe,0xe6,0xee,0x3e,
//8,9,a,b,
0x9c,0x7a,0x9e,0x8e};//c,d,e,f
//#####################################################
//名称:wr595()向595发送一个字节的数据
//功能:向595发送一个字节的数据(先发低位)
//#####################################################
void
wr595(uchar
wrdat)
{
uchar
i;
sclk=0;
st=0;
for(i=8;i>0;i--)//循环八次,写一个字节
{
da=wrdat&0x01;
//发送bit0

wrdat>>=1;
//要发送的数据右移,准备发送下一位
sclk=0;
//移位时钟上升沿
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sclk=0;
}
st=0;
//上升沿将数据送到输出锁存器
_nop_();
_nop_();
st=1;
_nop_();
_nop_();
st=0;
}
//##########################################################
//
延时函数
//##########################################################
void
delay(uint
del)
{
while(del--)
{
;
}
}
//##########################################################
//名称:wr7leds()8个led显示数字函数
//功能:向595发送一个字节的数据,然后发送位选信号
//##########################################################
void
wr7leds(void)
{
uchar
i,wx;
wx=0x01;
//位选信号初始化
for(i=0;i<4;i++)
//循环4次写4个数据
{
wr595(led_7seg[i]);
//传送显示数据
port_led=~wx;
//送位选信号
wx<<=1;
//位选信号左移,准备显示下一个数字
delay(50);
//延时,(决定亮度,和闪烁)
}
}
//##########################################################
//主函数
//##########################################################
main(void)
{
while(1)
{
wr7leds();
//向74hc595发送数据并显示
}
}
第2个回答  2009-06-01
“当然有必要,楼上的朋友你要尊重别人的原创!
不要尽是让别人用595啊,138啊这些东西,这样搞来搞去那电子就都一样了!


我说你最好连铬铁也不要用。
第3个回答  2009-06-01
有必要么?这样数据很难处理的,你加个595可以很容易实现。。
第4个回答  2009-06-01
当然有必要,楼上的朋友你要尊重别人的原创!
不要尽是让别人用595啊,138啊这些东西,这样搞来搞去那电子就都一样了!

单片机实现并行输入转串行输出
通过一个I\/0接口,P1.0,串行输出:(协议:P1.0低3ms为通信开始,3ms后定时每1ms送出1位,共8位,没有校验位.11ms后检测到P1.0为高就结束了)自已写程序吧!

用51单片机实现8位并行数据转为串行数据的C程序
sbit BIT_OUTPUT = P1^0;void BitsOutput(unsigned char temp)\/\/从最高位移出{ char count = 8; while(count--) { if((temp & 0x80) == 0x80) BIT_OUTPUT = 1; else BIT_OUTPUT = 0; temp <<= 1; }}void BitsOutput(unsigned char temp)\/\/从最低位...

怎么编程让51单片机并行接口输出数据
51单片机并行输出数据有几种方法来实现。1、每一个P口(P0,P1,P2,P3)可以直接输出并行数据,例如:MOV P0,#55H MOV P1,#0AAH MOV P2,#0FEH MOV P3,#02H 2、利用P0口扩展并行口,这类芯片有244\/245\/373\/573等等,编程需要用到MOVX指令:MOV DPTR,#1000H MOV A,#55H MOVX @DPTR,A...

什么是并行传输、串行传输、异步传输?
串行通讯:数据一位一位地顺序传送,最少只需一根传输线,成本低但速度慢。通讯方向分单工、半双工和全双工三种。异步通讯和同步通讯是串行通讯的两种方式。单片机中主要使用异步通讯。串行通讯中,两个设备通过一对信号线进行通讯,信号电流通过信号线到达目标设备,再通过信号地线返回,避免干扰。每次传送仅...

如何区分单片机串行通讯和并行通讯?
单片机串行通讯与并行通讯区别 一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢。串行通讯的距离可以从几米到几千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息...

串行通讯介绍(SCI、SPI、I2C)
UART概念涉及通用异步收发传输器,负责将并行输入信号转换为串行输出信号。RS232与RS485为两种常用串行通信接口标准,具有电气协议规定。UART功能在于串并转换与控制发送频率。RS232\/RS485则定义电气特性和物理特性,对数据传输通路进行规定,与UART相对独立。总结而言,线路上的电流遵循RS232\/RS485定义的规则...

在单片机电路中,74HC164是怎样传输数据的
这样设计的原因在于数码管需要同时接收8位数据才能形成一个完整的字符或数字,而单片机的输出通常是串行的,一次只能发送一位。74HC164通过其内部机制,将串行数据转换为并行,极大地提高了数据传输效率,解决了单片机输出口不足的问题。然而,串行转并行的过程可能会增加系统的复杂性,可能导致不稳定,并且...

74hc165作用是什么?
74hc165是并行输入转串行输出的串行8位寄存器。可用来为单片机扩展8位并行输入接口。当单片机IO引脚不够用时,假如只剩下3个IO脚了,但是还需要一个8位的输入口,就可以用一片74HC165来扩展,它有8个输入端,3个串行数据引脚接到单片机,就可以串行读入8位输入数据或开关量。与74HC164刚好相反。下图就是...

51单片机uart接收数据出错
4v才行,但是给UART1提供的电压只有最高1.8v,这样就会不满足3.3v的电压要求,就会一直为低的状态,数据就会出错。通用异步收发传输器,通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。

单片机的输入输出有哪几种形式
两种:串行、并行。

相似回答