单片机系统设计 省赛获奖_第1页
单片机系统设计 省赛获奖_第2页
单片机系统设计 省赛获奖_第3页
单片机系统设计 省赛获奖_第4页
单片机系统设计 省赛获奖_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*单片机系统设计(C51版)*应用电子系3SPI总线与应用1.SPI总线概念SPI接口的全称是“SerialPeripheralInterface”,意为串行外围接口SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,数字信号处理器和数字信号解码器。*应用电子系42.SPI接口协议简介利用时钟线对数据位进行同步,时钟的上升沿或下降沿锁存数据四线制SPI:CS,SCK,MOSI,MISO。全双工,收发可同时进行。三线制SPI:CS,SCK,DIO。半双工,只能分时进行收发。*应用电子系5一主多从的连接模式*应用电子系63.SPI接口时序图SPI时序图举例:四线制,低电平使能,上升沿锁存,先发送最高位*应用电子系7#include<reg51.h>#include<intrins.h>sbitSCK=P1^0;sbitMOSI=P1^1;sbitMISO=P1^2;sbitSS1=P1^3;#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}; *应用电子系8voidSPISendByte(unsignedcharch){unsignedcharidatan=8;SCK=1;SS1=0;while(n--){delayNOP();SCK=0;

if((ch&0x80)==0x80){MOSI=1;}else{MOSI=0;}delayNOP();ch=ch<<1;SCK=1;}}*应用电子系9unsignedcharSPIreceiveByte(){unsignedcharidatan=8;unsignedchartdata;SCK=1;SS1=0;while(n--){delayNOP();SCK=0;delayNOP(); tdata=tdata<<1;if(MISO==1)tdata=tdata|0x01;elsetdata=tdata&0xfe;SCK=1;}return(tdata);}*应用电子系10unsignedcharSPIsend_receiveByte(unsignedcharch){unsignedcharidatan=8;unsignedchartdata;SCK=1;SS1=0;while(n--){delayNOP();SCK=0;delayNOP();{tdata=tdata<<1; if(MISO==1)tdata=tdata|0x01;elsetdata=tdata&0xfe;}*应用电子系11{if((ch&0x80)==0x80) {MOSI=1;}else{MOSI=0;}ch=ch<<1;}SCK=1;}return(tdata);}*应用电子系123.SPI接口ADCTLC549

TLC549:8位串行AD芯片

*应用电子系13#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitDAT=P1^7;sbitCS=P1^6;sbitCLK=P1^5;ucharTLC549ADC(void){uchari,x;CLK=0;DAT=1;CS=0;for(i=0;i<8;i++){CLK=1; x<<=1; if(DAT==1)x++; CLK=0; } CS=1; return(x);}*应用电子系144.SPI接口DACTLC5615

TLC5615

TLC5615:10位串行DA芯片

*应用电子系15如何编程?

八位如何传输数字信号?

TLC5615为十位DAC,如何修改?主机发起一次数据读写主机输出时钟主机发送的数据(10位)*应用电子系16#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitK1=P3^7;sbitK0=P3^6;sbitDAT=P2^5;sbitDAC=P2^6;sbitDCK=P2^7;voidTLC5615(uintj){uchari;DCK=0;DAC=0;j=j<<6;for(i=0;i<10;i++){j=j<<1;DAT=CY;DCK=0;DCK=1;}DCK=0;DAC=1;}DINCSSCLK*应用电子系17voiddelay(uintt){while(t--);}voidmain(){unsignedintm;K1=1;K0=1;P1=0xff;while(1){m=P1*4;if(!K0)m+=1;if(!K1)m+=2; TLC5615(m);delay(50000);}}*应用电子系185.串行时钟芯片DS1302功能介绍:电子万年历基本原理:外接32768Hz的晶振。提供秒、分、时、天、星期、月、年等的数值以及闰年调整的能力。DS1302的时间信息以寄存器的形式存储,通过SPI接口读写操作,获得时间与设定时间。可外接备份电池,保证掉电后时间不丢失*应用电子系195.串行时钟芯片DS1302*应用电子系205.串行时钟芯片DS1302*应用电子系215.串行时钟芯片DS1302*应用电子系225.串行时钟芯片DS1302*应用电子系236.DS1302和单片机连接图*应用电子系247.DS1302的程序控制程序组成#defineucharunsignedcharsbitSCK=P3^6; /*实时时钟时钟线引脚*/sbitRDA=P3^4;/*实时时钟数据线引脚*/sbitRST=P3^5;/*实时时钟复位线引脚*/*应用电子系25功能:往DS1302写入1Byte数据voidWrite_Ds1302_Byte(unsignedchartemp){unsignedchari;for(i=0;i<8;i++) //循环8次写入数据

{ SCK=0;SDA=temp&0x01;//每次传输低字节

temp>>=1; //右移一位

SCK=1;//上升沿写有效

}}

*应用电子系26往DS1302写入数据*应用电子系27voidWrite_Ds1302(unsignedcharaddress,unsignedchardat)

