天城lcs-电压采集报警控制器说明书_第1页
天城lcs-电压采集报警控制器说明书_第2页
天城lcs-电压采集报警控制器说明书_第3页
天城lcs-电压采集报警控制器说明书_第4页
天城lcs-电压采集报警控制器说明书_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、学 号 1322020312天津城建大学单片机原理及应用A课程设计说明书电压采集报警控制器起止日期: 2016年1月 4日 至 2016年1月15日学生姓名班级13智能化*班成绩指导教师(签字)控制与机械工程学院 2016年1月15日目 录第 1 章 STC12C5A60S2单片机基础知识1 1.1概述1 1.2功能及基础参数简介11.3引脚功能介绍2第2章 设计开发软件介绍42.1 KEIL4介绍42.2 PROTEUS介绍42.3 Altim_Designer介绍52.4串口调试助手介绍52.5 STC-ISP下载软件介绍5第3章 电压采集报警控制器硬件电路设计73.1电压采集报警控制器运

2、行流程图73.2芯片选择选择及局部电路103.3 PROTEUS仿真电路原理图143.4硬件调试串口调试助手实时数据153.5 PCB印刷电路板图16结论17参考文献18附录1913第一章 STC12C5A60S2单片机基础知识1.1 概述: STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。1.2 功能及基础参数简介: 1.增强型80

3、51 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051; 2.工作电压:STC12C5A60S2系列工作电压:5.5V-3.3V(5V单片机)STC12LE5A60S2系列工作电压:3.6V-2.2V(3V单片机); 3.工作频率范围:0 - 35MHz,相当于普通8051的 0420MHz; 4.用户应用程序空间8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K字节; 5.片上集成1280字节RAM; 6.通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口),可设置成四种模式:准双向口/弱上拉,

4、推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55Ma; 7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片; 8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM); 9.看门狗; 10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地); 11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V单片机为1.32V,误差为+/-5%,3.3V单片机为1.30V,误差为+/-3%

5、; 12.时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内) 1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz15.5MHz,3.3V单片机为:8MHz12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准; 13.共4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波特率发生器 再加上2路PCA模块可再实现2个16位定时器; 14. 2个时钟输出口,可由T0的溢出在P

6、3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟; 15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块, Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ), CCP1/P1.4 (也可通过寄存器设置到P4.3); 16. PWM(2路)/PCA(可编程计数器阵列,2路): 也可用来当2路D/A使用 也可用来再实现2个定时器 也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持);17.

7、A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口; 19. STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3); 20.工作温度范围:-40 - +85(工业级) / 0 - 75(商业级) 21.封装:PDIP-40,LQFP-44,LQFP-48 I/O口不够时,可用2到3根普通I/O口线外接 74HC164/165/595(均可级联)

8、来扩展I/O口, 还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。1.3 引脚功能介绍: 图1-1 STC12C5A60S2管脚图各引脚功能简单介绍如下: VCC:供电电压; GND:接地; P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高; P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL

9、门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收; P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊

10、功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号; P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 WR (外部数据存储器写选通) P3

11、.7 RD (外部数据存储器读选通) 同时P3口同时为闪烁编程和编程校验接收一些控制信号; RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高平时间; ALE / PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用

12、。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效; PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期PSEN两次有效。但在访问内部部数据存储器时,这两次有效的PSEN信号将不出现; EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP); XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入;XTAL2:来自反向振荡器的输出;第2章 设计开发软件介绍2.1 KEIL4介绍:Keil uVision4

13、引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。最新的Keil uVision4 IDE,旨在提高开发人员的生产力,实现更快,更有效的程序开发。uVision4引入了灵活的窗口管理系统,能够拖放到视图内的任何地方,包括支持多显示器窗口。uVision4在Vision3 IDE的基础上,增加了更多大众化的功能。· 多显示器和灵活的窗口管理系统· 系统浏览器窗口的显示设

14、备外设寄存器信息· 调试还原视图创建并保存多个调试窗口布局· 多项目工作区简化与众多的项目2.2 PROTEUS介绍:Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译

15、方面,它也支持IAR、Keil和MATLAB等多种编译器。Proteus软件具有其它EDA工具软件(例:multisim)的功能: 1原理布图 2PCB自动或人工布线 3SPICE电路仿真革命性的特点: 1互动的电路仿真用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。 2仿真处理器及其外围电路可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境.2.3 Al

16、tim_Designer介绍: 电路设计自动化 EDA(Electronic Design Automation)指的就是将电路设计中各种工作交由计算机来协助完成。如电路原理图(Schematic)的绘制、印刷电路板(PCB)文件的制作、执行电路仿真(Simulation)等设计工作。随着电子科技的蓬勃发展,新型元器件层出不穷,电子线路变得越来越复杂,电路的设计工作已经无法单纯依靠手工来完成,电子线路计算机辅助设计已经成为必然趋势,越来越多的设计人员使用快捷、高效的CAD设计软件来进行辅助电路原理图、印制电路板图的设计,打印各种报表。 Altium Designer 是原Protel软件开发商

