多用户电能表课程设计报告.doc

上传人:laozhun 文档编号:4131911 上传时间:2023-04-06 格式:DOC 页数:42 大小:1.01MB
返回 下载 相关 举报
多用户电能表课程设计报告.doc_第1页
第1页 / 共42页
多用户电能表课程设计报告.doc_第2页
第2页 / 共42页
多用户电能表课程设计报告.doc_第3页
第3页 / 共42页
多用户电能表课程设计报告.doc_第4页
第4页 / 共42页
多用户电能表课程设计报告.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《多用户电能表课程设计报告.doc》由会员分享,可在线阅读,更多相关《多用户电能表课程设计报告.doc(42页珍藏版)》请在三一办公上搜索。

1、多用户电能表的应用设计课程设计报告姓 名: 张建伟 学 号: 200901100832 专 业: 电气工程及其自动化 班 级: 09-2班 邮 箱: 1031639421 指导教师: 公茂法 2012年6月28日摘要本文主要涉及一个多用户电子式单相电能表,以C8051F360单片机为核心,具有电能变换、LED显示、掉电存储、按键清零等功能模块,通过对用户供电电压和电流实时采样,并采用专用的电能表集成电路,对采样电压电流信号进行处理并相乘转换成与电能成正比的脉冲输出,再经过计数器和LED显示器实现对8用户的用电情况进行集中检测、循环显示、掉电存储等功能。各户的用电量可以就地读取,有效地提高了电能

2、计量的准确性,而且整机电路简单,可靠性高,另外在多用户电子式电能表的前面有6位LED数码管,前两位为分户号,后四位为分户用电量,所显示的用电量与分户号相对应。设计中采用了查找资料、protel画原理图、软件编程调试等方法,最终实现了在数码管上8用户电量集中循环显示的功能。关键词:8用户电能表;AD7755;C8051F360 ABSTRACTThis paper mainly involves more than a user electronic single-phase watt-hour meter, to C8051F360 microcontroller as the core, w

3、ith power transformation, the LED display, power lost storage, buttons and reset function modules, through user power supply voltage and current real-time sampling, and the use of a special electric energy meter integrated circuits, the sampled voltage current signal processing multiplication conver

4、t to electric proportional to the pulse output, and by the counter and LED display to realize the power of the users are 8 concentrated check, circulation, the display of power lost storage etc. Function. Each of the electricity consumption can read in situ, effectively improve the accuracy of elect

5、ric power measure, and the circuit is simple, high reliability, high in many other users of the electrical meter in front of six LED digital tube, the top two for no. Of the individual, after four for the individual power consumption, shows power consumption and corresponding to the number of the in

6、dividual. Design with the search for material, draw principle diagram and software protel programming commissioning method, and finally achieved in digital tube power users on 8 cyclic display function. Keywords: 8 user watt-hour meter;AD7755;C8051F360 目 录绪论41 设计任务与要求51.1 设计目的51.1.1 硬件设计51.1.2 软件设计5

7、1.1.3 已知参数51.2 设计要求52 设计原理62.1 设计系统方案62.2 设计方案框图63 硬件电路设计73.1硬件设计综述73.2稳压电源设计73.3 AD7755电能转换设计83.3.1 AD7755电能转换设计原理93.3.2 AD7755参数分析及计算103.3.3 AD7755通道一输入电路设计及参数分析113.3.4 AD7755通道一输入电路设计及参数分析123.3.5 AD7755外围电路设计133.4 单片机控制电路设计143.4.1 C8051F360单片机部分143.4.2 AT24C16掉电存储部分143.4.3 74HC164数码管显示部分163.4.4 7

