电子设计创新训练(提高)第四章常用典型外设使用方法与编程技术1汇编_第1页
电子设计创新训练(提高)第四章常用典型外设使用方法与编程技术1汇编_第2页
电子设计创新训练(提高)第四章常用典型外设使用方法与编程技术1汇编_第3页
电子设计创新训练(提高)第四章常用典型外设使用方法与编程技术1汇编_第4页
电子设计创新训练(提高)第四章常用典型外设使用方法与编程技术1汇编_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 常用典型(dinxng)外设使用方法与编程技术4-1 常用(chn yn)键盘与显示器接口 单片机的应用越来越广泛,因此它的接口也是品种繁多,但是从类别上看,也不过是人机接口、模入模出和开入开出这么几类。在速度要求不是很高的情况下,从系统的简洁性考虑,目前MCU的系统中,串行接口的器件获得了越来越多的应用。串行器件的操作目前主要有三种接口标准:移位寄存器方式、SPI标准接口和I2C总线。本章将就一些常见的接口类型进行一些介绍,主要是讨论接口驱动编程。并口器件的驱动相对简单,而且几乎所有的接口类参考书中都有很详尽的介绍,因此本章不介绍标准并口器件的驱动,而是侧重于串行器件和简洁灵活的接口

2、应用及编程介绍。共五十九页一、键盘(jinpn)接口驱动程序设计 图4-1 44扫描键盘(jinpn)电路 扫描式键盘是MCU系统中常用的输入设备,本小节的例子是使用51单片机的一个八位I/O口设计一组16键的小键盘。16键的小键盘比较常用,采用44方式,市场上甚至有很多成品的薄膜式16键盘组出售。见图4-1是本例的硬件原理图,采用51的P1口完成键盘硬件驱动。它的检测原理是:P1.4P1.7作为4行键盘的分时低电平驱动输出,P1.0P1.3作为4列键盘按键的输入检测。无键盘按下时,输入检测中P1.0P1.3获得的结果是高电平,而有按键输入时,扫描到相应按键所在行时,列输出将有低电平存在,根据

3、输出和输入状态就可以确定是那个按键按下。 共五十九页 这里需要指出的是,在P1.0P1.3上分别加了10K的上拉电阻,使用目的是辅助上拉,保证无按键时输入高电平。尽管单片机的P1口有内部上拉,但很微弱,当键盘连接线很短时,可以不加上拉电阻,如果键盘连接线比较(bjio)长,容易受到干扰,则需要使用这四只上拉电阻。下面是具体的驱动程序:/键盘(jinpn)扫描函数,无键盘(jinpn)返回0,有则返回0 xf00 xff,低4位的0f表示键值号,高位标示有按键。key_scan_dat() unsigned char data I,j,k; unsigned char code k_dat17=

4、0 xe7,0 xd7,0 xb7,0 x77,0 xeb,0 xdb,0 xbb,0 x7b,0 xed,0 xdd,0 xbd,0 x7d,0 xee,0 xde,0 xbe,0 x7e,0 x00;/定义0F共16个键的行列扫描结果,制作键值时用,多定义了一个空白符用于非法按键判别 P1=0 xff; /准备扫描,P1口全部输出高电平 j=0 xf7; /准备扫描,下一个为P1.4,依次为P1.5、P1.6、P1.7 k=0 x0f /预置输入状态为无键盘,准备输入 while(j!=0 x70)&(k=0 x0f) /做P1.4P1.7扫描有按键退出,无键扫到P1.7后退出 j=j1;

5、 /移到下一个I/O扫描 P1=P1&0 x0f;共五十九页P1=P1|j; /I/O输出 k=P1&0 x0f; /读入P1.0P1.3的扫描结果,只留低4位 if(k=0 x0f) /扫描出口无按键,返回0 i=0; else /扫描出口有按键,处理 delay(20); /按键前沿20ms延时去抖动,delay为ms延时函数 while(P1&0 x0f)!=0 x0f); /等待按键抬起 delay(20); /按键抬起后,做按键后沿20ms去抖动 j=j&0 xf0; j=j|k; /合成行列(hng li)信息,准备制作键值 k=0; while(j!=k_datk)&(k17)