17、Altium公司推出的一体化的电子产品开发系统,主要运行在Windows XP操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与

18、PCB设计及嵌入式设计集成在一起。 由于Altium Designer 在继承先前Protel软件功能的基础上,综合了FPGA设计和嵌入式系统软件设计功能,Altium Designer 对计算机的系统需求比先前的版本要高一些。主要功能:1、原理图设计;2、印刷电路板设计;3、FPGA的开发;4、嵌入式开发;5、3D PCB设计。2.4 串口调试助手介绍: 串口调试助手是串口调试相关工具,有多个版本。如:友善串口调试助手,支持9600,19200等常用各种波特率及自定义波特率,可以自动识别串口,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符,可以任意设定自动发送

19、周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。 硬件连接方面,传统台式PC机支持标准RS232接口,但是带有串口的笔记本很少见,所以需要USB/232转换接口,并且安装相应驱动程序。2.5 STC-ISP下载软件介绍:STC-ISP 是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。操作说明:1)打开STC-ISP,如下图界面,在MCU Type栏目下选中单片机;2)根据您的9针数据线连接情况选中COM端口,波特率一般保持默认,如果遇到下载问题,可以适当下调一些;

20、3)先确认硬件连接正确,按点击"打开文件"并在对话框内找到您要下载的HEX文件;4)选中两个条件项,这样可以使您在每次编译KEIL时HEX代码能自动加载到STC-ISP,点击"Download/下载";5)手动按下电源开关便即可把可执行文件HEX写入到单片机内;6)程序写入完毕,目标板开始运行程序结果;图2-1 STC下载器界面图第三章 电压采集报警控制器硬件电路设计3.1电压采集报警控制器运行流程图:STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计电压采集控制器。一、设计LG4042BH数码管显示实时电压;二、设计AD电

21、压采集电路,进行实时电压采集;三、设计串口电路,将实时电压值传给串口调试助手。四、设计蜂鸣器电路,当电压降到设定值时,进行警报。五、设计按键电路,可对电压限值进行设置,并将电压限值存入24C04中保存。3.1.1 程序主流程图:图3-1 电压采集报警控制器主流程图3.1.2 按键调节限值流程图:图3-2 按键调节限值流程图3.1.3 总线初始化流程图:图3-3 总线初始化流程图3.1.4 总线应答停止信号流程图: 图3-4 应答信号流程图 图3-5 停止信号流程图3.1.5 总线读写字节流程图: 图3-6 读字节流程图 图3-7 写字节流程图3.1.6 PCF8591芯片AD转换流程图:图3-

22、8 pcf8591 AD流程图3.2芯片选择:3.2.1 PCF8591芯片介绍:PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大

23、转化速率由I2C总线的最大速率决定。1)引脚介绍: AOUT:D/A 转换输出端; AGND:模拟信号地;53AIN0AIN3:模拟信号输入端;VREF:基准电源端;A0A2:引脚地址端;VDD、VSS:电源端(2.56V);SDA、SCL:I2C 总线的数据线、时钟线;OSC:外部时钟输入端,内部时钟输出端;EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地; 图3-8 PCF8591管脚图2)AD转换电路图:图3-9 模数转换模块电路图3.2.2 AT24C04芯片介绍:AT24C04是Ateml公司的4Kb得电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V

24、,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存100年,而且采用8 脚的DIP 封装,使用方便。简而言之,AT24C02是一个在突然掉电的情况下存储数据的芯片,即掉电存储芯片。1)引脚介绍:A0:空引脚;A1、A2:器件地址设定引脚;GND:电源地;SDA、SCL:数据线、时钟线; WP:写保护口;VCC:电源; 图3-10 AT24C04管脚图2)断电存储模块电路:图3-11 断电存储模块电路图3.2.3 MAX232芯片介绍:MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电时提供EIA/TIA-232-E电平。当用

25、单片机和PC机通过串口进行通信,尽管单片机有串行通信的功能,但单片机提供的信号电平和RS232的标准不一样,因此要通过max232这种类似的芯片进行电平转换。1)引脚介绍:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CM

26、OS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14脚(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS-232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚(R1OUT)、9引脚(R2OUT)输出。第三部分是供电。15脚GND、16脚VCC(+5v)。2) 串口通信模块电路:图3-12 串口通信模块电路图3.2.4 数码管显示电路:图3-13 数码管显示电路图3.2.4 STC12C5A60S2最小系统:图3-14 STC12C5A60S2最小系统电路图3.3 PROTEUS仿真电路图:图3-15