8、4HC165按键清零部分163.4.5 光电隔离部分174 软件电路设计184.1 流程图设计184.1.1 主函数流程图184.1.2 读AT24C16函数流程图184.1.3 写AT24C16函数流程图204.1.4 中断函数流程图214.1.5 按键扫描函数流程图214.2 程序设计清单225 心得体会236 致谢24参考文献25附录一26附录二27绪论随着电子技术的发展与进步,电子式电能表无论在价格、功能、精度、可靠性等方面都优越于传统感应式电能表,电子式电能表所具有的强大功能及特点,越来越受到广大使用者的认同与青睐。本次课程所设计的8用户电子式单相电能表采用单片机作为中央处理器,每块

9、电能表可对多达8户的用电情况进行集中检测、循环显示。各用户的用电量可以就地读取。多用户电子式电能表采用了分户用电、集中检测的方式,与传统感应式电能表相比,有效地提高了电能计量的准确性。本次课程设计中在老师的指导下完成了电子式电能表的设计,提高了我们对单片机的运用水平。掌握了电子式电能表的原理,实现了单片机在电力系统中的应用。1 设计任务与要求1.1 设计目的该课程设计任务要求完成是基于C8051F360单片机的多用户电子式电能表的设计与调试。其中包括硬件设计、软件设计和程序调试三部分。主要由显示模块、AD7755模块、存储器模块和前端电路调理模块部分组成。被测信号AD7755转换后将电压、电流

10、、电能等信号传给单片机C8051F360,C8051F360控制所有芯片的工作、截止及计算和显示,显示模块采用数码管显示当前测量的用户号、用电量;存储模块采用AT24C16,为系统提供数据存储,可以做到掉电不丢失数据。1.1.1 硬件设计硬件设计包括稳压电源的设计、AD7755电能转换器的设计和单片机控制部分的设计。1.1.2 软件设计软件设计包括用C语言编写的用户电量显示程序、按键清零程序、脉冲检测程序和掉电保存等程序。1.1.3 已知参数基准电压:220V10%;基准电流:Ib=10A;最大电流:Imax=4Ib=40A;最小电流:Imin=2%Ib=0.2;1.2 设计要求1.该交流电能

11、表能实现对8户单相交流电能的测量;2.将8户电能信息用数码管轮流显示,每隔3s显示一户;3.具有按键清零功能;4.具有掉电保存电能数据功能;5.计1000个脉冲为1度电。6.计量精度:1%(要求=2%);7.最大计度容量:99.99kWh2 设计原理 2.1 设计系统方案根据设计题目要求,以及原始资料的精度要求,电能转化部分选用电能转化脉冲芯片AD7755 ,它是一种高准确度电能测量集成电路,稳定性强并且价格不贵;电路控制部分选用单片机芯片C8051F360,它具有片内上电复位、VDD监视、看门狗定时器等功能,是真正独立工作的片上系统;数据掉电保存部分选用掉电存储芯片AT24C16 ,该芯片是

12、用先进的铁电技术制造的16K位的非易失忆的记忆体;数码管显示部分利用74HC164串入并出8位移位寄存器和数码管配合进行数据显示;按键清零部分利用74HC165并入串出8位移位寄存器实时扫描按键,根据按键要求对相应用户电量清零;各电路电源部分选用稳压芯片MC7805,将交流电经过整流、滤波、稳压得到所需电源。2.2 设计方案框图总设计方案的框图见图3.1电压信号电流信号电流型电压互感器电流互感器电能转化脉冲芯片AD7755单片机芯片C8051F360光电隔离电路断电保护LED显示按键清零图3.1 设计总体框图3 硬件电路设计3.1硬件设计综述系统主要由电量采集转化电路、微处理器控制电路、非易失

13、存储器电路、显示电路、供电控制电路、按键清零电路等部分组成。电量采集转化电路采用专用集成电路设计将电量采集转化为8路脉冲信号,每一户的计量脉冲信号,经IO接口电路连接到系统总线,在微处理器的控制下,轮流采集并计数其脉冲信号,达到500个脉冲时电量自加0.01kWh,并将电量存储到非易失存储器中,以防掉电数据丢失。整个电表采用定时方式,轮流显示用户使用的电量数据。3.2稳压电源设计电源是电能表设计的重要部分,其设计的好坏对整个系统的性能有较大影响。本设计使用的稳压电源是由MC7805实现的,输入电压220V,输出电压+5V 。集成三端稳压器稳压精度高、工作稳定可靠、外围电路简单、容易设计和制作、

