\
我们在进行数据转换的时候经常会用到74LS164,74LS165,在单片机课程和数字电子基础里都可以看到,这两个芯片是思绪上要形成互补的思想,一个是串入并出,另外一个是并入串出! 一下两个例题用到的是单片机的串行线,TXD(发送 标志是TI)和RXD(接收 标志是RI) /* 名称:串行数据转换为并行数据
说明:串行数据由RXD王筱鹏发送给串并转换芯片74164,TXD则用于输出移位时钟脉冲,74164将串行输入的1字节转换为并行数据,并将转换的数据通过8只LED久期缺口显示出来。本例串口工作模式0,即移位寄存器I/O模式。TXD发送
*/
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
uchar c=0x80;
SCON=0x00; //串口模式0,即移位寄存器输入/输出方式
TI=1;
while(1)
吴少芳 {
c=_crol_(c,1);
SBUF=c;
while(TI==0); //等待发送结束
TI=0; //TI软件置位
DelayMS(400);
}
}
实验结果:
1. 我们要送的数是0x80,串行方式0是移位寄存器输入输出方式。
2. _crol_()在#include<intrins.h>里,是左移函数。
3. 把这数每一位放在C里,TXD进行发送,也就是产生移位脉冲。
4. 每来一次下降沿,数据就发送一次!
郑州都市村庄 并行数据转换为串行数据(并入串出 74ls165)
/
* 名称:并行数据转换为串行数据
说明:切换连接到并串转换芯片74LS165的拨码开关,该芯片将并行数据以串行方式发送到8051的RXD引脚,移位脉冲由TXD提供,显示在P0口。RXD接收
*/
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
杨淑荣#define uchar unsigned char
#define uint unsigned int
sbit SPL=P2^5; //shift/load
//延时
void DelayMS(uint ms)
{
怪诞家族
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
SCON=0x10; //串口模式0,允许串口接收
while(1)
{
SPL=0; //置数(load),读入并行输入口的8位数据
SPL=1; //移位(shift),并口输入被封锁,串行转换开始
while(RI==0); //未接收1字节时等待
RI=0; //RI软件置位
P0=SBUF; //接收到的数据显示在P0口,显示拨码开关的值
DelayMS(20);
}
}
与74LS164的工作原理大致相同,这个这是接收,用LED来显示八个开关的状态。很简单的。
注意这个就可以
SPL=0; //置数(load),读入并行输入口的8位数据
SPL=1; //移位(shift),并口输入被封锁,串行转换开始
好了,程序很简单!只是起到启发作用!
参考资料:
《单片机C语言程序设计实训100例—基于8051+Proteus仿真.doc》