6、/查表做键值 k+; if(k=16) /如果查到表尾,则可能是非法的多键按下 i=0; /本函数不支持多键同时按下组合操作,返回0 共五十九页 else i=k|0 xf0; /检测的键是合法(hf)按键,返回0 xf00 xff return i; /返回检测结果 上面的例子符合模块化编程原则,能够返回容易识别和使用的键值,它可以嵌入应用程序的任何位置来进行扫描按键。应用中需要注意它的调用频率,一般来讲,人对一个动作的反应速度是200ms,所以为保证不至于漏掉按键操作,程序中必须保证及时调用按键函数。还需要指出(zh ch)的是,这个键盘函数不支持多键同时操作的定义。这个程序只能够识别单键

7、,不能够识别组合按键。共五十九页二、LED显示(xinsh)接口驱动程序设计 智能设备的显示器目前主要有LED和LCD两类。LED一般都是采用动态扫描方式(fngsh)来驱动。LCD产品有简单的是段驱动类数码类型显示板,复杂的则是内置CPU驱动器的点阵图形模块,并且都提供标准的串口或并口逻辑,驱动简单,一般厂家都提供51及C的驱动程序。本小节主要以LED扫描驱动和静态驱动设计为主要内容,介绍显示器的设计和软件驱动程序。(一) 4位LED动态扫描驱动程序 设计要求:使用单片机的一个8位I/O口设计一个4位动态LED显示接口。单片机使用标准8051内核的芯片,时钟为12MHz。分析要求,8根I/O

8、口线显然无法直接完成位和段的扫描驱动,只能采用比较灵活的接口方案。比较可行的就是采用BCD7段译码驱动器芯片做段扫描驱动,只需要4根I/O口线,余下4根I/O口做位驱动。本例使用74LS247芯片作为BCD7段译码驱动器,做为4只共阳LED数码管的段驱动,使用P1.0P1.3做BCD码输出。使用P1.4P1.7作为位选通控制,通过4只PNP三极管做LED的位控,具体硬件见图4-2。共五十九页图4-2 4位LED扫描(somio)驱动接口电路图 图中具体参数是这样确定的:LED静态驱动段电流应该为5mA才能够达到足够亮度,LED位数比较少时,扫描时也应该保持这样一个平均电流水平,因此4只LED扫

9、描时,每段驱动电流应该为20mA,LED的管压降为2V,系统电压为5V,因此段限流电阻应该为150。位控制三极管选用C9012,它的值在100倍以上,扫描时LED包括小数点的8个管芯全亮时总电流为160mA,因此基极电流应该保持1.6mA以上,因为基极驱动电压为4.3V左右(zuyu),可以计算出基极限流电阻应该2.7K以下,这里取2K。共五十九页 软件上,使用T0定时器产生2ms的中断,使用中断服务程序做显示扫描(somio),每次中断扫描(somio)一位LED,4次中断扫描(somio)一个周期,整体刷新速度为125Hz。具体驱动程序如下: #include unsigned int d

10、ata disdat; /定义显示数据变量,为无符号整形unsigned char data discount=0; /定义扫描显示状态变量,为03/T0中断(zhngdun)函数,2ms间隔,每次扫描一位LED,4个扫描周期循环扫描4位LED。void t0_int() interrupt 1 TH0=63536/256; /中断入口重新初始化计数器 TL0=63536%256; switch (discount) /根据扫描状态计数器扫描4个LED中的1个 case 0: P1=(disdat/1000)&0 x0f)|0 x70; /扫描显示千位,送BCD码和位选信号 break; ca