14、体积小、重量轻、成本低、维修简单。7805集成三端稳压器的典型应用电路如图2所示,这是一个输出 +5 V直流电压的稳压电路。IC采用集成三端稳压器7805,D1稳压模块中E2、E3分别为输入端和输出端滤波电容,C11、C12分别为输入端和输出端高频滤波电容。D1稳压模块中E1、E2分别为输入端和输出端滤波电容,C9、C10分别为输入端和输出端高频滤波电容。电路见图4.1。图4.1 稳压电源电路图3.3 AD7755电能转换设计AD7755是脉冲输出的一种高准确度电能测量芯片,AD7755在低频输出端提供平均功率信息,在高频输出端输出频率正比有效功率的脉冲,AD7755还有自校准功能。AD775

15、5的相关电路见图4.2和图4.3。图4.2 AD7755功能框图图4.3 AD7755性能测试电路3.3.1 AD7755电能转换设计原理如上图所示,将电流信号转换为合适的电压信号,由通道一输入,通道一输入最大差动信号峰值为470mV,有效值约为330mV;电压信号经过处理,输入到通道二,通道二输入最大差动信号峰值为660mV,有效值约为467mV。两路电压信号经过A/D转换器、滤波器、乘法器等,将信号输入到数字一频率转换器转换为一定频率的脉沖信号。对这个脉冲信号进行计数就可以计量用户的用电量。可编程增益放大器的放大倍数G可视情况随意选择,由Gl、G0的逻辑电平确定。但是通道一输入电压乘以增益

16、G的最大差动信号峰值始终为470mV。增益G的换算见表4.1表4.1 增益换算表通过设置SO、S1可以选择不同的Fl-4进行选择。脉冲输出的基本方式是从F1或F2输出,但是这两个引脚输出的脉冲频率较低,最高为几百个脉冲/kW.h。也可以选择高频脉冲输出,高频脉冲可以从CF端输出,脉冲数可达几千个脉冲/ kW.h。 若要使用高频则需要对SCF引脚进行配置。但是实际使用时脉冲频率不可太高,所以,选用这种脉冲输出方式时 通常把SCF、SO、S1都接低电平,脉冲频率可以低一些。另外在采集电流、电压信号时,要合理选择采集方式,输入到通道一、通道二的电压信号选在最大允许输入信号的1/3到2/3范围内为宜。

17、在这个范围内,信号采集误差较小。在选择采集信号方式时,应考虑到抗干扰能力和电阻等原器件的功耗问题。若通道一采用电阻分压方式将电流转换成电压信号,则G应取最大值,这样可以有效减小电阻上的功率损耗。另外还可以釆用电流互感器,将电流信号转换为电压信号。这两种方式各有优势,将在下面进行详细叙述。若釆用Fl、F2输出脉冲对用户电能进行计量,则可以使得两个通道输入电压在合理的电压范围内,即最大允许输入信号的1/3到2/3范围内。若釆用高频脉冲输出方式,脉冲频率不应太高,这时通道一、二采集的电压信号可能会低于理想的电压范围。但是不会有太大偏差,不会对设备性能有太大影响。我个人认为,还可以通过调节参考电压调节

