1 / 74
文档名称:

湖南涉外经济学院校内实训管理系统的设计与实现.pdf

格式:pdf   页数:74
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

湖南涉外经济学院校内实训管理系统的设计与实现.pdf

上传人:cherry 2014/1/22 文件大小:0 KB

下载得到文件列表

湖南涉外经济学院校内实训管理系统的设计与实现.pdf

文档介绍

文档介绍:基于51单片机的SPI总线
基于51单片机的SPI总线
单片机与其它芯片或设备之间的数据传输在单片机的应用中具有重要的地位,单片机本身的数据传输接口过去主要为8位并行数据接口或异步串行通信接口,但电子技术的迅速发展使得许多新的数据传输接口标准不断涌现,大多数的51单片机并没有在硬件中集成这些新的数据传输接口。
SPI(Serial Peripheral Interface)总线是由Motorola公司提出的一种同步串行外围接口,采用三或四根信号线。51单片机一般并没有在硬件中集成这种新的接口,所以要用软件来进行模拟。
1 硬件设计
DS1302是涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用SPI同步串行的方式进行通信,仅需用到三根信号线:RES(复位),I/O(数据线),SCLK(同步串行时钟)。通过1602LCD显示日期和时间,其电路如下所示。
在桌面上双击图标,打开ISIS 7 Professional窗口( SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“”。在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。
51单片机AT89C51 一片
晶体CRYSTAL 12MHz 一只
瓷片电容CAP 22pF 二只
电解电容CAP-ELEC 10uF 一只
电阻RES 10K 一只
排阻 RESPAC-8 10K 一只
1602液晶显示器 LM016L 一只
晶体CRYSTAL 一只
时钟芯片DS1302 一片
电池BATTERY 3V 一只
若用Proteus软件进行仿真,则上图中的两只晶体、U1的复位电路和U1的31脚以及电池都可以不画,它们大都是默认的。
在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER或GROUND放置电源或地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。
2 软件设计
采用AT89C51以及日历芯片DS1302和1602LCD组成时钟的流程图如下所示。
本例主要目的是如何用软件模拟SPI总线对DS1302进行读、写,其详细详细C51程序如下。
//实例:基于DS1302的日历时钟
#include<> //包含单片机寄存器的头文件
#include<> //包含_nop_()函数定义的头文件
/*********************************
以下是DS1302芯片的操作程序
**********************************/
unsigned char code digit[10]={"0123456789"};
//定义字符数组显示数字
sbit DATA="P1"^1; //
sbit RST="P1"^2; //
sbit SCLK="P1"^0; //
/*****************************
函数功能:延时若干微秒
入口参数:n
******************************/
void delaynus(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
;
}
/**********************************
函数功能:向1302写一个字节数据
入口参数:dat
***********************************/
void Write1302(unsigned char dat)
{
unsigned char i;
SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备
delaynus(2); //稍微等待,使硬件做好准备
for(i=0;i<8;i++) //连续写8个二进制位数据
{
DATA=dat&0x01; //取出dat的第0位数据写入1302
delaynus(2); //稍微等待,使硬件做好准备
SCLK=1; //上升沿写入数据
delaynus(2); //稍微等待,使