11、se 1: P1=(disdat%1000)/100)&0 x0f)|0 xb0; /扫描百位 break; case 2: P1=(disdat%1000)%100)/10)&0 x0f)|0 xd0; /扫描十位共五十九页 break; case 3: P1=(disdat%1000)%100)%10)&0 x0f)|0 xe0; /扫描(somio)个位 break; default: break; discount+; /扫描计数器移动到下一个状态 if(discount=4) discount=0;/主函数初始化部分void main() TMOD=0 x01; TH0=63536/

12、256; TL0=63536%256; EA=1; ET0=1; 共五十九页 本例软件相当简洁,但该例有一些应用限制,首先是没有小数点显示,如果需要显示小数点,也只能(zh nn)在硬件上接固定位置的小数点,例如在图4-2中的LED3的小数点段上对+5V电源接一个150电阻就可以点亮十位上的小数点。其次是这个显示器没有考虑显示负数的问题,并且它的入口参数disdat的值不能超过9999。共五十九页(二) LED静态驱动方法及驱动程序 在LED显示应用领域中,一般要求控制芯片使用简单、功能多样化、多级灰度调节、外围电路精简可靠、译码与功率驱动于一体。MAX7219是一种集成化的串行输入(shr)

13、/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。MAX7219与SPI、QSPI以及 MICROWIRE相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。 MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150A的低功耗关闭

14、模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。当使用多于8位LED时,只需将N片级联,便可轻松实现N8位LED显示。当N8时,应考虑到提高总线驱动能力。 共五十九页引脚名称功 能1DIN串行输入。当LOAD为高电平,串行输入数据的最后16位被锁定12LOAD装载数据输入。在CLK的下降沿,数据被加载到内部16位移位寄存器中13CLK时钟输入。最高频率为10MHz。在CLK的上升沿,数据被移入到内部移位寄存器中。在CLK的下降沿,数据从DOUT输出。24DOUT串行数据输出。输入到DIN的数据在16.5个时钟周期后在DOUT端有效,用于

15、N片级联。18ISET通过一个电阻(RSET )连接到V,用于设定段电流。19V+供电电源4,9GND供电电源2,3,58,10,11DIG078位数据驱动线,它从显示器吸入电流1417,2023SEGAG,DP7段数码和小数点线,它供给显示器源电流图4-3 MAX7219引脚表4-1 MAX7219引脚功能表共五十九页图4-4 MAX7219内部结构原理图共五十九页图4-5 MAX7219操作(cozu)时序图共五十九页详细描述(一)MAX7219硬件特点 (1):MAX7219的段驱动有上升速度限制,可以减少EMI; (2):MAX7219的串行口和SPI完全兼容。(二)串行地址格式 对M

16、AX7219来说,串行数据在DIN输入16位数据包,无论LOAD端处于(chy)何种状态,在时钟的上升沿数据均移入到内部16位移位寄存器。然后数据在LOAD/的上升沿被载入数据寄存器或控制寄存器。LOAD/端在第16个时钟的上升沿同时或之后,下个时钟上升沿之前变为高电平,否则数据将会丢失。在DIN端的数据传输到移位寄存器在16.5个时钟周期之后出现在DOUT端。数据位标记为D0-D15(如表4-2表示)。D8-D11为寄存器地址位。D0-D7为数据位。D12-D15为无效位。D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0地址MSB 数据 LSB表4-2 MAX72

17、19串行数据格式共五十九页表4-3 数据(shj)寄存器与控制寄存器表共五十九页 理论上,只使用3根I/O口即可进行多片MAX7219的级联,具体芯片数量只受片选与时钟端的总并联电容限制。采用级联的方法(fngf),可以驱动大量的LED。 但是级联数量越大,驱动所需要的时间越长,因此在实际使用中,需要对驱动速度、驱动目标的数量及所使用的I/O口进行折中设计。下面的例子是扩展两片MAX7219,但不是采用级联的方法,而是仅二组显示器公用时钟和片选,数据输入采用独立输入端。这样,每扩展一个芯片需要增加一根I/O的开销,速度基本不降低。共五十九页图4-6 MAX7219静态(jngti)驱动原理图A