18、单位电能脉冲数。以上是对AD7755工作原理的简单叙述,要真正用好这个芯片来实现本方案设计还需要对一些重要参数进行分析计算及配置。3.3.2 AD7755参数分析及计算输出脉冲方式有两种,一种是通过Fl、F2输出的较低频率的脉冲;另一种是通过CF端输出地高频脉冲。本设计中用Fl、F2输出低频脉冲方式。下面将做详细介绍:按照公式F=8.06*V1*V2*G*F1-4/VREF2计算出F。其中V1为通道一的输入电压V1*G,即经过程放大器后的输入电压有效值;V2为通道二的输入电压有效值;可以通过对SO、S1的配置进行选择。其关系见表4.2:表4.2 F1-4换算表通常情况下先根据最大输入电流和输入

19、电压以及F1-4的取值范围算出可选脉冲数范围,再根据自己的要求确定实际脉冲数,最后有公式F=(8.06*V1*V2*G*F1-4)/VREF2向回推算出VI、V2检验二者是否在各自的理想电压范围内。若不符合要求再进行修改。在计算出F频率后,要计算出一个小时会输出多少个脉冲,即F*3600个。另外要根据设计要求算出一个小时耗电量,P=(I*V) /1000 (kW.h),用(F*3600)/P即为脉冲数/kW.h。例如:本方案在设计时要采用F1输出脉冲,根据计算可选脉冲数范围为:126-1005个脉冲数/kW.h,实际选择500个脉冲/ kW.h,且GO、G1状态为00,因此增益为1, S1、S

20、0状态为01,因此F1-4=3.4,选取内部给定参考电压2. 5V。根据设计要求一小时用电量为(220*10)/1000=2.2度。由上述条件可以算出在F1-4=3.4时一秒钟输出的脉冲数为500*2.2/3600=1100个,则F=1100/3600=0.30556Hz。最后算出,V1*V2*G=0.06969,由于通道一用于电流转换为电压信号的电阻较小,不能进行较精确的调节,所以取通道一输入电压有效值为0.22V, 为最大允许输入电压有效值的66.7%。通道二的输入电阻可选的比较大,能够进行较精细的调节,取通道二的输入电压为0.317V,为最大允许输入电压有效值的68%。此时两个通道的输入

21、电压都能够在理想的电压测量范围内,能够满足要求。3.3.3 AD7755通道一输入电路设计及参数分析通道一是对电流信号进行采集,但是在输入时要将电流信号转换为电压信号。将电流信号转换为电压信号有两种方式。第一种是直接用电阻将电流转换为电压,另一种方式用电流互感器经过一定的改进将电流信号转换为电压信号。方式一电路参数及性能分析釆用方式一时,通常电阻不会很大。以本方案为例,最大电流40A,则最大输入电压有效值对应的电阻为8m左右,若要使输入电压在1/32/3范围内,电阻会更小。若此时PGA增益为1,则电阻上消耗的功率为12.8W。若增益为16,则输入电阻为0.5m左右,此时功率损耗为8W。很明显,

22、釆用这种方式时,通常都应当使G=16,这样有利于减小电阻功率损耗。这种电流电压转换方式,结构简单,经济性好,但是抗干扰能力较差,功率损耗大。电路见图4.4:图4.4 电流信号采集方式一方式二电路参数及性能分析第二种方式是将用户电流经过电流互感器转换为毫安级的电流。在二次侧并联一个电阻,这个电阻根据要求进行选择。利用电路原理分析可知,电流源与一个阻抗并联可等效为电压源与一个阻抗串联。根据上面的分析,要得到500个脉冲/ kW.h,通道一的输入电压有效值为0.22V。用户最大电流40A经过电流互感器后转换为20mA 的电流,要得到0.22V的电压,需要并联一个11的电阻,相对于上面一种方式,这个电

23、阻阻值较大。这种方式具有抗干扰能力強、功率损耗小、稳定性好的特点。但是结构较复杂,体积大,经济性差。电路见图4.5:图4.5 电流信号采集方式二本方案釆用第二种方式将电流信号转换为电压信号输入到通道一。3.3.4 AD7755通道一输入电路设计及参数分析对于通道二就是要将较高的电压转换为AD7755可以承受的电压。可以通过电阻分压将220V电压转换为 0.317V电压;另外还可以利用电流互感器设计一个电流型电压互感器。下面对两种方式进行比较。方式一电路参数及性能分析利用方式一进行分压,要将220V电压转换为AD7755可以承受的电压。若电位器阻值为最大值时,经过分压, 在输入电阻上的电压约为0

