原创 基于51单片机的串并变换

2010-5-24 10:22 4718 9 10 分类: MCU/ 嵌入式

基于51单片机的串并变换<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


51单片机串行口在方式0下,串行口的SBUF是作为同步移位寄存器用的,此时串行口有两种不同的用处:一种是把串行口设置成“并入串出”的输出口,另一种是把串行口设置成“串入并出”的输入口。当串行口作输出口时,SBUF(发送)相当于一个“并入串出”的移位寄存器,因而通常需要外接一片8位串/并转换移位寄存器。


 


1  硬件设计


51单片机的串行口工作在方式0时,RXD端用来输出串行数据,TXD端用来输出移位脉冲。利用51单片机的串行口外接一片串/并转换芯片74LS164,再连接8LED发光二极管,做成一个流水灯,如下图所示。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />点击看大图


在桌面上双击图标6b1a4d51-3dd2-4af2-be31-c2737918bda1.jpg,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“CB.DSN”。在器件选择按钮c824ac1d-4fcc-4035-8988-0cd869c68e78.jpg中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。



51单片机AT89C51    一片


晶体CRYSTAL 12MHz   一只


瓷片电容CAP 22pF    二只


电解电容CAP-ELEC 10uF   一只


电阻RES 10K         一只


电阻RES 300R(Ω)       八只


TTL芯片 74LS164.IEC   一片


发光二极管 LED-YELLOW   八只


若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U131脚,都可以不画,它们都是默认的。


ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标f483ada4-b81c-42b1-890b-63cd88d92db0.jpg,在对象选择器中单击POWERGROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。


 


2  软件设计


51单片机的串行口方式0用于扩展并行输出的流水灯,其流程图如下所示。


22c1024f-ad61-4bcf-b2a4-48e83080bc1f.jpg


 


51单片机的串行口方式0用于扩展并行输出的流水灯,其详细的C51程序如下。


/*********************************************


*/并转换控制八只发光二极管的流水灯,12M晶振


*********************************************/


#include "reg51.h"


#define uchar unsigned char


#define uint unsigned int


 


/****延时函数*******************************/


void delayms(uint t)


{


uint i,j;


    for(i=0;i<t;i++)


        for(j=0;j<120;j++)


       ;


}


 


main()


{


    uchar k,l;


    SCON=0X00;      //串行口初始化为方式0


    while(1)


    {


        k=0x7f;


        for(l=0;l<8;l++)


        {


            SBUF=k;


            delayms(200);


            k=(k>>1)|0x80;


        }


    }


}


打开Keil程序(本人使用的是Keil8.05中文版),执行菜单命令“工程”→“新建工程”创建“串并”项目,并选择单片机型号为AT89C51。执行菜单命令“文件”→“新建”创建文件,输入C语言源程序,保存为“CB.C”。在Project Workspace窗口中右击源代码组1,选择“添加文件到组‘源代码组 l’”将源程序“CB.C”添加到项目中。


Keil中执行执行菜单命令“工程”→“创建目标”(或点击“创建目标”快捷按钮),编译源程序。如果编译成功,则在“Output Window”的“创建”窗口中显示没有错误,并创建了“CB.HEX”文件。


 


3  仿真与调试


关于ProteusKeil的联合仿真调试,可参见我以前所写的博文或其它参考资料。需注意ProteusISISKeilμVision3中“CB.HEX”的路径要一致。


启动ProteusISIS,并将其放在屏幕的右上角(可将原理图放大到合适大小);再启动KeilμVision3,并将其放在屏幕的左下角。


    KeilμVision3中执行菜单命令“调试”→“启动/停止调试”,或直接单击图标f3dc5f53-e3ed-4ded-9d77-a1d85b43a900.jpg进入KeilμVision3调试环境。同时,在Proteus ISIS的窗口中可看出Proteus也进入了程序调试状态。


    KeilμVision3代码编辑窗口中设置相应断点,断点的设置方法:在需要设置断点语句前双击鼠标左键,可设置断点;再次双击,可取消该断点。


KeilμVision3中按F5键(或点击“运行”快捷按钮)运行程序。首先,并行数据0X7FSBUF串行输出,再由74LS164将其转换为并行数据,从而点亮D1发光二极管,等待200ms后并行数据0XBFSBUF串行输出,再由74LS164将其转换为并行数据,从而D1熄灭同时点亮D2发光二极管,再次等待200ms后并行数据0XDFSBUF串行输出,再由74LS164将其转换为并行数据,从而D2熄灭并点亮D3发光二极管……,点亮D8发光二极管等待200ms熄灭后,再次点亮D1发光二极管……如此循环。或可以点击单步、运行到光标处、全速运行等快捷按钮,以及同时观察工程窗口寄存器页面、存储器窗口等,来进行仿真调试。


 


 


    本人邮箱:txxyc104@163.com,欢迎来信讨论.


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2010-4-16 01:13

支持原创
相关推荐阅读
用户518655 2010-08-16 17:11
基于ARM单片机的单总线应用
基于ARM单片机的单总线应用单总线(1-Wire)是美国达拉斯半导体公司的一项专利技术。与目前广泛应用的其他串行数据通信方式不同,它采用单根信号线完成数据的双向传输,具有节省I/O引脚资源、结构简单、...
用户518655 2010-08-11 18:16
基于ARM单片机的128x64LCM应用(串行接口)
基于ARM单片机的128x64LCM应用(串行接口)ARM单片机是32位的,而51单片机是8位的,功能上ARM单片机要大大优于51单片机,而其价格已经很低了,从发展的眼光看,ARM单片机将会占据单片机...
用户518655 2010-08-10 10:41
基于ARM单片机的128x64LCM应用(并行接口)
基于ARM单片机的128x64LCM应用(并行接口)ARM单片机的功能要大大优于51单片机,而其价格已经很低了,生产厂家不论是出于广告宣传的需要,还是出于利润的角度考虑(嵌入ARM单片机将会卖更高的价...
用户518655 2010-08-06 18:02
基于ARM单片机的软件时钟
基于ARM单片机的软件时钟ARM单片机的功能要大大优于51单片机,而其价格已经很低了,生产厂家不论是出于广告宣传的需要,还是出于利润的角度考虑(嵌入ARM单片机将会卖更高的价格),他们更希望在自己的产...
用户518655 2010-08-03 16:49
寄语新同学
寄语新同学       我是一名从教三十多年的大学老师,因此我认为我有资格向即将成为大学生的新同学们说几句话。       首先祝贺你们即将成为一名大学生!在你们将要跨进大学校门开始新的学习生活之前,...
用户518655 2010-06-19 16:00
单片机的一种分类方法
单片机的一种分类方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />“单片机”一词在...
我要评论
1
9
关闭 站长推荐上一条 /1 下一条