18、共五十九页图4-7 MAX7219静态(jngti)驱动原理图B共五十九页/显示函数.二组显示器公用时钟和片选(锁存控制).第1,2组为MAX7219./显示函数1,对第1,2组显示器,仅输入一组信息,可以是命令(mng lng)或者数据.void display0(unsigned char add,unsigned char dat1,unsigned char dat2)unsigned char data i; sclk=0; cs=0; for(i=0;i8;i+) din1=(addi)&0 x80; /从最高位取第一组显示器传送数据 din2=(addi)&0 x80; sclk

19、=1; sclk=0; for(i=0;i8;i+) din1=(dat1i)&0 x80; /从最高位取第一组显示器传送数据 din2=(dat2i)&0 x80; sclk=1; sclk=0; 共五十九页 cs=1; din1=1; din2=1; sclk=1;/显示系统初始化函数void display_init() display0(0 x0f,0 x00,0 x00); /7219进入工作模式 display0(0 x0c,0 xff,0 xff); /上电工作状态 display0(0 x0b,0 x07,0 x07); /允许8个LED全部工作 display0(0 x0a,

20、0 x05,0 x05); /设定(sh dn)扫描电流占空比 display0(0 x09,0 x00,0 x00); /工作在非译码状态/显示函数2,将全部显示器刷新.循环调用显示函数1.默认使用显示缓冲区displaybuf1,2/数组.实际上调用8次. 调用前,显示缓冲区已经送好段码(芯片采用非七段译码).void display()unsigned char data i; for(i=0;i8;i+) display0(i+1,displaybuf1i,displaybuf2i); 共五十九页4-2 MCU常用外围串行接口器件(qjin)驱动程序设计 IMP705/706/707/

21、708和IMP813L等CMOS监控电路能监控电源及电池电压(diny)和P/C的工作状况。当电源电压降至4.65V以下(IMP705/707/813L)或4.40V以下(IMP706/708)时,即产生复位。该系列产品能提供多种功能。每个器件在上电、掉电期间及在电压降低的情况下可产生一个复位信号。此外,IMP705/706/813L带有一个1.6秒的看门狗定时器。IMP707/708虽然无看门狗功能,但是同时具有高电平有效和低电平有效的复位输出,IMP813L的引脚和功能与IMP705相同但只具有高电平有效的复位输出。具有1.25V门限的电源故障报警电路可用于检测电池电压和非5V的电源。所有

22、器件都具有手动复位(MR)输入。看门狗定时器的输出如果连接至MR将会触发复位信号。所有器件都具有8脚DIP、SO和MicroSO封装。一、MCU系统监控芯片IMP705/706/707/708和IMP813L共五十九页系列芯片特点:l 可替换Maxim公司的MAX705/6/7/8及MAX813Ll 精确的电源监控 4.65V门限(IMP705/707/813L) 4.40V门限(IMP706/708)l 去抖动的手动复位输入l 电压监控 1.25V门限 电池(dinch)监控/辅助电源监控l 看门狗定时器(IMP705/706/813L)l 200ms复位脉冲宽度l 高电平有效的复位输出(I

23、MP707/708/813L)共五十九页图4-8 监控(jin kn)芯片内部工作原理图共五十九页二、EEPROM存储器芯片(xn pin)93C46/56/66 AT93C46/56/66是ATMEL公司推出的低功耗、低电压电可擦除的可编程只读存储器。它采用CMOS技术和Fairchild Semiconductor 公司的Mi-croWire工业标准线串行接口,具有1KB/2KB/4KB的容量,并可通过ORG管脚配置成1288/2568/5128或6416/12816/25616等结构。该系列存储器可靠性高,能够重复写100万次,数据可以保存100年不丢失;采用8脚PDIP/SOIC封装和