24、.323V,也就是输入点也可以在0.323V0.467V之间进行调节。调节范围较小,但电路结构简单,经济性好。电阻上的功率损耗也不大。电路见图4.6:图4.6 电压信号采集方式一方式二电路参数及性能分析方式二是利用电流互感器设计一个电压互感器。其原理依然是利用电流源、电压源间的转换关系进行设计的。 在一次侧串联电阻将电压信号转换为电流信号,在二次侧并联电阻将电流信号转换为电压信号。对于电流互感器, 可以釆用1: 1的电流互感器,也可以采用其他变比的电流互感器。我个人认为选择变比大于1的电流互感器更合适。如下图所示220V电压串联了110K电阻之后,与2mA电流源等效。经过电流互感器后电流变为

25、1uA,若要得到满足要求的输入电压,则需要并联200K400K的电阻。因此在这里并联了一个电位器,可 以对输入电压进行调节,相对于上面一种方式,这样设计的输入电压调节范围可以大一些。并且当电流为1 uA 时,电位器阻值会比较大,因此更利于细微调节电压。若釆用1:1的电流互感器,则电位器阻值会比较小,不利于细微调节输入电压。采用电流互感器设计电压互感器体积较小,精度也能设计的比较高。而直接采用电压互感器体积会比较大,精度也不高。电路见图4.7:图4.7 电压信号采集方式二本设计釆用了第二种电压转换电路对电压信号进行转换,使输入到通道二的电压能够满足要求,并且便于调节。3.3.5 AD7755外围

26、电路设计AD7755的总体电路除了上述几个比较关键的组成部分外,还有时钟电路、脉冲输出接口、电源电路等其他几个外围电路。时钟电路釆用和单片机时钟电路一样的设计,但是将晶体振荡器用AD7755所要求的3.58MHz。脉冲输出接口则采用光耦合器,这样可以将AD7755电能计量转换电路与单片机控制电路进行隔离,防止两侧相互干扰。由于光耦合器将电路分成两部分,所以两侧应该分别供电。电路原理见图4.8:图4.8 AD7755外围电路图3.4 单片机控制电路设计本设计采用的是以C8051F360单片机为核心的电路板。电路板原理图见附录一,C8051F360单片机整体电路板包含:C8051F360单片机、L

27、ED/FMQ报警、RS-232通信、USB接口、电源接口、LM336-2.5、下载/复位、外接器件、5V-3.3V、两路AD输入、信号输入、PCF8563、AT24C16、74HC165、74HC164显示等模块。本次设计中主要用到的部分有C8051F360单片机、AT24C16掉电存储、 74HC164显示和74HC165按键以及光电隔离电路等模块,电路板电路见附录一,下面将详细介绍各模块。3.4.1 C8051F360单片机部分C8051F360单片机为主要部件,它具有片内上电复位电路、VDD监视器、看门狗定时器和时钟振荡器器件,是真正能独立工作的片上系统。FLASH 存储器还具有在系统重

28、新编程能力,可用于非易失性数据存储,并允许现场更新 8051 固件。用户软件对所有外设具有完全的控制,可以关断任何一个或所有外设以节省功耗。P2口接拨码开关,模拟AD7755电量脉冲。电路图见图4.9:3.4.2 AT24C16掉电存储部分AT24C16是用先进的铁电技术制造的16K位的非易失性的记忆体铁电随机存储器 FRAM具有非易失性并且可以象RAM一样快速读写数据在掉电可以保存10年且比EEPROM或其他非易失性存储器可靠性更高系统更简单不像图4.9 C8051F360单片机电路EEPROM,FM24C16以总线速度进行写操作无延时数据送到FM24C16直接写到具体的单元地址下可以立即执