27、PROTEUS仿真电路图3.4 硬件调试串口调试助手实时数据:图3-16 串口助手实时调试图 3.5 PCB印刷电路板图:图3-17 PCB电路板图结 论通过这次单片机课程设计电压采集报警控制器设计,让我对单片机开发及调试软件有了更加熟悉的了解,也让我更加明白了C51程序语言的设计逻辑原理。很多设计理念需要来源于实际,从中找出最适合的方式方法。在设计的过程中遇到的问题,可以说得是困难重重,毕竟是第一次做一个系统性的东西。虽然本次课程设计要求自己独立完成,但是,我遇到问题时和同学互相讨论交流。在做课程设计的过程中不停的讨论问题,解决问题。这样就不会使自己在单独做的过程中没有方向;同时也更加了解了

28、解决问题的办法。在软件编程时遇到了编程语言逻辑性不合理等问题。而且在进行硬件调试时,要结合开发板原理图及C51程序,所以出现了连接上的错误。但经过不断的调试和改进,最后都成功解决。实现了课题的基本要求。我发现,讨论不仅是一些思想的问题,还可以深入的讨论一些技术上的问题,这样可以使自己的处理问题要快一些,少走弯路。多改变自己设计的方法,在设计的过程中最好要不停的改善自己解决问题的方法,这样可以方便自己解决问题由于设计水平有限和时间的仓促,本文中难免有错误和不妥之处,但在此次设计过程中学到了很多无法从书本上学到的东西,从不同方面使自己得到提升。通过这次课程设计使我懂得了理论与实践相结合是很重要的,

29、只有理论知识是远远不够的,只有把理论与实践结合起来,从理论中得出结论,才能真正为实际服务,从而提高自己的实践能力和独立思考的能力。同时在设计的过程中发现自己的不足之处,对以前所学的知识理解的不够深刻,掌握的不够牢固,通过这次课程设计,对以前学到的知识进一步温习和消化。 参考文献1徐爱钧等单片机原理及应用基于Proteus虚拟仿真技术.北京:机械工业出版社,20132蒋辉平,周国雄基于Proteus的单片机系统设计与仿真实例.北京:机械工业出版社,20093王琼单片机原理及应用实验教程.合肥:合肥工业大学出版社,20054陈宁,王文宁单片机技术项目教程.南京:东南大学出版社,20085黄鹤松,员

30、玉良等51单片机应用开发范例大全.北京:人民邮电出版社,20106刘波51单片机应用开发典型范例基于Proteus仿真.北京:电子工业出版社,20147李玉梅基于MCS-51系列单片机原理的应用设计.北京:国防工业出版社,20068江志红51单片机技术与应用系统开发案例精选.北京:清华大学出版社,2008附 录电压采集报警控制器C51程序:/*/* 天津城建大学控制与机械工程学院 */* 单片机课程设计 */* 电压采集控制报警器 */* 2016年01月10日 */功能:通过转动滑动变阻器改变模拟输入电压/ 通过AD转换,把数值用数码管显示/ 将实时电压发送给串口助手/ 通过按键设定限值,超

31、过限值时蜂鸣器报警/ 通过AT24C04实现断电保存#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define PCF8591 0x90 /PCF8591 地址#define FOSC 11059200L /System frequency#define BAUD 9600 /UART baudrate/*Define UART parity mode*/#define NONE_PARITY 0 /None parity#define

32、 ODD_PARITY 1 /Odd parity#define EVEN_PARITY 2 /Even parity#define MARK_PARITY 3 /Mark parity#define SPACE_PARITY 4 /Space parity#define PARITYBIT NONE_PARITY#defineOP_READ0xa1/ 器件地址以及读取操作,0xa1即为1010 0001B#defineOP_WRITE 0xa0/ 器件地址以及写入操作,0xa1即为1010 0000Btypedef unsigned char BYTE;typedef unsigned in

33、t WORD;sbit key1=P10;sbit key0=P11;sbit IICSCL=P14; /IIC串行时钟输入端sbit IICSDA=P15; /IIC串行数据输入端sbit LS138A=P20; /138译码器的3位 控制数码管的 sbit LS138B=P21;sbit LS138C=P22;sbit LS138D=P23;sbit SCL=P24; /串行时钟输入端sbit SDA=P25; /串行数据输入端sbit bit9=P26;sbit beep=P27;int keyvalue;float m;bit busy;uchar code table=0xc0,0x