24、14脚SOI封装(SOI封装为JEDEC和EIAJ标准),与并行的EEPROM相比,AT93C46/56/66可大大节省印制板空间(kngjin),且接线简单,因而在多功能的精密测试仪器中具有广阔的前途。 图4-9AT93C46/56/66引脚排列共五十九页引脚符号功能1CS片选信号:高电平有效,低电平时进入等待模式。在连续的指令之间,CS信号必须持续至少250ns的低电平,才能保证芯片正常工作。2CLK串行时钟信号:在CLK的上升沿,操作码、地址和数据位进入器件或从器件输出。在发送序列时,CLK最好不停止,以防止读写数据的错误。3DI串行数据输入:可在CLK的同步下输入开始位、操作码、地址位

25、和数据位。4DO串行数据输出:在CLK同步下读周期时,用于输出数据;而在地址擦写周期或芯片擦写周期时,该端用于提供忙闲信息。5VSS接地6VCC接5V电源7ORG该存贮器构造配置端:接VCC或悬空时,输出为16位;接GND时,输出为8位8NC空脚不连接表4-4 93C46引脚功能表共五十九页硬件特点:1、低的操作电压和保持电压 (1)2.7V版本(2.7Vto5.5V); (2)1.8V版本(1.8Vto5.5V);2、接口 3线串行;3、操作速度 2MHz时钟;4、写入时间 10ms最大;5、数据(shj)保存时间 100年;6、封装形式 8-lead PDIP;8-lead JEDEC a

26、nd EIAJ SOIC;8-lead TSSOP;共五十九页图4-10 AT93C46/56/66内部(nib)结构图共五十九页指令起始位操作码地址位数据位备 注*8*16*8*16READ110An AoAn Ao空空从指定的单元读数EWEN10011xxxxx11xxxx空空允许写指令ERASE111AnAoAn-1Ao空空擦除指定单元WRITE101AnAoAn-1AoD7D0D15D0写入存储单元ERAL10010 xxxxx10 xxxx空空擦除存储器所有单元WRAL10001xxxx01xxxxD7D0D15D0写入存储器所有单元EWDS10000 xxxxx00 xxxx空空禁

27、止写指令表4-5 93C46操作(cozu)指令表共五十九页各指令的具体含义如下:1) 擦写允许指令(EWEN)由于在上电复位后AT93C46/56/66首先将处于擦写不允许状态,故该指令必须在所有编程模式前执行,一旦该指令执行后,只要外部没有断电就可以对芯片进行编程。2)地址擦指令(ERASE)该指令用于强迫指定地址中所有数据位都为“1”。一旦信息在DI端上被译码,就需使CS信号保持至少250ns的低电平,然后将CS置为高电平,这时,DO端就会指示“忙”标志。DO为“”,表示(biosh)编程正在进行;DO为“”,表示(biosh)该指定地址的寄存器单元已擦完,可以执行下一条指令。3) 地址

28、写指令(WRITE)写指令时,先写地址,然后将16位或位的数据写入到指定地址中。当DI端输出最后一个数据位后,在CLK时钟的下一个上升沿以前,CS必须为低,且需至少保持250ns,然后将CS置为高电平。需要说明的是:写周期时,每写一个字节需耗时4ms。4) 地址读指令(READ)读指令用于从指定的单元中把数据从高位到低位输出至DO端,但逻辑“0”位先于数据位输出。读指令在CLK的上升沿触发,且需经过一段时间方可稳定。为防止出错,建议在读指令结束后,再输出23个CLK脉冲。5) 芯片擦指令(ERAL)该指令可将整个存贮器阵列置为1,其它功能与地址擦指令相同。6) 芯片写指令(WRAL)该指令可将

29、命令中指定的数据写入整个存贮器阵列,其它功能与地址写指令相同。该指令周期所花费时间的最大值为30ms。7) 擦写禁止指令(EWDS)使用该指令可对写入的数据进行保护,操作步骤与擦写允许指令相同。共五十九页图4-11 93C46读时序(sh x)图4-12 93C46写时序(sh x)共五十九页/*写入命令驱动函数,说明:通用(tngyng)前置输入,例如用于EWEN(30H),EWDS(00H)等命令,也可以用于通用(tngyng)读写的前*/*置地址及命令输入,调用后需要拉低CS*/void eeprom_com(command)unsigned char command; unsigned