29、行 FM24C16可以承受超过100亿次的读写或者是比EEPROM高一万倍的写操作 FM24C16的写能力使得它在需要对非易失性记忆体快速读写的状况下非常理想举例说数据采集系统中对写入数据的频率要求高即速度要求非常快使用EEPROM可能丢失数据这种优势合并使得系统可以更可靠的实时采集数据SCL连接C8051F360的P16引脚为串行输入端,上升沿写入。SDA连接P13为串行输入端。每次中断显示时写入一次8个用户的脉冲数量,实时存储用户电量信息,并在掉电后保存,单片机上电复位后能够从中读取数据。电路见图4.10:图4.10 AT24C16掉电保存电路3.4.3 74HC164数码管显示部分74H

30、C164是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。本设计中单片机的P1.0,P1.1口产生的脉冲向74HC164显示输送数据,使其显示相关信息。电路见图4.11: 图4.11 74HC164显示电路3.4.4 74HC165按键清零部分74HC165是8位并行输入串行输出移位寄存器,可在末级得到互斥的

31、串行输出(Q0和Q7),当并行读取(PL)输入为低时,从D0到D7口输入的并行数据将被异步地读取进寄存器内。而当PL为高时,数据将从DS输入端串行进入寄存器,在每个时钟脉冲的上升沿向右移动一位(Q0 Q1 Q2等)。本设计中P12作为74HC165 使能端,P15作为74HC165 脉冲输入端P14作为74HC165输出端检测按键信息,进行清零。电路见图4.12:图4.12 74HC165按键检测电路3.4.5 光电隔离部分在实际应用中,许多电路链接之间需要非直接的连接,从而在提供数据的同时避免来自系统某一部分的危险电压或电流对另一部分造成破坏,造成这种破坏的可能是电源质量低劣、接地故障等各种

32、故障。电路隔离的主要目的是通过隔离元件把干扰的路径切断,从而达到抑制干扰的目的。我们选用光电隔离法,光电隔离元件里面包含两个基本元件:光发射元件和光接收元件,因光电隔离元件中的光发射元件和光接收元件中间是以光的形式相互联系的,在电气上没有直接相连,从而达到在电气上的隔离作用。光电耦合的主要优点是:信号单向传输,输入端与输出端完全实现了电气隔离,抗干扰能力强,工作稳定。光电隔离电路见图4.13:图4.13光电隔离电路图4 软件电路设计4.1 流程图设计 流程图中包括主函数流程图、按键扫描函数流程图、读AT24C16子函数流程图、写AT24C16子函数流程图、中断子函数流程图,下面将详细介绍各流程

33、图。4.1.1 主函数流程图主程序主要有程序初始化、按键扫描、24C16读和写子程序,见图5.1:图5.1主函数流程图4.1.2 读AT24C16函数流程图读AT24C16函数read()流程图如下图5.2所示:图5.2 读AT24C16函数流程图4.1.3 写AT24C16函数流程图写AT24C16子函数write()如5.3图所示:图5.3 写AT24C16函数流程图4.1.4 中断函数流程图中断子程序zhongduan()中包含脉冲扫描和数据显示程序,如5.4图所示:图5.4 中断函数流程图4.1.5 按键扫描函数流程图按键扫描清零函数anjian()如下图5.5所示:图5.5 按键扫描

34、函数流程图4.2 程序设计清单C语言程序设计清单见附录二。5 心得体会6 致谢参考文献1 公茂法.黄鹤松. 单片机原理与实践 北京:北京航空航天大学出版社 20092 邱关源,电路第四版 ,高等教育出版社,2002. 3 罗旭,张彦斌等.单相电子式电能表的特点及其原理,第1期:10-17,2003.4 魏立峰,王宝兴.单片机原理及应用技术.北京:北京大学出版社,2006.附录一 附录二#include /定义头文件#include /定义头文件#include /定义头文件#define uchar unsigned char /宏定义#define uint unsigned int /宏定

