第八章 单片机常用总线讲解
write_byte(date); respons(); stop(); }
uchar read_add(uchar sddress) {
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address); respons();
start();
write_byte(0xa1); respons(); date=read_byte(); stop(); return date; }
void display(uchar bai_c,uchar sh_c) //显示程序 {
dula=0;
P0=table[bai_c]; //显示第一位 duan=1; duan=0; wela=0; P0=0x7e; wela=1; wela=0; delay1ms(5);
. . ..
dula=0;
P0=table[sh_c]; //显示第二位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay1ms(5); }
void main() { init();
sec=read_add(2); if(sec>100) sec=0;
TMOD=0x01; ET0=1; EA=1;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; TR0=1; while(1) {
display(sec/10,sce); if(write==1) {
write=0; write_add(2,sec);.v .. //定时器工作在方式1 //对TH0 TL0赋值
//使定时器0.05秒中断一次 //清0
//在24c02的地址2中写入数据sec
..
第八章 单片机常用总线讲解
} } }
void t0() interrupt 1 //定时中断服务函数 {
TH0=(65536-50000)/256; //对TH0 TL0赋值 TL0=(65536-50000)%6; //对装计数初值 tcnt++; //每过50ms tcnt加一 if(tcnt==20) //计满20次(1秒)时 {
tcnt=0; //重新再计 sec++;
write=1; //1秒写一次24C02
if(sce==100) //定时100秒,再从零开始计时 sec=0;
} } 分析如下:
(1)“void delay(){;;}”是—个微秒级延时函数,以前编写的延时函数内部都是用变量递增或是递减来实现延时,而这个函数是用空语句来实现短时间延时的,在Keil软件中设置晶振为11.0592MHz时,该延时函数延时人概4~5微秒,用来操作
总线时用。
(2)“void write_add(uchar sddress,uchar date)”和“uchar read_add(uchar sddress) ”两个函数分别实现向AT24CO2的任—地址写—字节的数据和从AT24CO2中任一地址读取—字节数据的功能,函数操作步骤完全遵循前面讲解的操作原理,请人家参考对照。
(3) sec=read_add(2); //读出保存的数据赋给sec if(sec>100) //以防止首次读取出错误数据 sec=0;
在主程序的开始处先读取上次写入AT24C02的数据,下面两句是为了防止第一次操作AT24C02时出现意外而加的,若是全新的AT24C02芯片或是以前已经被别人写过的不知道是
. . ..
什么内容的芯片,首次上电后读出来的数据我们无法知道,若是大于100的数将无法在数码管上显示向造成乱码,若是100以内的数还好处理。人家可自行修改程序使错误出现,再尝试修改程序看能否将错误排除。
实例演示实际现象如图8.1.14所示。
图8-14 实际现象效果图
8.2 SPI总线接口
8.2.1 SPI总线的介绍
SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信.
SPI 主要应用在 EEPROM, Flash, 实时时钟(RTC), 数模转换器(ADC), 数字信号处理器(DSP) 以及数字信号解码器之间. 它在芯片中只占用四根管脚 (Pin) 用来控制以及数据传输, 节约了芯片的 pin 数目, 同时为 PCB 在布局上节省了空间. 正是出于这种简单易用的特性, 现在越来越多的芯片上都集成了 SPI技术. 8.2.2 SPI总线实例应用(DS1302) DS1302简介:
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字
.v .. ..
第八章 单片机常用总线讲解
节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。 引脚及其功能结构如图8.3.1所示
图8-15 DS1302外部引脚分配
DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。 X1和X2是振荡源,外接32.768kHz晶振。
CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问为寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
I/O:串行数据输入输出端(双向),后面有详细说明。 SCLK:时钟输入端。 命令字节
每一数据传送都需要由命令字节初始化。命令字节的最高位(位7)必须为1;位6为0表示对时钟数据操作,为1表示对RAM数据操作;位1~5指定读写操作的寄存器;位0为0表示写操作,位1表示读操作;命令字节总是从最低有效位开始传送的。
命令字节格式如下:
图8-16 控制字(即地址及命令字节) 芯片复位与时钟控制
单片机常用总线讲解
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)