30、 char data i; eeprom_clk=0; eeprom_cs=1; eeprom_di=1; /*首先写入1位1*/ eeprom_clk=1; eeprom_clk=0; bb=command; /*bb为全局bdata型unsigned char变量*/ i=8; while(i!=0) eeprom_di=bb_7; /*对bb字节最高位进行位寻址*/ eeprom_clk=1; eeprom_clk=0; bb=bb8; /*bb1是准备写入的字节,先送高8位.*/ i=8; while(i!=0) bb=bb1; /*bb是输出的数据.*/ eeprom_di=bb1_

31、7; eeprom_clk=1; bb1=bb11; bb_0=eeprom_do; eeprom_clk=0; i-; 共五十九页 x=bb; x=x8; bb1=word; i=8; while(i!=0) bb=bb1; eeprom_di=bb1_7; eeprom_clk=1; bb1=bb11; bb_0=eeprom_do; eeprom_clk=0; i-; y=bb; x=x+y; eeprom_cs=0; dealy(15); /*延时15MS以上,防止(fngzh)写未结束*/ eeprom_com(0 x00); /*写禁止*/ eeprom_cs=0; eeprom_

32、clk=1; eeprom_di=1; return(x);共五十九页三、X5045芯片应用(一) 器件功能 内含EEPROM的MCU(微处理器)监控芯片X5045将四项功能合于一体:上电复位(f wi)控制、看门狗定时器、降压管理以及具有块保护功能的串行4KBit EEPROM(5128 Bit)。它有助于简化应用系统的设计,减少印刷线路板的占用面积,提高可靠性。 图4-13 X5045的引脚排列(pili) 上电及掉电检测为CPU提供可靠的电源波动保护;三种可选的看门狗溢出时间能够适应不同反应速度的系统,一旦设定,掉电后依然有效。共五十九页(二)操作过程1) 上电复位 当器件通电并超过VT

33、RIP时,X5045内部的复位电路将会提供一个约为200mS的复位脉冲,让微处理器能够正常复位。2) 降压检测 工作过程中,X5045检测VCC 端的电压下降,并且在VCC 电压跌落到 VTRIP以下时产生一个复位脉冲,这个复位脉冲一直有效,直到VCC 降到1V以下在此过程中保证MCU处于复位状态,避免出现不可预知的错误操作。如果VCC 在降落到VTRIP后上升,则在VCC 超过 VTRIP后延时约200ms,复位信号消失,使得微处理器可以继续工作。3) 看门狗定时器 看门狗定时器电路监测WDI的输入来判断微处理器是否正常工作,在设定的定时时间以内微处理器必须在WDI引脚上产生一个由高至低的电

34、平变化,否则X5045将产生一个复位信号。可通过状态寄存器的控制位WD1、WD0设置看门狗定时器的溢出时间。4) SPI串行编程EEPROM 该芯片内的串行EEPROM是具有Xicor公司的块锁保护CMOS串行4KBit EEPROM(5128 Bit), 其擦写周期至少有1000000次,并且写好的数据能够保存100年。芯片控制的指令被组织成一个字节(8bit),它由一个由四线构成的SPI总线方式进行(jnxng)操作。共五十九页引脚符号功能描述1CS/WDI作为片选,必须要有一个高变低的过程,操作结束后,在变为高。看门狗输入:在看门狗定时器超时并产生复位之前,一个加在WDI引脚上的由高变低

35、的电平变化将复位看门狗定时器。2SO串行输出:SO是一个推/拉串行数据引脚,在读数据时,数据在SCK脉冲的下降沿由这个引脚送出。3WP为低的时候,禁止X25045中写的操作;为高时,允许写,为硬件写允许控制端。4VSS电源地5SI串行输入:SI是串行数据输入端,指令码、地址、数据都通过这个引脚进行输入,在SCK的上升沿进行数据的输入,并且高位MSB在前。6SCK串行时钟:串行时钟的上升沿通过SI引脚进行数据的输入,下降沿通过SO引脚进行数据的输出。7RESET复位输出端,由于这是一个开漏型的输出引脚,所以在使用时必须接上拉电阻。8VCC正电源,5V或者2.7V。表4-6 X5045引脚功能表共