35、义#define AT24C16 0xa0 /AT24C16地址#define nop() _nop_() /空指令sbit DIN=P10; /74HC164 数据sbit CLK=P11; /74HC164 脉冲sbit SDA=P13; /I2C 数据sbit SCL=P16; /I2C 时钟sbit PL=P12; /74HC165 使能sbit CLK1=P15; /74HC165 脉冲sbit OUT=P14; /74HC165 输出sbit beef=P17; /蜂鸣器uchar j,z,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag

36、8; /定义变量uint n; /定义变量bit ack; /应答标志位uchar code zf=0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x09,0xff,0x7f; /定义数码管显示代码uchar yh88=0x00,0x00,0x00,0x00,0xb,0x1,0x00,0x00,0x00,0x00,0x00,0x00,0xb,0x2,0x00,0x00,0x00,0x00,0x00,0x00,0xb,0x3,0x00,0x00,0x00,0x00,0x00,0x00,0xb,0x4,0x00,0x00,0x00,0x00,0x00,0

37、x00,0xb,0x5,0x00,0x00,0x00,0x00,0x00,0x00,0xb,0x6,0x00,0x00,0x00,0x00,0x00,0x00,0xb,0x7,0x00,0x00,0x00,0x00,0x00,0x00,0xb,0x8,0x00,0x00; /二维数组,用于存储8户用电量信息/*起动总线函数函数原型: void Start_I2c();功能: 启动I2C总线,即发送I2C起始条件.*/void Start_I2c()SDA=1; /发送起始条件的数据信号nop();SCL=1; /开启I2C总线nop();nop();nop();nop();nop();/起始条

38、件建立时间大于4.7us,延时SDA=0; /发送起始信号/nop();nop();nop();nop();nop();/ 起始条件锁定时间大于4sSCL=0; /锁住I2C总线,准备发送或接收数据nop();nop();/*结束总线函数函数原型: void Stop_I2c();功能: 结束I2C总线,即发送I2C结束条件.*/void Stop_I2c()SDA=0; /发送结束条件的数据信号nop(); /发送结束条件的时钟信号SCL=1; /开启I2C总线nop();nop();nop();nop();nop();/结束条件建立时间大于4sSDA=1; /发送I2C总线结束信号nop(

39、);nop();nop();nop();/*字节数据发送函数函数原型: void SendByte(UCHAR c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)发送数据正常,ack=1; ack=0表示被控器无应答或损坏。*/void SendByte(uchar c)uchar BitCnt;for(BitCnt=0;BitCnt8;BitCnt+) /要传送的数据长度为8位if(cBitCnt)&0x80)SDA=1; /判断发送位else SDA=0;nop();SCL=1; /置时钟线为高,通知被控器开始接

40、收数据位nop();nop();nop();nop();nop();/保证时钟高电平周期大于4sSCL=0; /置时钟线为低nop();nop();SDA=1; /8位发送完后释放数据线,准备接收应答位nop();nop();SCL=1; /置时钟线为高nop();nop();nop();if(SDA=1)ack=0;else ack=1; /判断是否接收到应答信号SCL=0; /置时钟线为低nop();nop();/*字节数据接收函数函数原型: UCHAR RcvByte();功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。*/uchar RcvByte()uchar retc; /定义变量uchar BitCnt; /定义变量retc=0;SDA=1; /置数据线为输入方式for(BitCnt=0;BitCnt8;BitCnt+)nop();SCL=0; /置时钟线为低,准备接收数据位nop();nop();nop();nop();nop();/时钟低电平周期大于4.7sSCL=1; /置时钟线为高使数据线上数据有效nop();nop();retc=retc1; /retc中数据左移一位if(SDA=1)retc=retc+1; /读数据位,接收的数据位放入retc中n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号