34、f9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数显管字模uchar table1="实时电压为: Vrn" /串口发送字符串uchar num1=0;uchar num24=0;/ 断电保存数据数组uchar sge,sbai;int num,shi,bai,snum,ssnum;/*函数功能:延时1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i<10;i+) for(j=0;j<33;j+); void delay_1ms(uint z) uint x,y; for(

35、x=z;x>0;x-) for(y=110;y>0;y-);/*函数功能:延时若干毫秒入口参数:n*/void delaynms(unsigned char n) unsigned char i;for(i=0;i<n;i+)delay1ms();void delay() /IIC总线初始信号设定,延时4-5个微秒 ;void start() /PCF8591开始信号 SDA=1; delay(); SCL=1; delay(); SDA=0; delay();void stop() /PCF8591停止信号 SDA=0; delay(); SCL=1; delay(); S

36、DA=1; delay();void respons()/PCF8591 IIC应答 相当于一个智能的延时函数 uchar i; SCL=1; delay(); while(SDA=1)&&(i<250) i+; SCL=0; delay();void init() /PCF8591 IIC初始化 SDA=1; delay(); SCL=1; delay(); uchar read_byte() uchar b,k; SCL=0; delay(); SDA=1; delay(); for(b=0;b<8;b+) SCL=1; delay(); k=(k<<

37、;1)|SDA;/先左移一位,再在最低位接受当前位 SCL=0; delay(); return k;void write_byte(uchar date) /写一字节数据 uchar ii,temp; temp=date; for(ii=0;ii<8;ii+) temp=temp<<1; /左移一位 移出的一位在CY中 SCL=0; /只有在scl=0时sda能变化值 delay(); SDA=CY; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay();/*/ 从AT24C04读写数据/*/void IICstar

38、t() / 开始位IICSDA = 1; /SDA初始化为高电平“1” IICSCL = 1; /开始数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期IICSDA = 0; /SDA的下降沿被认为是开始信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期IICSCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) /* 函数功能:结束数据传

39、送*/void IICstop()/ 停止位IICSDA = 0; /SDA初始化为低电平“0”_nIICSCL = 1; /结束数据传送时,要求SCL为高电平“1”_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期IICSDA = 1; /SDA的上升沿被认为是结束信号_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期_nop_(); /等待一个机器周期IICSDA=0;IICSCL=0;/* 函数功能:从AT24Cxx读取数据 出口参数:x

40、*/unsigned char ReadData()/ 从AT24Cxx移入数据到MCUunsigned char i;unsigned char x; /储存从AT24Cxx中读出的数据for(i = 0; i < 8; i+)IICSCL = 1; /SCL置为高电平x<<=1; /将x中的各二进位向左移一位x|=(unsigned char)IICSDA; /将SDA上的数据通过按位“或“运算存入x中IICSCL = 0; /在SCL的下降沿读出数据return(x); /将读取的数据返回/* 函数功能:向AT24Cxx的当前地址写入数据 入口参数:y (储存待写入的数

41、据)*/在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0bit WriteCurrent(unsigned char y)unsigned char i;bit ack_bit; /储存应答位for(i = 0; i < 8; i+)/ 循环移入8个位 IICSDA = (bit)(y&0x80); /通过按位“与”运算将最高位数据送到S /因为传送时高位在前,低位在后 _nop_(); /等待一个机器周期 IICSCL = 1; /在SCL的上升沿将数据写入AT24Cxx _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 IICS

42、CL = 0; /将SCL重新置为低电平,以在SC线形成传送数据所需的个脉冲 y <<= 1; /将y中的各二进位向左移一位 IICSDA = 1; / 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线, /以让SDA线转由接收设备(AT24Cxx)控制_nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 IICSCL = 1; /根据上述规定,SCL应为高电平_nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 _nop_(); /等待一个机器周期 ack_bit = SDA; /

43、接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节 /若送高电平,表示没有接收到,传送异常 IICSCL = 0; /SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)return ack_bit;/ 返回AT24Cxx应答位/*函数功能:向AT24Cxx中的指定地址写入数据入口参数:add (储存指定的地址);dat(储存待写入的数据)*/void WriteSet(unsigned char add, unsigned char dat)/ 在指定地址addr处写入数据WriteCurrentIICstart(); /开始数据传递WriteCurrent(OP

44、_WRITE); /选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(add); /写入指定地址delay1ms();WriteCurrent(dat); /向当前地址(上面指定的地址)写入数据IICstop(); /停止数据传递delaynms(4); /1个字节的写入周期为1ms, 最好延时1ms以上/*函数功能:从AT24Cxx中的当前地址读取数据出口参数:x (储存读出的数据) */unsigned char ReadCurrent()unsigned char x;IICstart(); /开始数据传递WriteCurrent(OP_READ); /选择要操作的AT24Cxx芯片,并告知要读其数据x=ReadData(); /将读取的数据存入xIICstop(); /停止数据传递return x; /返回读取的数据/*函数功能:从AT24Cxx中的指定地址读取数据入口参数:set_addr出口参数:x *

温馨提示

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

评论

0/150

提交评论