36、五十九页图4-14 X5045与8051连接(linji)图共五十九页(三) X25045与单片机接口应用 MCU(微处理器)监控(jin kn)芯片X5045同AT89C51单片机接口的硬件电路连接方法如图4-14所示。 因X5045的RESET端为开漏输出,需通过10K的上拉电阻与AT89C51的RST端相连,以确保微处理器能够正常复位。X25045的WP端通常可接高电平(VCC),为确保系统无误操作,可将WP端与MCU的某一I/O口(如图中P1.4)相连,仅在向X5045进行写操作时将WP端置“1”,否则均将WP置“0”。另外因对X5045的读、写操作不是同时进行的,因此X5045的SI

37、、SO端可公用MCU的一个I/O口(如SI、SO均与P1.2相连接),这样可节省MCU的一个I/O口。由于AT89C51的P1口为准双向口,因此,为了防止数据错位,在向其P1口写数据时,必须先将P1口置“1”。共五十九页/x5045子程序:/在实际硬件设计中可以将ep_wip脚接高电平,可以将输入与输/出共用I/O/向5045中写入数据函数void xinput(unsigned char v)unsigned char data v1; for(v1=0;v18;v1+) ep_sck=0;/拉低时钟 ep_si=v&0 x80;/送出一位数据 ep_sck=1;/拉高时钟触发移位(y wi

38、)寄存器 v=v1;/准备输出下一位 ep_si=1; /输入置1,当输入与输出公用I/O时为输入做准备.共五十九页/数据的读出函数/辅助函数:从x5045输入一个字节(z ji)8位数据,首先输出高位.unsigned char xout()unsigned char data v1,x,y; ep_sck=0;/拉低时钟 for(v1=0;v18;v1+) ep_sck=1;/拉高时钟x=x1;/输出字节先左移 y=ep_so;/获得一位输出x=x|y;/组装输出结果 ep_sck=0; return x;共五十九页/辅助函数:写结束(jish)测试void wip_poll() unsi

39、gned char data v;doep_cs=1;ep_cs=0;xinput(0 x05);/准备读状态寄存器v=xout();ep_cs=1;v=v&0 x01; while(v=1); /测试寄存器低位,为零则写结束共五十九页/辅助函数:打开写开关,所有写操作前必须运行本程序(chngx),命令字为06Hvoid wren() /ep_wip=1;/打开硬件写开关ep_cs=1;ep_cs=0;xinput(0 x06);/发出打开开关命令ep_cs=1;/辅助函数:关闭写开关,所有写操作后必须运行本程序,以防止误写,命令字为04Hvoid wrdi()ep_cs=1;ep_cs=0

40、;xinput(0 x04);ep_cs=1; /ep_wip=0;/关闭硬件写控制I/O共五十九页/说明:写状态寄存器,包含WREN_CMD命令./功能:改变块锁定(su dn)控制位BL1,BL0(D3,D2)及看门狗超时控制/位WD1,WD0(D5,D4)./ 状态寄存器位 状态寄存器位 看门狗超时周期/被锁定的地址 / BL1 BL0 WD1 WD0 (典型值) / 0 0 无 0 0 1.4 秒 / 0 1 180H-1FFH 0 1 600毫秒 / 1 0 100H-1FFH 1 0 200毫秒 / 1 1 000H-1FFH 1 1 禁止 /共五十九页/辅助函数:写状态寄存器,包含WREN_CMD命令./功能:改变块锁定(su dn)控制位BL1,BL0(D3,D2)及看门狗超时控制位WD1,WD0(D5,D4)void

温馨提示

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

评论

0/150

提交评论