{ RST=0; SCK=0; delayus(2); RST=1; //启动

delayus(2); Write_Ds1302_Byte(address); //发送地址

Write_Ds1302_Byte(dat); //发送数据

RST=0; //恢复}*应用电子系28从DS1302读取1Byte数据ucharRead_DS1302_Byte(void){uchari,temp;for(i=0;i<8;i++) //循环8次读取数据

{ if(SDA)temp|=0x80;//每次传输低字节

SCK=1;//读数据,下降沿有效

temp>>=1; //右移一位

delayus(2); SCK=0; } return(temp);}*应用电子系29读取DS1302某地址的数据*应用电子系30unsignedcharRead_Ds1302(unsignedcharaddress){ uchari,temp; RST=0; delayus(2); SCK=0; delayus(2); RST=1; delayus(2); Write_Ds1302_Byte(address);//读数据之前要先写地址

temp=Read_Ds1302_Byte();//读出数据返回}*应用电子系31设置初始时间voidSet_RTC(void)//设定初始时间{ unsignedchari,tmp; Write_Ds1302(0x8E,0X00); //解除写禁止

Bcd_to_Hex();//BCD码转换为16进制

for(i=0;i<7;i++) //7次写入秒分时日月周年

{ Write_Ds1302(write_rtc_address[i],tmp_time[i]); } Write_Ds1302(0x8E,0x80);//写保护}*应用电子系32BCD转16进制

voidBcd_to_Hex(void)读取当前时间voidRead_RTC(void) //读取当前时间*应用电子系33思考与实践建立DS1302芯片的库函数文件。有哪些主要功能函数?写出这些函数并组成库函数。设计基于DS1302的电子万年历。显示年、月、日、星期、时、分、秒,外形自行设计。*应用电子系34I2C串行总线I2C总线始终和先进技术保持同步,并保持其向下兼容性。I2C总线采用二线制传输,一根是数据线SDA(SerialDataLine),另一根是时钟线SCL(serialclockline),所有I2C器件都连接在SDA和SCL上,每一个器件具有一个唯一的地址。I2C总线是一个多主机总线,总线上可以有一个或多个主机(或称主控制器件),总线运行由主机控制。*应用电子系35I2C总线支持多主(multi-mastering)和主从(master-slave)两种工作方式。

*应用电子系36I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。*应用电子系37I2C总线的数据传送*应用电子系38I2C总线的构成及信号类型:构成: 数据线SDA

时钟线SCL数据传输的有效规则:

1.SCL高电平期间,SDA保持不变,数据有效。

2.SCL低电平期间,SDA改变,数据变化有效。*应用电子系39应用方式:

1.标准硬件I2C端口(硬核)。

2.软件模拟I2C端口(可编程用软件实现)。SDASCL单片机EEPROM普通I/O口普通I/O口单片机EEPROM*应用电子系40I2C总线的三种信号类型:

[开始信号]SCL高电平时,SDA产生高到低的下降沿跳变

[结束信号]SCL高电平时,SDA产生低到高的上升沿跳变

[应答信号]接收数据的器件在接收到8bit数据后,向发送数据的器件发出低电平信号,表示已收到数据。这个信号由接收数据的器件发出。发送端收到应答信号后,作出分析判断。若未收到应答信号,则判断为受控单元出现故障。*应用电子系41*应用电子系42时钟线数据线下降沿开始位上降沿结束位数据位应答位时间轴*应用电子系43I2C总线的控制程序实现:/*I2C的启动程序*/(时钟线高时,数据线上升沿)VoidI2CStart(void) { SDA=1;//释放数据线

SomeNOP();//延时

SCL=1;//时钟线拉高

SomeNOP();//延时

SDA=0;//数据线拉低

SomeNOP();//延时

SCL=0;//时钟线拉低

SomeNOP();//延时}*应用电子系44/*I2C的停止程序*/(时钟线高时,数据线上升沿)voidI2CStop(void){ SDA=0; SomeNOP(); SCL=1; SomeNOP(); SDA=1; SomeNOP();}*应用电子系45/*I2C的应答程序*/voidACK(void) //Acknowledge信号{ SDA=0;//发送0,应答

SomeNOP(); SCL=1; SomeNOP();//产生时钟高电平

SCL=0; SomeNOP();}*应用电子系46voidNACK(void) //没有Acknowledge信号{ SDA=1;//发送1,非应答

SomeNOP(); SCL=1; SomeNOP();//产生时钟高电平

SCL=0; SomeNOP();}*应用电子系47检测应答位bitTestAck(){ bitErrorBit; SDA=1; SCL=1; ErrorBit=SDA; SCL=0; return(ErrorBit);}*应用电子系48写8位数据bitWrite8Bit(unsignedcharinput){ unsignedchartemp; for(temp=8;temp!=0;temp--){ SDA=(bit)(input&0x80); SCL=1; SCL=0; input=input<<1; }}*应用电子系49读8位数据unsignedcharRead8Bit(){ unsignedchartemp,rbyte=0; for(temp=8;temp!=0;temp--){ SCL=1; rbyte=rbyte<<1; r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论