




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
红外光通信装置-电赛报告红外光通信装置(F题)【本科组】2023年9月6日目录摘要31.系统方案设计51.1设计任务51.2方案的设计与论证5红外光通信装置总体方案设计5单片机模块的选择6红外发射接收装置模块的选择7语音采集模块方案的选择72.单元硬件电路设计72.1发射部分电路的设计72.2中转部分电路的设计82.3接收部分电路的设计83.程序设计93.1发射装置程序流程图93.2接收装置程序流程图104.系统测试105.理论分析与计算116.结论12参考文献12附录13摘要随着红外技术的发展,红外光通信已经成为越来越普及的无线通信方式。在本次设计作品中,红外光通信装置采用红外光传输及无线工作机制,其组成结构主要包括:红外发射装置、中继转发节点、红外接收装置三部分组成。红外发射装置主要是由声音采集系统经单片机存储后发射,红外接收装置接收到的信息经单片机存储后再经过D/A转换播放。通过采用A/D,D/A转换的方法达到了本次作品设计的目的。在电子消费领域当中,红外产品的使用较为普遍,它多用于简单的近距离控制,如家电、玩具、各种抄表系统、工业控制、娱乐设施等领域。所以,其具有很强的现实意义。关键词:红外通信发射接收A/D转换D/A转换AbstractWiththedevelopmentofinfrared,andinfraredopticalcommunicationhasbecomemoreandmorepopularwayofwirelesscommunication.Thisdesignworks,infra-redcommunicationdevicesuseinfraredlighttransmissionandwirelessworkingmechanisms,itscompositioninclude:infraredemittingdevice,relaynode,aninfraredreceiverunitiscomposedofthreeparts.InfraredLaunchercorrespondswithsoundcollectionsystembysingle-chipcomputermemoryafterthelaunch,IRreceiverreceivestheinformationviaasingle-chipstorage,andthenafterd/aconversionplay.Throughtheuseofa/d,d/aconversionwaytoachievethepurposeoftheproductiondesign.Inthefieldofconsumerelectronics,usinginfraredproductsaremoreprevalent,itisusedforsimplecontrolatcloserange,suchashouseholdappliances,toys,meteringsystems,industrialcontrol,recreationalfacilities,andotherfields.So,ithasalotofpracticalsignificance.Keywords:InfraredCommunicationlaunchreceiveA/DconversionD/Aconversion系统方案设计设计任务根据命题要求,设计并制作一个红外光通信装置。红外光通信装置利用红外发光管和红外接收模块作为收发器件用来定向传输语音信号,传输距离为2m.传输的语音信号频率范围为300–3400HZ,接收的声音应无明显失真。此外,增加一路数字信道,实时传输发射端环境温度,并能在接收端显示。数字信号传输时延不超过10s,温度测量误差不超过2℃,语音信号和数字信号能同时传输。同时,设计并制作一个红外光通信中继转发节点,以改变通信方向=90\*Arabic90℃,延长通信距离2m,中继转发节点采用5V直流单电源供电,尽量减小转发节点供电电流。方案的设计与论证1.2.1红外光通信装置总体方案设计整套方案主要由红外发射装置、中继转发节点、红外接收装置三部分组成。先把传输进红外发射装置的声音经过放大电路进行放大,然后由STC12C5A08S2单片机自身带有的A/D转换功能把模拟信号转换为数字信号对放大之后的语音进行采集,同时把采集到的数字信号存储到STC12C5A08S2单片机中。然后,经555定时器电路产生38K载波,并利用三极管对单片机中存储的数据和555定时器产生的38K载波进行调制到达中继转发节点,并由1838红外接收头进行解调,接着把解调后的信号编码发送给中继点上的单片机STC11F04E,并由此单片机对其数据进行取反。再由555定时器电路产生38K载波,利用三极管对经单片机取反后的数据和38K载波进行调制,之后到达接收点。到达接收点的信号经STC12C5A08S2进行解码,送给TLC5615CP芯片构建的D/A转换电路把数字信号转换为模拟信号,最后再将此模拟信号发送给耳机,并由耳机播放。采用此方案的框图如下:单片机发送单片机发送中继转发节点显示温度音频信号A/D采集单片机存储红外接收装置单片机存储DAC播放温度信号放大系统放大系统温度、音频1.2.2单片机模块的选择方案=1\*CHINESENUM3一:传统51系列是的单片机,受其结构本身的限制很大,尤其模拟功能部件的增加更显困难,而且运行速度很慢,功耗比较高,抗干扰能力也不是很强。方案二:STM32系列具有一流的外设、低功耗、最大的集成度、简单的结构和易用的工具,是ARM公司的高性能Cortex-M3内核。但我们对此系列的单片机的编程操作不太熟练。方案三:宏晶芯片STC12C5A08S2是增强型的51系统单片机,具有一个时钟,高速、高可靠、宽电压、增加第二复位功能脚和外部掉电检测电路,采用低功耗设计,最重要的是其内部有AD外设和45K的EEPROM,我们可由此进行模数转换和信息存储。STC11F04E单片机超强抗干扰,超强抗静电,速度快,输入/输出口多,超低功耗,在系统可编程,无需编程器,无需仿真器,可远程升级。由于对于中继点低功耗的要求,所以把此单片机用于中继转发节点。基于我们对各种系列单片机运用的熟练程度和此次作品中所要实现的各项基本功能,我们决定在此方案设计中采用方案三。1.2.3红外发射接收装置模块的选择方案=1\*CHINESENUM3一:红外模拟信号。这种方法速度快,能达到实时传输效果。但是,在传输过程中,噪音比较大,容易受干扰。而且,传输的距离也比较近。方案=2\*CHINESENUM3二:红外数字信号。将要发射出去的模拟信号转换成数字信号,将数字信号送给红外发射电路,经该电路的调制转变成红外光信号在空中传输,到达中继转发节点后,转发到红外接收电路,接收电路收到该红外光信号,经过该电路的解调,将此红外光信号还原成可被单片机或其他处理系统处理的信号,由单片机或其他处理系统内部处理得到原来的数据编码。比较方案=1\*CHINESENUM3一和方案二,又考虑到我们对模拟部分的知识和数字部分的知识的掌握程度,我们决定选择方案二。1.2.4语音采集模块方案的选择方案=1\*CHINESENUM3一:采用语音编解码芯片。这种方法失真度小,信噪比较低,数据量大。但在数字图像处理中,由于数据量大,算法难度高,因此实时性成为技术难点之一。而且,在传输过程中所运用的1838红外接收头传输信息速度慢,而语音编码解码芯片数据量过大,与后续装置不协调。方案二:采用A/D,D/A转换装置。先把模拟信号转换为数字信号,再经中继转换节点在通信协议的控制下把数字信号转换为模拟信号。比较两种方案,并基于现实的情况,此模块选择方案二。单元硬件电路设计发射部分电路的设计发射部分主要由双运放NE5532组成的放大器、STC12C5A08S2单片机和NE555定时器构建的电路组成。其电路图如图1:图SEQ图\*ARABIC1中转部分电路的设计中转部分主要由1838红外接收头、STC11F04E单片机NE555定时器、三极管等搭建的电路组成,其电路图如图2:图SEQ图\*ARABIC2接收部分电路的设计接收部分主要由1838红外接收头、STC12C5A08S2单片机、TLC5615数模转换器、TL431可控精密稳压源等搭建的电路组成。其电路图如图3:图SEQ图\*ARABIC33程序设计系统程序主要由发射装置程序和接收装置程序两部分组成。系统程序流程图如下所示。开始3.1发射装置程序流程图开始Y读存储结束?结束初始化采集信号单片机存储存储结束?读存储发送YNN结束Y读存储结束?NNYNY读存储结束?结束初始化采集信号单片机存储存储结束?读存储发送YNN结束Y读存储结束?NNYN3.2接收装置程序流程图NYNY结束读存储D/A转换结束?接收完成?单片机存储接收初始化开始NYNYNYNY结束读存储D/A转换结束?接收完成?单片机存储接收初始化开始NYNY4系统测试传输距离测试:传输距离传输情况1m良好2m良好3m良好4m良好中继点电流大小:100MA左右温度误差:1°C无发射信号时无噪音800HZ信号输出0.3V有信号时8个LED闪烁,无信号时LED不闪烁5 理论分析与计算本系统使用数字信号传输,编码规则自定,具体如下:每串数据有1.5MS高电平,2MS低电平的引导码高电平时间0.5低电平时间0.6MS代表二进制数0高电平时间1.0MS代表二进制数1传输波形如图:波形SEQ波形\*ARABIC1波形SEQ波形\*ARABIC2波形SEQ波形\*ARABIC36结论本系统功能上和参数上都达到了题目的要求,基本上完成了题目的各项设计。并按照要求完成了其发挥部分,可以精确的显示温度,也可以利用中继点进行转接,但是声音信号传输延时较大。优点:本系统采用数字信号传输数据,能够最大限度的减少干扰且传输距离较长,适用于信息量较少、环境干扰较大的情况传输数据。本系统的不足:由于红外数字信号传输使用38K载波频率,很大程度上限制了数据传输的速度,所以本系统不适合音频等数据量较大的数据传输。所以本系统还有较大的提升空间,如声音信号使用模拟信号传输、温度信号使用数字信号传输能达到声音信号和温度信号实时传输。参考文献[1]阎石.数字电子技术基础(第五版)[M].北京:高等教育出版社,2006.[2]童诗白,华成英.模拟电子技术基础(第四版)[M].北京:高等教育出版社,2006.[3]黄智伟.全国大学生电子设计竞赛技能训练(第2版)[M].北京:北京航空航天大学,2023.[4]代万辉,陈松方.全国电子设计大赛培训宝典[M].北京:北京航空航天大学,2023.[5]求是科技.8051系列单片机C程序设计完全手册[M].北京:人民邮电出版社,2006.[6]杨欣,王玉凤,刘湘黔.电子设计从零开始[M].北京:清华大学出版社2005.附录:源程序//*************************sendmessage**************************//#include"STC12C5A60S2.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedchartypedefunsignedcharBYTE;typedefunsignedintWORD;ucharcodestr1[]={0x28,0xA6,0x4A,0x0E,0x05,0x00,0x00,0x84};//ROM1ucharcodestr2[]={0x28,0xA5,0x86,0x40,0x04,0x00,0x00,0x80};//ROM2sbitD1=P3^7;sbitDQ=P3^3;/*DefineISP/IAP/EEPROMcommand*/#defineCMD_IDLE0//Stand-By#defineCMD_READ1//Byte-Read#defineCMD_PROGRAM2//Byte-Program#defineCMD_ERASE3//Sector-Erase/*DefineISP/IAP/EEPROMoperationconstforIAP_CONTR*/#defineENABLE_IAP0x80//ifSYSCLK<30MHzsfrADC_DATA=0XBD;sfrADC_LOW=0XBE;sbitCS=P2^0;sbitSCLK=P2^1;sbitDIN=P2^2;sbitleft=P1^0;doublej;ucharflag,t;voidDelay(BYTEn);voidIapIdle();BYTEIapReadByte(WORDaddr);voidIapProgramByte(WORDaddr,BYTEdat);voidIapEraseSector(WORDaddr);uchartvalue;//温度值voidDelay999ms() //@30.000MHz{unsignedchari,j,k; _nop_(); _nop_();i=114; j=226; k=60;do {do {while(--k); }while(--j); }while(--i);}/******************************ds1820*********************/voidDelay1us() //@30.000MHz{unsignedchari;i=5;while(--i);}voidDelay10us() //@30.000MHz{unsignedchari; _nop_(); _nop_();i=72;while(--i);}voidDelay48us() //@30.000MHz{unsignedchari,j;i=2; j=99;do {while(--j); }while(--i);}voidDelay700us() //@30.000MHz{unsignedchari,j;i=21; j=106;do {while(--j); }while(--i);}voidDelay1ms() //@30.000MHz{unsignedchari,j;i=30; j=43;do {while(--j); }while(--i);}voidrst_Ds18b20(){ DQ=1;Delay1us(); DQ=0; Delay700us();//延迟700us DQ=1;Delay1ms();}voidwriteDs18b20(uchardate)//写数据{uchari; DQ=1;Delay1us();for(i=0;i<8;i++) { DQ=0;Delay10us(); DQ=date&0x01;Delay48us(); DQ=1;date>>=1;Delay1us(); }}ucharreadDs18b20()//读数据{uchari,date; DQ=1; _nop_();for(i=0;i<8;i++) { DQ=0;Delay10us(); DQ=1;Delay1us();Delay1us();date>>=1;if(DQ==1)date=date+0x80;Delay48us(); }returndate;}voidMatchromDs18b20(uchara) //匹配ROM{charj; writeDs18b20(0x55); //发送匹配ROM命令if(a==1) {for(j=0;j<8;j++) writeDs18b20(str1[j]); //发送18B20的序列号,先发送低字节 }if(a==2) {for(j=0;j<8;j++) writeDs18b20(str2[j]); //发送18B20的序列号,先发送低字节 }}uintread_temp(ucharz)/*读取温度值并转换*/{uchara,b; rst_Ds18b20();if(z==1) MatchromDs18b20(1); //匹配ROM1if(z==2) MatchromDs18b20(2); //匹配ROM 2 writeDs18b20(0x44);//*启动温度转换*///delay(1000); rst_Ds18b20();if(z==1) MatchromDs18b20(1); //匹配ROM1if(z==2) MatchromDs18b20(2); //匹配ROM2 writeDs18b20(0xbe);//*读取温度*/ a=readDs18b20(); b=readDs18b20();tvalue=((a>>4)|(b<<4));return(tvalue);}voidDAC(ucharw) //转换,将数据写入芯片{inta;CS=0;for(a=0;a<12;a++){SCLK=1; _nop_(); _nop_();if((w&0x80)!=0)//判断写入数据从第一位开始,看是否有数据输入 DIN=1;//将信号1写入芯片中else DIN=0;//将0写入芯片中 _nop_(); _nop_(); SCLK=0;//开启下一个写入数据 w<<=1;} CS=1;//关闭芯片}voidTimer1Init(void) //142微秒@24.000MHz{ AUXR&=0xBF; //定时器时钟12T模式 TMOD&=0x0F; //设置定时器模式 TMOD|=0x10; //设置定时器模式 TL1=0x7A; //设置定时初值 TH1=0xFE; //设置定时初值 TF1=0; //清除TF1标志 TR1=1; //定时器1开始计时}/*----------------------------initializationfunction----------------------------*/voidinit(){ EA=1;//开总中断 ET1=1; //开定时器1中断 PT1=1; //定时器1中断设为高优先级 P1M0=0XFF; P1M1=0; P1ASF=0X01;//设置P1.0作为输入Timer1Init();}/*----------------------------Softwaredelayfunction----------------------------*/voidDelay7us() //@30.000MHz{unsignedchari;i=50;while(--i);}/*----------------------------Softwaredelayfunction----------------------------*/voidDelay(BYTEn){WORDx;while(n--){x=0;while(++x);}}/*----------------------------DisableISP/IAP/EEPROMfunctionMakeMCUinasafestate----------------------------*/voidIapIdle(){IAP_CONTR=0;//CloseIAPfunctionIAP_CMD=0;//ClearcommandtostandbyIAP_TRIG=0;//CleartriggerregisterIAP_ADDRH=0x80;//Dataptrpointtonon-EEPROMareaIAP_ADDRL=0;//ClearIAPaddresstopreventmisuse}/*----------------------------ReadonebytefromISP/IAP/EEPROMareaInput:addr(ISP/IAP/EEPROMaddress)Output:Flashdata----------------------------*/BYTEIapReadByte(WORDaddr){BYTEdat;//DatabufferIAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittimeIAP_CMD=CMD_READ;//SetISP/IAP/EEPROMREADcommandIAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslowIAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshighIAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcompletedat=IAP_DATA;//ReadISP/IAP/EEPROMdataIapIdle();//CloseISP/IAP/EEPROMfunctionreturndat;//ReturnFlashdata}/*----------------------------ProgramonebytetoISP/IAP/EEPROMareaInput:addr(ISP/IAP/EEPROMaddress)dat(ISP/IAP/EEPROMdata)Output:-----------------------------*/voidIapProgramByte(WORDaddr,BYTEdat){IAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittimeIAP_CMD=CMD_PROGRAM;//SetISP/IAP/EEPROMPROGRAMcommandIAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslowIAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshighIAP_DATA=dat;//WriteISP/IAP/EEPROMdataIAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcompleteIapIdle();}/*----------------------------EraseonesectorareaInput:addr(ISP/IAP/EEPROMaddress)Output:-----------------------------*/voidIapEraseSector(WORDaddr){IAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittimeIAP_CMD=CMD_ERASE;//SetISP/IAP/EEPROMERASEcommandIAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslowIAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshighIAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcompleteIapIdle();}voidDelay100us() //@30.000MHz{unsignedchari,j;i=3; j=232;do {while(--j); }while(--i);}/*----------------------------擦除eeprom----------------------------*/voidEraseeeprom(){uinti;doublea; a=0;for(i=0;i<90;i++) { a=512+a;IapEraseSector(a);//Erasecurrentsector }}/***********************************************sendmess**************************************//**********************************************************************************************//***************************************发送红外数据**************************/voidsend(uchardate){uchari;/*************发送验证信息*************/ TR0=0;TH0=0xF1;TL0=0x5A; //装入初值设置波延时为1.5ms D1=1; //发送1.5ms的高电平 TR0=1; //启动定时器0while(!TF0); //等待 TF0=0;TH0=0xEC;TL0=0x78; D1=0; //发送2ms的低电平while(!TF0); //等待 TF0=0;/**************发送数据****************/for(i=0;i<8;i++) { TL0=0x1E; //设置定时初值0.5MS TH0=0xFB; //设置定时初值 TR0=1; D1=1;while(!TF0); TF0=0;if(date&0x01) { TL0=0x3C; //设置定时初值1MS发1 TH0=0xF6; //设置定时初值 }else { TL0=0x24; //设置定时初值0.6MS发0 TH0=0xFA; //设置定时初值TH0=0xFD; //0为窄的低电平,持续时间0.6ms } D1=0;while(!TF0); //等待 TF0=0;date=date>>1; } TL0=0x1E; //设置定时初值0.5MS TH0=0xFB; //设置定时初值 TR0=1; D1=1;while(!TF0); TF0=0; D1=0;/************************************结尾**************************/ TH0=0x0EC;//延时2ms TL0=0x078; TR0=1;while(!TF0); TF0=0; TR0=0;}voidsendtem(uchardate){uchari;/*************发送验证信息*************/ TR0=0;TH0=0xF1;TL0=0x5A; //装入初值设置波延时为1.5ms D1=1; //发送1.5ms的高电平 TR0=1; //启动定时器0while(!TF0); //等待 TF0=0;TH0=0xE2;TL0=0xB4; D1=0; //发送3ms的低电平while(!TF0); //等待 TF0=0;/**************发送数据****************/for(i=0;i<8;i++) { TL0=0x1E; //设置定时初值0.5MS TH0=0xFB; //设置定时初值 TR0=1; D1=1;while(!TF0); TF0=0;if(date&0x01) { TL0=0x3C; //设置定时初值1MS发1 TH0=0xF6; //设置定时初值 }else { TL0=0x24; //设置定时初值0.6MS发0 TH0=0xFA; //设置定时初值TH0=0xFD; //0为窄的低电平,持续时间0.6ms } D1=0;while(!TF0); //等待 TF0=0;date=date>>1; } TL0=0x1E; //设置定时初值0.5MS TH0=0xFB; //设置定时初值 TR0=1; D1=1;while(!TF0); TF0=0; D1=0;/************************************结尾**************************/ TH0=0x0EC;//延时2ms TL0=0x078; TR0=1;while(!TF0); TF0=0; TR0=0;}/*********************************************main******************************************************/voidmain(){read_temp(2);Delay999ms();/*******************sendinit**********************/ AUXR&=0x7F; //定时器时钟12T模式 TMOD&=0xF0; //设置定时器模式 TMOD|=0x01; //设置定时器模式 TR0=0;/**************************************************/sendtem(read_temp(2));Eraseeeprom();//擦除EEPROMflag=0; j=t=0;init();while(1);}voidtimer1()interrupt3{//send(0x55); TL1=0x7A; //设置定时初值 TH1=0xFE; //设置定时初值 ADC_CONTR=0xe8;Delay7us(); //@24.000MHzif(flag==0) {IapProgramByte(j,ADC_DATA);////写EEPROMj++;if(j==46079) {flag=1; j=0; } } ADC_CONTR=0x80;if(flag==1) {while(j!=46079) {send(IapReadByte(j));j++;t++;if((t%500)==0) { t=0;sendtem(read_temp(2)); } }while(1);// DAC(IapReadByte(j));//读EEPROM并DAC转化/* j++;if(j==46079) {Eraseeeprom();//擦除EEPROM*/flag=0; j=0; }}------------------------------------------------------------------------------------------------------------------------------------//*************************receive******************************//#include"STC12C5A60S2.h"#include"intrins.h"#defineucharunsignedchar#defineuintunsignedchartypedefunsignedcharBYTE;typedefunsignedintWORD;ucharcodestr[]="Temperature";/*DefineISP/IAP/EEPROMcommand*/#defineCMD_IDLE0//Stand-By#defineCMD_READ1//Byte-Read#defineCMD_PROGRAM2//Byte-Program#defineCMD_ERASE3//Sector-Erase/*DefineISP/IAP/EEPROMoperationconstforIAP_CONTR*/#defineENABLE_IAP0x80//ifSYSCLK<30MHzsbitCS=P2^0;sbitSCLK=P2^1;sbitDIN=P2^2;sbitre=P3^2;sbittest=P0^0;sbittest1=P0^1;sbitlcden=P3^4;sbitlcdrs=P3^5;doubleLowTime,HighTime;//储存高、低电平的宽度0-65535ucharmess;uchartem;doublej;ucharflag,ge,shi;voidDelay(BYTEn);voidIapIdle();BYTEIapReadByte(WORDaddr);voidIapProgramByte(WORDaddr,BYTEdat);voidIapEraseSector(WORDaddr);/*************************lcd1602程序**************************/voidDelay4ms() //@30.000MHz{unsignedchari,j;i=117; j=184;do {while(--j); }while(--i);}voidwriteCommend_Lcd(ucharcom)//写指令{lcdrs=0; P0=com;lcden=1;Delay4ms();lcden=0;Delay4ms();}voidwriteData_Lcd(uchardate)//写数据{lcdrs=1; P0=date;lcden=1;Delay4ms();lcden=0;Delay4ms();}voidinit_Lcd()//初始化设置1602{uchari;lcden=0;writeCommend_Lcd(0x38);writeCommend_Lcd(0x0c);writeCommend_Lcd(0x06);writeCommend_Lcd(0x01);writeCommend_Lcd(0x80);for(i=0;i<11;i++) {writeData_Lcd(str[i]); }writeCommend_Lcd(0x80+14);writeData_Lcd(0xdf);writeData_Lcd(0x43);}voiddisplay(uchardate){shi=date/10;ge=date%10;writeCommend_Lcd(0x80+12);writeData_Lcd(0x30+shi);writeData_Lcd(0x30+ge);}/***********************************************DAC***********************************************//*************************************************************************************************/voidDelay120us() //@30.000MHz{unsignedchari,j;i=4; j=125;do {while(--j); }while(--i);}voidDAC(ucharw) //转换,将数据写入芯片{inta;CS=0;for(a=0;a<12;a++){SCLK=1; _nop_(); _nop_();if((w&0x80)!=0)//判断写入数据从第一位开始,看是否有数据输入 DIN=1;//将信号1写入芯片中else DIN=0;//将0写入芯片中 _nop_(); _nop_(); SCLK=0;//开启下一个写入数据 w<<=1;} CS=1;//关闭芯片}/**********************************************************EEPROM*********************************//*************************************************************************************************//*----------------------------DisableISP/IAP/EEPROMfunctionMakeMCUinasafestate----------------------------*/voidIapIdle(){IAP_CONTR=0;//CloseIAPfunctionIAP_CMD=0;//ClearcommandtostandbyIAP_TRIG=0;//CleartriggerregisterIAP_ADDRH=0x80;//Dataptrpointtonon-EEPROMareaIAP_ADDRL=0;//ClearIAPaddresstopreventmisuse}/*----------------------------ReadonebytefromISP/IAP/EEPROMareaInput:addr(ISP/IAP/EEPROMaddress)Output:Flashdata----------------------------*/BYTEIapReadByte(WORDaddr){BYTEdat;//DatabufferIAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittimeIAP_CMD=CMD_READ;//SetISP/IAP/EEPROMREADcommandIAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslowIAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshighIAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcompletedat=IAP_DATA;//ReadISP/IAP/EEPROMdataIapIdle();//CloseISP/IAP/EEPROMfunctionreturndat;//ReturnFlashdata}/*----------------------------ProgramonebytetoISP/IAP/EEPROMareaInput:addr(ISP/IAP/EEPROMaddress)dat(ISP/IAP/EEPROMdata)Output:-----------------------------*/voidIapProgramByte(WORDaddr,BYTEdat){IAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittimeIAP_CMD=CMD_PROGRAM;//SetISP/IAP/EEPROMPROGRAMcommandIAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslowIAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshighIAP_DATA=dat;//WriteISP/IAP/EEPROMdataIAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcompleteIapIdle();}/*----------------------------EraseonesectorareaInput:addr(ISP/IAP/EEPROMaddress)Output:-----------------------------*/voidIapEraseSector(WORDaddr){IAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittimeIAP_CMD=CMD_ERASE;//SetISP/IAP/EEPROMERASEcommandIAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslowIAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshighIAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcompleteIapIdle();}/*----------------------------擦除eeprom----------------------------*/voidEraseeeprom(){uinti;doublea; a=0;for(i=0;i<90;i++) { a=512+a;IapEraseSector(a);//Erasecurrentsector }}/**********************************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年三月办公楼租赁合同嵌入的震动监测预警条款
- 法律知识合同法与知识产权试题
- 手车过户担保合同
- 电子设备租赁服务合同书
- 工地施工合同台账
- 合同法案例研究与实践应用
- 搅拌站砂石供料合同
- 喷塑流水线拆装协议合同
- 委托协议转让合同
- 端口开放协议合同
- 《虹桥机场旅客服务质量提升对策探究》6100字(论文)
- 丰子恺课件教学课件
- 让每一个闪光在每一天成长-四年级期中家长会 课件
- 《义务教育数学课程标准(2022年版)》初中内容解读
- 跟骨骨折护理查房课件
- 汉语口语速成第七课课件
- 自考00808商法押题及答案解析
- 语文教研专题讲座讲稿
- 江苏省苏州市2024-2025学年高二化学下学期期中试题含解析
- 人工智能在社会治理中的伦理与安全挑战
- 人教A版(新教材)高中数学选择性必修第二册综合检测
评论
0/150
提交评论