




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、题义分析及解决方案1.1题意需求分析根据本设计给定的内容和要求可知:本实验要使用可编程的输入、输出接口8279A芯片来驱动一个八位的LED数码管显示器,本实验中LED驱动采用动态扫描方式显示,共用到六个数码管显示器,在显示的过程中是逐个点亮的,分别用来显示时钟的:时位、分位、秒位。显示的初值设置为:23:59:59,每隔一秒,显示值改变一次。在显示的过程中,通过键盘的设置可以调整时间和暂停计数。本实验中由于要实现断电存储功能故还需用到存储芯片AT24C02,它与CPU之间的通信时通过接口8255A芯片实现的,通过对SCL和SDA引脚与8255A的PC0和PC1引脚相连实现对计时时钟的定时存储。当断电重新启动后,电子时钟要求能够按照断电前的时间继续计数。问题一:如何控制计时信息能够准确无误的显示出来,需要解决的就是选择什么样的外设,即通过什么样的外设来显示时间?问题二:当外部断电后再启动时,应怎样要电子时钟按照断电前的时间继续计数?问题三:8279A如何工作问题四:1S时间怎么控制以上这些问题都是我们设计计时时钟需要解决的,解决以上问题需要以下硬件和软件部分:(1)、时间的初始化;(2)、时、分、秒时钟的形成;(3)、计时的控制;(4)显示使用的设备;(5)、连接显示设备用的接口;(6)、外部存储设备;(7)、连接外部存储设备的接口。1.2解决问题的方法及思路。1.2.1硬件部分本实验采用8279A芯片、LED发光二极管、十六进制小键盘、8255A芯片、AT24C02存储芯片,由于8279A芯片的输出电流与LED不匹配,需采用74L240驱动电流。8279芯片是一通用可编程键盘显示接口器件,可以实现对键盘/显示器的自动扫描,以减轻CPU负担。与LED数码管、驱动器、按键可组成一个最基本键盘显示系统。具有显示稳定,程序简单,不会出现误动作等特点。AT24C02是记忆芯片,不能与CPU直接相连,要通过接口8255A芯片与CPU实现通信。具体分析如下:LED与LCD的比较:LED显示器与LCD显示器相比,LED在亮度、功耗、可视角度和刷新速率等方面,都更具优势。LED与LCD的功耗比大约为10:1,LED的最显著特点是使用寿命长,光电转换效能高,绿色环保;LCD占用空间小,低功耗,低辐射,能降低视觉疲劳,但是会出现闪烁问题。故实验中选着LED显示器,以用于终端显示。8279芯片:8279芯片可以实现对键盘/显示器的自动扫描,以减轻CPU负担,具有显示稳定,程序简单,不会出现误动作等。考虑其使用简单,故用8279芯片来控制键盘的输入和LED的显示。8255芯片与8251芯片的比较:8255芯片是可编程的并行接口芯片,不需要附加外部电路便可和大多数并行传输数据的外部设备相连,数据的各位同时传送,使用十分方便;8251芯片是一种通用的同步异步接收/发送器,它具有独立的发送器和接收器,能以单工、半双工或全双工方式进行通信,并能提供相应的控制信号,可方便的与调制解调器连接。但是考虑到8255较8251更易于对时序进行控制,8255对数据传输的控制程序较8251对数据传输的控制程序少,而本实验对时间差的要求较高,故而选择8255(选择8255的PC0端口控制数据的传输,PC1端口控制数据传输时的时序)作为连接外部存储设备的接口。十六进制小键盘与二进制开关的比较:键盘(Keyboard)是常用的输入设备,它是由一组开关矩阵组成,其结构虽然相对复杂,但它与8279A配套使用时,更易于实现实验的输入;二进制逻辑开关一位表示一个二进制数,它的结构相对简单,但对于本实验每一位数需要多次拨动八位开关,使实验复杂了许多。故选择十六进制小键盘。AT24C02存储设备:AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256X8位存储空间,具有工作电压宽(2.5〜5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。考虑到实验对资源及读写的要求,故选择AT24C02作为本实验的外部存储设备。实验中:选择74LS240以解决8279A的输出电流与LED所需电流不匹配的问题;选择74LS138以扫描计数器采用编码工作方式。1.2.2软件部分计时器的初始时间设置:在程序的数据段中定义秒、分、时的初值,并在LED上显示。上电后,数码管显示起始时间为23:59:59,通过键盘按键实现输入。计时控制:首先将秒钟个位计时加1,判断秒钟个位是否为10,若不是,则直接显示时间;若是,则将秒钟十位加1,秒钟个位清零,再判断秒钟十位是否为6,若不是,则直接显示时间;若是,则将分钟个位加1,秒钟十位清零。然后判断分钟个位是否为10,若不是,则直接显示时间;若是,则将分钟十位加1,分钟个位清零,再判断分钟十位是否为6,若不是,则直接显示时间;若是,则将时钟个位加1,分钟十位清零。最后判断时钟个位是否为4,若不是,则直接显示时间;若是,再判断时钟十位是否为2,若是则将小时两位清零,再显示时间;若不是,则判断小时个位是否为10,若不是,则直接显示时间;若是则将时钟十位加1,时钟个位清零,再显示时间。显示控制:8279A芯片内部有一个显示RAM和一个FIFORAM,可以暂存从小键盘中读出的数据,同时可以将内存中的数据暂存到显示RAM中,简化了程序复杂度。每次将各个位要显示的数据处理好后到换码表中找到对应值,初始化8279后将值送到数据口即实现显示的目的。1秒时间的设定:1秒的等待时间由循环程序执行的时间来决定,经多次实验后来估计循环程序执行的次数。小键盘的设置,A键定义为置电子时钟初值键,B键位暂停或起始键,D、E、F分别为清除时、分、秒的相应两位。存储设备的读写控制:以8255的PC0和PC1口控制AT24C02的SDA和SCL的信号的变化,进而控制数据向存储设备写入数据和存储设备向外界读出数据。具体控制为:先启动IIC总线,再通过8255的PC0和PC1口将数据逐位传入AT24C02中进行存储,最后关闭总线,进而实现数据的存储;先启动IIC总线,再通过读取8255的PC0和PC1口状态,并将状态进行存储,最后关闭总线,进而实现数据的存储。二、硬件设计8279A8279A在本设计中的作用在本设计中用8279A芯片控制键盘输入和LED显示。8279A的功能分析1、8279A主要特性8279A芯片是一种通用的可编程序的键盘/显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。可与任何8位机接口。8279A芯片包括键盘输入和显示输出两个部分。若采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点.当今已成为设计计算机应用系统,特别是实时性较高的测控系统的首选器件之一。2、8279A的内部结构DDB0图1-18279A的内部结构图中,IRQ:中断请求输出线,DB0~DB7:双向数据总路线(传送命令、数据、状态),成、廨:读写控制输入端,RESET:复位输入端,CLK:时钟输入端,雷:片选,C和/D(A0):片内寄存器选址,OUTA0~A1、OUTB0~B3:8位显示输出端,血:熄灭显示输出端,SL0~SL3:公用扫描输出线,RL0~RL7:键盘回馈输入线,SHIFT:抵挡键输入线,CNTL/STB:控制/选通输入线。另外,8279的键盘接口部分内部有一个8X8位先进先出的堆栈(FIFO),用来存放键盘输入代码,显示器接口部分内部有一个16X8位显示RAM,用来显示段数据,能为16位LED显示器(或其它显示器)提供多路扫描接口。3、 8279A的引脚信号和功能8279可编程键盘显示器接口芯片具有动态显示驱动电路,不占用CPU的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点。8279是可编程的键盘/显示接口芯片。它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8X8=64BRAM,键盘控制部分可控制8X8=64个按键或8X8阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示RAM容量为16X8,即显示器最大配置可达16位LED数码显示。4、 8279的命令字及其格式8279有三种工作方式:键盘工作方式、显示工作方式和传感器工作方式。键盘工作方式:双键互锁和N键轮回。双键互锁是指当有两个以上按键同时按下时,只能识别最后一个被释放的按键,并把其键值送入内部FIFORAM中。N键轮回是指当有多个按键同时按下时,所有按键的键值均可按扫描顺序依次存入FIFORAM中。显示工作方式:是指CPU输入至8279内部FIFORAM的数据的输出格式,其中包括了四种输出格式,即有8个字符左端入口显示、16个字符左端入口显示、8个字符右端入口显示、16个字符右端入口显示四种方式。传感器方式:它的功能是指在扫描传感器阵列时,一旦发现传感器的状态
发生变化就置位INT向CPU申请中断。选择不同的工作方式均是通过CPU对8279送入命令来进行控制。8279共有8种命令,命令寄存器为8位,其中D7〜D5为命令特征位,D4〜D0为命令的控制位。CPU对8279写入的命令数据为命令字,读出的数据为状态字。8279共有八条命令,其功能及命令字格式分述如下。(1)键盘/显示方式设置命令字命令格式:D7D6D5D4D3D2D1D00 0 0D D K KK其中:D7、D6、D5=000为方式设置命令特征位。DD(D4、D3):用来设定显示方式,如表2-2所示。D4D3显示方式008个字符显示,左端入口0116个字符显示,左端入口108个字符显示,右端入口1016个字符显示,右入口表2-2显示方式选择所谓左入口,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,则是显示位置从最右一位(最低位)开始,以后逐次输入显示字符时,已有的显示字符依次向左移动。KKK(D2、D1、D0):用来设定七种键盘/显示扫描方式,如表2-3所示。D2D1D0键盘/显示扫描方式000编码扫描键盘,双键锁定001译码扫描键盘,双键锁定010编码扫描键盘,N键轮回011译码扫描键盘,N键轮回100编码扫描传感器矩阵101译码扫描传感器矩阵110选通输入,编码显示扫描111选通输入,译码显示扫描表2-3键盘/显示扫描方式(2)时钟编程命令命令格式:D7 D6 D5 D4 D3 D2 D1 D00 0 1 P P P P P其中:D7、D6、D5=001为时钟命令特征位。PPPPP(D4、D3、D2、D1、D0)用来设定外部输入CLK时钟脉冲的分频系数N。N取值范围为2〜31。如CLK输入时钟频率为2MHZ,PPPPP应被置为10100(N=20),才可获得8279内部要求的100KHZ的时钟频率。读FIFO/传感器RAM命令命令格式:D7D6D5D4D3D2D1D0010AIXAAA其中:D7、D6、D5=010为读FIFO/传感器RAM命令特征位。该命令字只在传感器方式时使用。在CPU读传感器RAM之前,必须用这条命令来设定所读传感器RAM中的地址。AAA(D2、D1、D0)为传感器RAM中的八个字节地址。AI(D4)为自动增量特征位。当AI=1时,每次读出传感器RAM后地址自动加1使地址指向下一个存储单元。这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。在键盘工作方式中,由于读出操作严格按照先入先出顺序,因此,不需使用这条命令。(4)读显示RAM命令命令格式:D7 D6 D5 D4 D3 D2 D10 1 1 AI A A A其中:D7、D6、D5=011为读显示RAM命令字的特征位。D0A该命令字用来设定将要读出的显示RAM地址。AAAA(D3、D2、D1、D0)用来寻址显示RAM中的存储单元。由于位显示RAM中有16个字节单元,故需要4位寻址。AI(D4)为自动增量特征位。AI=1时,每次读出后地址自动加1,指向下一地址。(5)写显示RAM命令命令格式:D7 D6 D5 D4 D3 D2 D1 D01 0 0 AI A A AA其中:D7、D6、D5=100为写显示RAM命令字的特征位。在写显示RAM之前用这个命令字来设定将要写入的显示RAM地址。AAAA(D3、D2、D1、D0)为将要写入的显示RAM中的存储单元地址。AI(D4)为自动增量特征位。AI=1时,每次写入后地址自动加1,指向下一次写入地址。(6)显示禁止写入/消隐命令命令格式:D7 D6 D5 D4 D3D2 D1 D01 0 1 X IW/A IW/B BL/A BL/B其中:D7、D6、D5=101为显示禁止写入/消隐命令特征位。IW/A、IW/B(D3、D2)为A、B组显示RAM写入屏蔽位。当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。因此,从CPU写入显示器RAM数据时,不会影响A的显示。这种情况通常在采用双4位显示器时使用。因为两个四位显示器是相互独立的。为了给其中一个四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。BL/A、BL/B(D1、D0)为消隐设置位。用于对两组显示输出消隐。若BL=1,对应组的显示输出被消隐。当BL=0,则恢复显示。(7)清除命令命令格式:D7 D6D5D41 1 0 CDD3D2CDCDD1CFD0CA其中:D7、D6、D5=110为清除命令特征位。清除显示RAM方式如表2-4所示。D4D3D2清除方式10X将全部显示RAM清为00H110将全部显示RAM置为20H,A组输出0010,B组输出0000111将全部显示RAM置为FFH0XXD0=0不清除,D0=1按上述方法清除表2-4显示RAM清除方式CF(D1)用来置空FIFO存储器,当CF=1时,执行清除命令后,FIFORAM被置空,使INT输出线复位。同时,传感器RAM的读出地址也被置为0。CA(D0)为总清的特征位。它兼有CD和CF的联合效能。在CF=1时,对
显示的清除方式由D3、D2的编码决定。显示RAM清除时间约需160us。在此期间状态字的最高位Du=1,表示显示无效。CPU不能向显示RAM写入数据。(8)结束中断/错误方式设置命令命令格式:D71D6 D5 D41 1 ED3XD2XD71D6 D5 D41 1 ED3XD2XD1XD0X其中:D7、D6、D5=111为该命令的特征位。此命令有两种不同的作用。①作为结束中断命令。在传感器工作方式中使用。每当传感器状态出现变化时,扫描检测电路就将其状态写入传感器RAM,并启动中断逻辑,使INT变高,向CPU请求中断,并且禁止写入传感器RAM。此时,若传感器RAM读出地址的自动递增特性没有置位(AI=0),则中断请求INT在CPU第一次从传感器RAM读出数据时就被清除。若自动递增特征已置位(AI=1),则CPU对传感器RAM的读出并不能清除INT,而必须通过给8279写入结束中断/错误方式设置命令才能使INT变低。因此,在传感器工作方式中,此命令用来结束传感器RAM的中断请求。②作为特定错误方式设置命令。在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1),则8279将以一种特定的错误方式工作。这种方式的特点是:在8279的消抖周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和禁止写入FIFORAM。上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。因此,写入命令字时唯一的要求是使数据选择信号A0=1。5、8279的状态字及其格式以指示FIFORAM中8279的以指示FIFORAM中D7DUD6S/ED5 D4O UD7DUD6S/ED5 D4O UD3 D2F ND1ND0N当显示RAM由当Du=1当显示RAM由当Du=1表示显示无效。于清除显示或全清命令尚未完成时,Du=1,此时不能对显示RAM写入。S/E(D6)为传感器信号结束/错误特征位。该特征位在读出FIFO状态字时被读出。而在执行CF=1的清除命令时被复位。当8279工作在传感器工作方式时,若S/E=1,表示传感器的最后一个传感器信号已进入传感器RAM;而当8279工作在特殊错误方式时,若S/E=1则表示出现了多键同时按下错误。0、U(D5、D4)为超出、不足错误特征位。对FIFORAM的操作可能出现两种错误:超出或不足。当FIFORAM已经充满时,其它的键盘数据还企图写入FIFORAM,则出现超出错误,超出错误特征位0(D5)置1;当FIFORAM已经置空时,CPU还企图读出,则出现不足错误,不足错误特征位U(D4)置1。F(D3)表示FIFORAM中是否已满标志,若F=1表示已满。NNN(D2、D1、D0)表示FIFORAM中的字符数据个数。6、数据输入/输出格式对8279输入/输出数据不仅要先确定数据地址口,而且数据存放也要按一定格式,其格式在键盘和传感器方式有所不同。(1) 键盘扫描方式数据输入格式键盘的行号、列号及控制键格式如下:_D7_D6 D5.4D3D2D]D0被按键所在行号(由RL0〜RL7状态确定)被按键所在列号(由SL0〜SL2状态确定)控制键SHIFT状态控制键CNTL状态图2-2键盘的行号、列号及控制键格式控制键CNTL、SHIFT为单独的开关键。CNTL与其它键连用作特殊命令键,SHIFT可作上、下挡控制键。(2) 传感器方式数据输入格式此种方式8位输入数据为RL0〜RL7的状态。格式如下:D7 D6 D5D4 D3D2D1 D0RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL074LS138译码器74LS138译码器在本设计中的作用扫描计数器采用编码工作方式
74LS138译码器的功能分析74LS138是3/8译码器,即对3个输入信号进行译码。得到8个输出状态。G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。G1高电平有效。A,B,C为译码信号输出端,Y0~Y7为译码输出端,低电平有效。故据励出场输出选押允许选悻G|G:ipCEA故据励出场输出选押允许选悻G|G:ipCEAXHXXXLxXXXHLLLLHLLLHHLLHLHLLHHHLHLLHLHLHHLHHLHLHHH辅出端YiY,L览YdLHHHHHHHHHHHHHHHHLHHHHHHHHLHHHHHHHHLHHHHHHHHLHHHHHHHHLHHHHHHHHLHHHHHHHHLHHHHHHHHL图2-4功能表7V图2-4功能表7V74LS138译码器的技术参数极限值电源电压输入电压74LS138 7V工作环境温度74LS138 0〜70°C贮存温度 一65〜150C74LS24074LS240译码器在本设计中的作用本设计实验中主要是为增加LED的驱动电流74LS240译码器的功能分析74LS240TTL八反相三态缓冲器/线驱动器引出端符号:1A,2A 输入端屋,虱 三态允许端(低电平有效)1Y~8Y 输出端VM无1IT1ZA41¥2EU1Y3;2A3 3A1I||3 3 |4 5 |eTa9 |1D1&1A1 2T* U2 7V3IMSV^ 1A4 JT1<GND图2-574LS240逻辑图输入输出GAYLLHLHLHXZ表2-574LS240功能表74LS240译码器的技术参数极限值:TOC\o"1-5"\h\z电源电压 7V输入电压 5.5V输出高阻态时高电平电压 5.5V工作环境温度74LS240 0~70°C存储温度 -65~150C2.4小键盘2.4.1小键盘在本设计中的作用本设计中,小键盘用于输入二进制数字。2.4.2小键盘的功能分析通常使用的键盘是矩阵结构的。对于4X4=16个键的键盘,采用矩阵方式只要用8条引线和2个8位端口便完成键盘的连接。如图,这个矩阵分为4行4列,如果键5按下,则第1行和第1列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第1列线也输出低电平。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。第0列第第0列第列第2列第3列第0行第1行第2行第3行图2-54X4键盘矩阵图行扫描法识别按键的原理如下:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。如果有某列线变为低电平,则表示第0行和此列线相交位置上的键被按下;如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,也就是列线输入中有一位为0时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。实际应用中,一般先快速检查键盘中是否有键按下,然后再确定按键的具体位置。为此,先使所有行线为低,然后检查列线。这时如果列线有一位为0,则说明必有键被按下,采用扫描法可进一步确定按键的具体位置。2.5七段LED显示器LED作用LED发光二级管(Light-EmittingDiode),在本设计中采用7段数字发光二级管,做为终端显示。显示时间的时分秒。LED功能分析物理构造:LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。发光二级管是半导体,他的一些性质,具有导电的单向性,他在较小的电流下就可以亮,可以用来检验一些较小的电流的存在,他耗电量比较小,通常有各种颜色,又不费电,所以是最佳的的选择。
Lbo addp 曰一詹或共阴极型显示器愆I笔划段型显示器图2-6显毛ED结构图数字成像:将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。字型ABCDabcdefgbpOX0000000000011C0H1000110011111F9H2001000100101A4H3001100001101B0H401001001100199H501010100100192H601100100000182H7011100011111F8H810000000000180H910010000100190HA10100001000188HB10111100000183HC110001100011C6HD110110000101A1HE11100110000186HF1111011100018EH表2-6LED数码表LED技术参数表1-2LED技术参数表RatingSymbolValkHUnit■ReverseVatiEigc晌5VohsForwardCurrent—C^nthnuod^IF10QmAForwardCurrent—PeakPijImif1ATotal mTa=Defile 2SJCpq1QQ22■nWmW也ContinuousForwardCurrentIf10:'mAFqtw日ECurrent(pw,1ps;200Hz)If10AReverseVoltageVR3VPowerDissipation(TA=25°C)i:nPd173mWPowerDissipation(Tc=25°C)^)Pd1.3W2.68255A8255在本设计中的作用通过8255的PC0和PC1口控制数据向AT24C02中写入和读出。2.6.2芯片8255A的功能说明8255A是一种可控制编程的并行接口芯片,采用40脚双列直插式封装,单一+5V电源,全部输入/输出均与TTL电平兼容。它有A、B、C三个并行输入/输出端口,其功能全部由程序设定,每个端口都有自己的特点。本设计中8255A工作于方式0,即基本输入输出方式,其中PA口作为输入口,PB口作为输出口,PC0作为输入,C口的其他位不用。8255A在方式0下可将三个数据端口划分为4个独立的部分,A、B口分为两个8位端口,C口高4位和低4位分别用作两个4位端口。在此方式下,输出的数据被锁存,而输入的数据是不锁存的。A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.当A0=0,A1=0时,PA口被选择;当A0=0,A1=1时,PB口被选择;当A0=1,A1=0时,PC口被选择;当A0=1.A1=1时,控制寄存器被选择.CS:芯片选择信号线,当这个输入引脚为低电平时,1P/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输.①8255A的内部结构图如下:
匚FU接口A组控制1v-1 ' K貌口⑶A端H<<, ;■内部谖辑外部接口匚FU接口A组控制1v-1 ' K貌口⑶A端H<<, ;■内部谖辑外部接口lADPA?、PAflDB数据
总戏
缓冲
器A组
满口匚
上半部
(4)〉I/OPC7PC+B组
端口匚
下半部
(4)IADPC3、PCoKD—I丽一zAo——Ai——RESET——…读/写控制逻辑控制B组
满口B
(8)I/OPBj、PBoCS图18255A的内部结构图②8255A的方式控制字:D7D6D5D4D3D2D1D01A组工作方式A口I/OC7-C4I/OB组工作方式B口I/OC3-C0I/O| | | | | | |特征位00:方式0 1:输入 1:输入 0:方式0 1:输入 1:输入01:方式1 0:输出 0:输出 1:方式1 0:输出 0:输出10:方式2图2 8255A的方式控制字③8255A的置位/复位控制字:D7 D6 D5 D4 D3 D2 D1 D00XXX写入位编码写入内容
PC00000:写入0PC10011:写入1PC2010PC3011PC4100PC5101PC6110PC111写入位|编码|7图3 8255A的方式控制字:④8255A的端口录址及操作功能:A1A0错误!错误!错误!端口号及其功能00010端口A一>数据总线01010端口B一>数据总线 输入操作(读)10010端口C一>数据总线00100数据总线一>端口A01100数据总线一>端口B输出操作10100数据总线一>端口C (写)11100数据总线一>控制字寄存器xxxx1未选中8255A,数据总线一>三态11010头、/土冲太 断开功能非法状态xx110数据总线一>三态
表18255A的端口录址及操作功能表2.6.3芯片8255A的技术参数:参数名称 规范值符号测试条件最大最小输入低电平电压VIL0.8v-0.5v输入高电平电压VIHVcc2.0v输入低电平电压VI=2.5mA0.45v<数据总线〉OLOL输入低电平电压VI=1.7mA0.45v〈外部端口〉OLOL输入高电平电压VI=-400uA2.4v<数据总线〉OHOH输入高电平电压VI=-200uA2.4v〈外部端口〉OHOHREXT=750达林顿驱动电流I4.0mA1.0mADARVEXT=1.5v电源电流ICC120mA输入负载电流IILI=VCC~0v+10mA-10mA输出浮动电流IOFLVOUT=V"+10mA-10mA表28255A技术参数表由上可知:8255A的达林顿驱动电流最大值为4.0mA。2.7AT24C02AT24C02在本设计中的作用AT24C02在本设计中用于时间的存储,存储周期为1s。芯片AT24C02的功能说明AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256X8位存储空间,具有工作电压宽(2.5〜5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IC总线接口进行操作,有一个专门的写保护功能。电子制作实验室网站提供的AT89C51试验开发板上带有一片AT24C02芯片可以提供试验。下面是它的电路图。图中AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。在AT89C51试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C51试验开发板上和单片机的P3.5连接。第6脚SCL为串行时钟输入线,在AT89C51试验开发板上和单片机的P3.6连接°SDA和SCL都需要和正电源间各接一个5.1K的电阻上拉。第7脚需要接地。24C02中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。极限参数工作温度工业级-55°C+125°C商业级0C+75C贮存温度-65C+150C各管脚承受电压-2.0Vcc+2.0V
Vcc管脚承受电压-2.0+7.0V封装功率损耗(Ta=25°C)1.0W焊接温度(10秒)300C输出短路电流100mA表1可靠性参数符号参数最小最大单位参考测试模式NEND耐久性1,000,000周期/字节MIL-STD-883测试方法1033TDR数据保存时间100年MIL-STD-883测试方法1008VZAPESD2000VMIL-STD-883测试方法3015ILTH上拉电流100mAJEDEC标准172.8硬件总逻辑图及其说明rrYrv:v?Y4Y5Y6_Y_E3E1E2-4L兑弗S27520rrYrv:v?Y4Y5Y6_Y_E3E1E2-4L兑弗S27520图1-2硬件接线图图中8279的地址由保和A0决定,故数据口地址为00B0H,命令口地址为00B1H。所接的16个按键,扫描线接在74HC138的译码输出端宣和夷上,当宣为0(SLSLSL=000)时,扫描第1列按键,当直为0(SLSLSL=001)扫描第2列2 1 0 2 1 0按键,故0〜7号按键的键值为00H〜07H,8〜15号按键键值为08H〜0FH。当某一按键被按下后,键值就自动进入缓冲区,当8279内部RAM不空时由INT输出高电平告知CPU取走,故INT连接CPU的中断输入需加一反向器。8279键盘配置最大为8X8,若要配置64个按键,其它列扫描线可分别连至暨至宣上,形成8行8列的按键扫描电路。图中显示部分段选码由8279的OUTA〜OUTA、OUTB〜OUTB通过驱动器3 0 3 074LS240提供,位选码由SL2〜SL0经3-8译码器通过驱动器74LS240提供。图中8255的控制口地址为00F3H,PC0口地址为00F2H。PC0和PC1分别连接在AT24C02的SDA和SCL口上,用于数据的传输。三、控制程序设计3.1控制程序设计思路3.1.1主程序部分本程序主要实现的功能包括时间初值设置,输入错误则会提示ERROR,并按任意键重新输入。正确输入完按任意键开始计时。A、B、D、E、F键为功能键,用于时间重置,时间暂停及清除时分秒各位。程序开始条件查询是否有按键,当按键按下,8279状态字低三位为此时按键按下次数,由此判断是否从8279数据端口读入数据,当有按键按下时,从8279读数据到内存中,同时COUNT变量加一,当COUNT增加到7时,停止检查是否有按键按下。CALLSCAN_KEY;键扫描JNCSTART2;没有按键XCHGAL,KEYCOUNTINCALCMPAL,7JZSTART4XCHGAL,KEYCOUNTCALLKEY_NUM;键值转换为键号STOSB数据存入内存的HOUR,MIN,SED共六个字节单元中,每个单元对应一个数据,首先判断输入的时分秒是否在合理的范围内,如果不在,显示出错信息,并跳回到程序初始化部分,等待重新输入。如果输入正确,则开始计时,每次显示前将数据从内存读到不同的寄存器中,如将秒钟两位读到AX中,比较AL是否到10,没有则跳出判断,直接从内存中读出时间显示;若到10了,则将秒钟个位清零,并对AH加一后再写回到内存中。如此类推,判断分钟时钟各个位。应注意的是,在判断时钟个位时,既要比较其是否到4,又要判断是否到十,到十则清零,十位加一;到四则继续判断十位是否到2,若十位到2,清除时钟两位。MOVAL,SEC[1] ;比较秒钟个位是否到10INCAL;可以在此设置计数器Ns存储。MOVSEC[1],ALCALLIWRBYTE1;1s钟存储一下CMPAL,10JNZSTART21 ;未到10,就显示MOVSEC[1],0;;;;间隔10s存储一下MOVAL,SEC[0] ;比较秒钟十位是否到6INCALMOVSEC[0],ALCMPAL,6JNZSTART21 ;未到6,就显示MOVSEC[0],03.1.2键盘扫描子程序时间显示等待的一秒钟,是通过循环执行扫描子程序来实现的。判断有按键通过读8279状态字的低三位是否全为零。若不全为零,向控制口写读FIFORAM控制字,从数据口读数据到AL中。AL为0AH,则置CF为1;AL为0BH,则将FLAG_B取反;AL为0DH,则清除小时位;AL为0EH,则清除分钟位;AL为0FH,则清除秒位。结束后主程序会判断CF位,CF=1,则跳到程序初始化部分,重新开始;判断FLAG_B位,为1则暂停计时,不停扫描按键,直到B键再次按下,重新开始计时。SCAN_KEY_B:CMPAL,0CBH ;B键第一次按下,暂停;再按一次,重新开始计时JNESCAN_KEY_DCMPFLAG_B,0JEFLAGMOVFLAG_B,0JMPNO_KEY_CHFLAG:MOVFLAG_B,1JMPNO_KEY_CH3.1.3显示子程序首先清除上一次显示的结果,清除完毕后将8279位选码复位。将指针指向时间所在单元的首地址,依次取出换码,输出到数据端口,为了显示清楚明朗,在每两位后加一横杠,分隔开时分秒。LEASI,HOURMOVCX,2SHOW_1:LODSBcmpal,10hjashow_2LEABX,LED_TABXLATCALLWRITE_DATALODSBXLATCALLWRITE_DATAMOVAL,0BFH ;显示横杠CALLWRITE_DATALOOPSHOW_1LODSBLEABX,LED_TABXLATCALLWRITE_DATALODSBXLATCALLWRITE_DATA程序流程图程序主要由三四大功能块组成:控制整个过程的主程序,初设时间、修改时间、计时等;显示时间子程序,将内存中的当前时间通过8279显示到LED上;按键扫描子程序,判断当前按键值,并执行相应的计时清零工作。开始读AT24C02中的值1SI指向HOUR十yyKEYCOUNT=7?-二f JI初始化8279键号转换为键
值,AL->HOUR[DI],
换码显示键值显示
时间延时1ms键盘扫描2CF=1?.,■,■Y
—二FLAG_B=1?二清除显示,
KEYCOU
NT清零,DI指向
HOURHOUR[SI]->AH,SI+1->SIHOUR[SI]->AL,SI+1->SIAX>=0204.H?=十一一Jn二AL>=0AH?二=当—_一 ^~N MIN[SI]->AH,SI+1->SIMIN[SI]->AL,SI+1->SIAX>=0600H?二+NYAL>=0AH?己N.SEC[SI]->AH,SI+1->SISEC[SI]->AL,SI+1->SI-AX>=0600H?Ay>一一£~n_AL>=0AH??="1F显示时间CX置64KEYCOUNT+1
=KEYCOUNTNCX-1=0?秒个位加1,存储此刻的时间键盘扫描1秒个位清零,秒十位加1秒个位为10?N.N秒十位为6?IY=二二CF=1?二二清除显示,显示ERROR,延时2s,再清除显示,KEYCOUNT清
零,。【指向HOUR分个位清零,分十位加1 —Y 秒十位清零,分个位加1分个位为10?:.* NY □二分十位为6?JY图1-3主控程序流程图分十位清零,时个位加1时个位为4? Ny,二时十位为2?二—N时钟两位清零时个位为10?3•--一N■y',时个位清零,时十位加1争始手'否4图1-4显示时间子程序流程图图1-5按键扫描2子程序流程图3.3控制程序.MODELTINYPCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376 ;设备ID号,STACK100.DATAIO_Bit8_BaseAddressDW?msg0DB'BIOS不支持访问PCI$'msg1DB'找不到StarPCI9052板卡$'msg2DB'读8位I/O空间基地址时出错$'HOURDB02h,03h时MINDB05h,09h;分SECDB05h,09h;秒KEYCOUNTDB?FLAG_BDB0LED_TABDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0ffhERRORDB86H,88H,88H,0C0H,88HCMD_8279DW 00B1H;8279命令字、状态字地址DATA_8279DW00B0H ;8279读写数据口的地址CMD_8255DW 00F3H;8255控制口地址PC0_ADDDW00F2H ;PC0端口地址WRAT24C02DB0A8H ;写入24C02RDAT24C02DB0A9H ;读出24C02SUBA DB01H ;24C02存储数据起始地址PC0_0 DB00H;PC0置0,SDAPC0_1 DB01H;PC0置1PC1_0 DB02H;PC1置0,SCLPC1_1 DB03H;PC1置1NUMBYTEDB06H ;读/写的字节数ACK DB? ;位变量,ACK为1时有应答.CODESTART:MOVAX,@DATAMOVDS,AXNOPCALLInitPCICALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址CALLINIT8279 ;初始化子程序callinit8255CALLIRDBYTE1;读AT24C02中存储的时间JMPSTART4 ;判断时间是否正确START2:CALLSCAN_KEY ;键扫描(扫描后,键值在al中)JNCSTART2 ;没有按键XCHGAL,KEYCOUNTINCALCMP AL,7JZSTART4XCHG AL,KEYCOUNTCALL KEY_NUM ;键值转换为键号,比如ca转变为aSTOSBLEABX,LED_TAB;字型码表XLATCALLWRITE_DATAJMPSTART2START4:LEASI,HOURLODSBMOVAH,ALLODSBandAX,7fffhCMPAX,0204H ;取时,并比较是否到达24时JGESTART9 ;大于24andAX,7fhCMPAL,0AHJGESTART9 ;时钟个位大于10
MOVCX,2START8:LODSBMOVAH,ALLODSBandAX,7fffhCMPAX,0600HJGESTART9andAX,7fhCMPAL,0AHJGESTART9LOOPSTART8MOVAX,0JMPSTART5START9:CALLINIT8279_1 ;清LEDPUSHCXMOVCX,5LEASI,ERRORSTART10:LODSB(DF=0);指针加;指针加1LOOPSTART10POPCXCALLDL2SCALLINIT8279_1MOVKEYCOUNT,0LEADI,HOURJMPSTART2START5:MOVCX,64LOOP_1:CALLDL1MSCALLSCAN_KEY_CHJNCSCAN_B ;CF=0,即没按A键CALLINIT8279_1MOVKEYCOUNT,0MOVAX,0LEADI,HOURJMPSTART2SCAN_B:CMPFLAG_B,1;flag_b等于1时,暂停计时,直到在按一次b键JNELOOP_2 ;flag_b不等于1CALLINIT8279_1CALLSHOWJMPLOOP_1LOOP_2:LOOPLOOP_1MOVAL,SEC[1];比较秒钟个位是否到10INCAL;;;可以在此设置计数器Ns存储。MOVSEC[1],ALCALLIWRBYTE1;1s钟存储一下CMPAL,10JNZSTART21 ;未到10,就显示MOVSEC[1],0;;;;间隔10s存储一下MOVAL,SEC[0];比较秒钟十位是否到6INCALMOVSEC[0],ALCMPAL,6JNZSTART21 ;未到6,就显示MOVSEC[0],0MOVAL,MIN[1] ;比较分钟个位是否到10INCALMOVMIN[1],ALCMPAL,10JNZSTART21 ;未到10,就显示MOVMIN[1],0MOVAL,MIN[0] ;比较分钟十位是否到6INCALMOVMIN[0],ALCMPAL,6JNZSTART21 ;未到6,就显示MOVMIN[0],0JMPSTART22START21:JMPCALL_SHOWSTART22:MOVAL,HOUR[1];比较时钟个位是否到4INCALMOVHOUR[1],ALCMPAL,4JNZSTART6 ;未到4,就比较是否到10MOVAL,HOUR[0];到4,比较时钟十位是否到2CMP AL,2JNZCALL_SHOW;未到2就显示,否则,就清空时MOVHOUR[0],0MOVHOUR[1],0JMPCALL_SHOWSTART6:CMPAL,10;比较时钟个位是否到10JNZCALL_SHOW;未到10,就显示MOVHOUR[1],0MOVAL,HOUR[0]INCALMOVHOUR[0],ALJMP CALL_SHOWCALL_SHOW:CALLSHOW;显示CALLIfExit;判断是否退出,ZF=1无键按下,在此改变IFEXIT可以实现退出功能JNZSTART_EXITSTART7:JMPSTART5 ;无键盘按键按下,循环显示START_EXIT:JMPNEARPTREXIT ;8279初始化INIT8279PROCNEARpushdxpushaxMOVDX,CMD_8279;CMD_8279为写命令地址、读状地址MOV AL,34H ;可编程时钟设置,设置分频系数(20分频)OUT DX,ALMOV AL,10H ;8*8字符显示,左边输入,外部译码键扫描方式OUTDX,ALCALLINIT8279_1popaxpopdxRETINIT8279ENDPINIT8279_1PROCNEAR;清空LED再显示CALLCLEAR ;清显示MOV AL,90H ;从第一个数码管开始移位显示OUT DX,ALRETINIT8279_1ENDPCLEARPROCNEAR;清除LED显示MOVDX,CMD_8279MOV AL,0DEH ;清除命令OUT DX,ALWAIT1:INAL,DXTEST AL,80H ;显示RAM清除完毕吗?JNZ WAIT1 ;不等于80,就没有RETCLEARENDPSCAN_KEYPROCNEAR;检查是否有按键按下,若有则读出按键的值MOVDX,CMD_8279INAL,DX ;读状态READ_FIFO:ANDAL,7TOC\o"1-5"\h\zJZNO_KEY ;为7则无键按下READ:MOV AL,40HOUT DX,AL ;读FIFORAM(读键盘输入的信号之前,必用这条命令设置)MOVDX,DATA_8279IN AL,DXSTC ;有键JMP SCAN_KEY1NO_KEY:CLC ;无键按下,清CFSCAN_KEY1:RETSCAN_KEYENDPSCAN_KEY_CHPROCNEARMOVDX,CMD_8279INAL,DX;读状态ANDAL,7JZNO_KEY_CH_1 ;为7则无键按下MOVAL,40HOUTDX,AL;读FIFORAMMOVDX,DATA_8279INAL,DXCMPAL,0CAH;A键按下JNESCAN_KEY_B;不是ACALLINIT8279_1;把所有的值都清MOVHOUR[0],02hMOVHOUR[1],03hMOVMIN[1],09hMOVMIN[0],05hMOVSEC[0],03hMOVSEC[1],06hCALLSHOWJMPNO_KEY_CHNO_KEY_CH_1:JMPNO_KEY_CHSCAN_KEY_B:CMPAL,0CBH ;B键第一次按下,暂停;再按一次,重新开始计时JNESCAN_KEY_DCMPFLAG_B,0JEFLAGMOVFLAG_B,0JMPNO_KEY_CHFLAG:MOVFLAG_B,1JMPNO_KEY_CHSCAN_KEY_D: ;按下D键,则重置时CMPAL,0CDHJNE SCAN_KEY_ELEADI,HOURMOVCH,2SCAN_HOUR:CALLSCAN_KEYJNCSCAN_HOURCALLKEY_NUMSTOSBCALLINIT8279_1CALLSHOWDECCHJNZSCAN_HOURLEASI,HOURLODSBMOVAH,ALLODSBCMPAX,0204HJGEQQQ2CMPAL,0AHJGEQQQ2CALLINIT8279_1CALLSHOWJMPNO_KEY_CHQQQ2:CALLPRINTERRORCALLDL2SMOV AL,10HmovHOUR[0],ALMOV HOUR[1],ALCALL SHOWLEADI,HOURMOVCH,2JMPSCAN_HOURSCAN_KEY_E: ;按下E键,则重置分CMPAL,0CEH ;E键按下JNESCAN_KEY_FLEADI,MINMOVCH,2SCAN_MIN:CALLSCAN_KEYJNCSCAN_MINCALLKEY_NUMSTOSBCALLINIT8279_1CALLSHOWDEC CHJNZ SCAN_MINLEASI,MINLODSBMOVAH,ALLODSBCMPAX,0600HJGE QQQ3CMPAL,0AHJGE QQQ3CALLINIT8279_1CALLSHOWJMPNO_KEY_CHQQQ3:CALL PRINTERRORCALL DL2SMOV AL,10Hmovmin[0],ALMOV MIN[1],ALCALLSHOWLEADI,MINMOVCH,2JMPSCAN_MINSCAN_KEY_F: ;按下F键,则重置秒CMPAL,0CFH ;F键按下JNESCAN_CHLEADI,SECMOVCH,2SCAN_SEC:CALLSCAN_KEYJNCSCAN_SECCALLKEY_NUMSTOSBCALLINIT8279_1CALLSHOWDEC CHJNZ SCAN_SECLEASI,SECLODSBMOVAH,ALLODSBCMPAX,0600HJGE QQQ4CMPAL,0AHJGE QQQ4CALLINIT8279_1CALLSHOWJMPNO_KEY_CHQQQ4:CALLPRINTERRORCALLDL2SMOV AL,10HmovSEC[0],ALMOV SEC[1],ALCALL SHOWLEADI,SECMOV CH,2JMPSCAN_SECNO_KEY_CH:CLCSCAN_CH:RETSCAN_KEY_CHENDPPRINTERRORPROCNEAR;显示ERRORCALLINIT8279_1PUSHCXMOVCX,5LEASI,ERROREEE:LODSBCALLWRITE_DATALOOPEEEPOPCX;CALLDL2SRETPRINTERRORENDPKEY_NUMPROCNEAR;将按键转换为相应的键值ANDAL,3FHRETKEY_NUMENDPWRITE_DATAPROCNEARMOVDX,DATA_8279OUTDX,ALRETWRITE_DATAENDPSHOWPROCNEAR ;LED显示PUSHCXPUSHSIPUSHBXCALLINIT8279_1LEASI,HOURMOVCX,2SHOW_1:LODSBcmpal,10hjashow_2LEABX,LED_TABXLATCALLWRITE_DATALODSBXLATCALLWRITE_DATAMOVAL,0BFH ;显示横杠CALLWRITE_DATALOOPSHOW_1LODSBLEABX,LED_TABXLATCALLWRITE_DATALODSBXLATCALLWRITE_DATAshow_3:POPBXPOPSIPOPCXRETshow_2:callCALL_ERRORjmpshow_3SHOWENDPCALL_ERRORPROCNEAR;LED显示CALLINIT8279_1PUSHCXMOVCX,5LEASI,ERRORSTART_10:;清LEDLODSB(DF=0);指针加1CALLWRITE_DATALOOPSTART_10POPCXCALLDL2SCALLINIT8279_1retCALL_ERRORENDPIfExitPROCNEAR ;判断是否退出,本实验永不退出PUSHAXPUSHDXMOVAH,06HMOVDL,0FFHINT21HPOPDXPOPAXRETIfExitENDPinit8255procnearpushaxpushdxmovdx,CMD_8255moval,80H ;PC口输出outdx,alpopdxpopaxretinit8255endpinit8255_1procnearpushaxpushdxmovdx,CMD_8255moval,89H ;PC口输入outdx,alpopdxpopaxretinit8255_1endpDL1MSPROCNEARPUSHAXPUSHDXMOVDX,1 ;延时1msMOVAH,0FFH ;星研公司提供的软中断INT21HPOPDXPOPAXRETDL1MSENDPDL2SPROCNEARPUSHAXPUSHDXMOVDX,2000 ;延时2sMOVAH,0FFH ;星研公司提供的软中断INT21HPOPDXPOPAXRETDL2SENDPInitPCIPROCNEARMOVAH,00HMOVAL,03HINT10H ;清屏MOVAH,0B1HMOVAL,01HINT1AHCMPAH,0JZInitPCI2LEADX,msg0InitPCI1:MOVAH,09HINT21HJMPExitInitPCI2:MOVAH,0B1HMOVAL,02HMOVCX,Device_IDMOVDX,Vendor_IDMOVSI,0INT1AHJNCInitPCI3;是否存在StarPCI9052板卡LEADX,msg1JMPInitPCI1InitPCI3:MOVDI,PCIBAR3MOVAH,0B1HMOVAL,09HINT1AH;读取该卡PCI9052基地址JNCInitPCI4LEADX,msg2JMPInitPCI1InitPCI4:ANDCX,0FFFCHMOVIO_Bit8_BaseAddress,CXRETInitPCIENDPModifyAddressPROCNEARADDCMD_8279,CXADDDATA_8279,CXaddCMD_8255,CXADDPC0_ADD,CXRETModifyAddressENDP;启动IIC总线子程序START1PROCNEARMOVDX,CMD_8255 ;拉高SDAMOVAL,PC0_1OUTDX,ALNOPMOVDX,CMD_8255 ;拉高SCL,起始条件大于4.7usMOVAL,PC1_1OUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255 ;拉低SDA, 起始锁定时大于4usMOVAL,PC0_0OUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255 ;拉低SCL, 钳住总线,准备发数据MOVAL,PC1_0OUTDX,ALNOPRETSTART1ENDP;结束IIC总线子程序STOP1PROCNEARMOVDX,CMD_8255 ;拉低SDAMOVAL,PC0_0OUTDX,ALNOPMOVDX,CMD_8255 ;拉高SCL,发送结束条件的时钟信号MOVAL,PC1_1;结束总线时间大于4usOUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255 ;拉高SDA,结束总线MOVAL,PC0_1 ;保证一个终止信号和一个OUT DX,AL ;起始信号的空闲时间大于4.7usNOPNOPNOPNOPNOPRETSTOP1ENDP;发送应答信号子程序MACK1PROCNEARMOVDX,CMD_8255 ;拉低SDAMOVAL,PC0_0OUTDX,ALNOPNOPMOVDX,CMD_8255 ;拉高SCL,保持数据时间,即SCLMOVAL,PC1_1;为高时间大于4.7usOUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255 ;拉低SCLMOVAL,PC1_0OUTDX,ALNOPNOPRETMACK1ENDP;发送非应答信号子程序NMACK1PROCNEARMOVDX,CMD_8255 ;拉高SDAMOVAL,PC0_1OUTDX,ALNOPNOPMOVDX,CMD_8255 ;拉高SCL,保持数据时间,即MOVAL,PC1_1;SCL为高时间大于4.7usOUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255 ;拉低SCLMOVAL,PC1_0OUTDX,ALNOPNOPRETNMACK1ENDP;检查应答位子程序CACK1PROCNEARpushdxpushaxMOVDX,CMD_8255 ;拉高SDAMOVAL,PC0_1OUTDX,ALNOPNOPMOVDX,CMD_8255 ;拉高SCLMOVAL,PC1_1OUTDX,ALMOVBL,0MOVACK,BL ;把ACK置0,表示无应答NOPNOPcallinit8255_1MOVDX,PC0_ADD;读取SDA,判断SDA是否为1INAL,DXcallinit8255TESTAL,01HJNECEND ;PC0为1,即SDA为1,转移MOVBL,1 ;否则,置ACK为1,即有应答MOVACK,BLCEND:NOPMOVDX,CMD_8255 ;拉低SCLMOVAL,PC1_0OUTDX,ALNOPpopaxpopdxRETCACK1ENDP;发送字节子程序WRBYTE1PROCNEARpushcxMOVCH,08H ;发送字节位数WLP:RCLAL,1 ;取数据位pushaxJCWR1 ;为1写1,否则写0JMPWR0WLP1:DECCHpopaxJNZWLPNOPpopcxRETWR1: ;发送数据1MOVDX,CMD_8255 ;拉高SDAMOVAL,PC0_1OUTDX,ALNOPMOVDX,CMD_8255 ;拉高SCLMOVAL,PC1_1OUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255 ;拉低SCLMOVAL,PC1_0OUTDX,ALJMPWLP1WR0: ;发送数据0MOVDX,CMD_8255 ;拉低SDAMOVAL,PC0_0OUTDX,ALNOPMOVDX,CMD_8255 ;拉高SCLMOVAL,PC1_1OUTDX,ALNOPNOPNOPNOPNOPMOVDX,CMD_8255;拉低SCLMOVAL,PC1_0OUTDX,ALJMPWLP1WRBYTE1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖泊碳汇功能动态监测-洞察及研究
- 医学研究与实践杂志
- 生境修复技术-洞察及研究
- 郑州亚欧交通职业学院《英语拓展(英美文化)》2023-2024学年第二学期期末试卷
- 浙江工商大学杭州商学院《作物学实验》2023-2024学年第二学期期末试卷
- 岭南师范学院《代数学》2023-2024学年第二学期期末试卷
- 江苏科技大学苏州理工学院《国际关系原著》2023-2024学年第二学期期末试卷
- 烟台大学《民乐重奏合奏限民乐》2023-2024学年第二学期期末试卷
- 贵州师范学院《生物化学检验》2023-2024学年第二学期期末试卷
- 长垣烹饪职业技术学院《企业社工》2023-2024学年第二学期期末试卷
- 家长走进课堂:健康饮食知识与课件分享
- 口腔医院装修设计合同
- 2024年中考语文常考名著习题训练:《钢铁是怎样炼成的》
- “严而有度爱而不宠”班主任经验分享稿
- 南京聋人高级中学预科招生考试各学科考试主要内容及参考教
- 第4章我们生活的大地知识点清单-2024-2025学年浙教版七年级下册科学
- 批判性思维实践手册
- 医院培训课件:《多发性骨髓瘤》
- 西湖写景作文600字
- 电动车火灾安全培训课件
- 建筑项目招投标外文翻译外文文献英文文献
评论
0/150
提交评论