RS485直流电机转速控制器_第1页
RS485直流电机转速控制器_第2页
RS485直流电机转速控制器_第3页
RS485直流电机转速控制器_第4页
RS485直流电机转速控制器_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

合肥学院计算机科学与技术系课程设计报告2009〜2010学年第一学期课 程 微型计算机原理与接口技术课程设计名称 RS485直流电机转速控制器学生姓名阮林佳学号0704012042专业班级07计本(2)班指导教师龙夏老师、何立新老师2010年2月一、题意需求分析及解决方案1、题意需求分析本实验为基于RS485的直流电机转速控制器的设计。在实验中有俩台PC机,由主机控制从机上直流电机的转速,首先主机通过RS485发出控制命令,连发俩次,而在从机上,从机接受主机发来的控制命令,连续接受俩次后,将命令字进行比较,查看两者是否一致,若两者不一致,则主机,从机停止工作,若两者相同,则从机将继续执行,通过控制直流电机的速度来测调整后的速度并显示出来,最后根据预设的速度值和测得的速度值进行比较,若两者值一样或相差不大(在允许的误差范围内)就说明实验成功。RS485直流电机转速控制器。RS485总线上通行的是串行通信协议,可实现双机的串行通信。数据可在双机或多机的情况下通过把数据送到485总线上实现通信。在本实验中用到两台PC机和两台试验箱,通过主机把待传送的转速信息送到485总线上,通过RS485总线将转速信息传送给从机。直流电机由电动机、转子位置传感器和电子开关线路三部分组成。直流电源通过开关线路向电动机定子绕组供电,电动机转子位置由位置传感器检测并提供信号去触发开关线路中的功率开关元件使之导通或截止,从而控制电动机的转动。在本实验中需对电机进行调速控制,在调速电路中,主要采用时基电路LM555和脉宽调制器SG1525来完成,LM555用于产生一个占空比一定、且有固定频率的方波信号。SG1525为单片脉宽调制型控制器芯片,具有输出5.1V的基准稳压电源,误差放大器、振荡频率在100人400kHz范围内的锯齿波振荡器、软启动电路、关闭电路、脉宽调制比较器、RS寄存器以及保护电路等。电机的控制电压时模拟电压,在如果带输入的是数字电压需将数字电压转化为模拟电压。转速的控制需要测速和控速。通常采用反射式光电开关,通过计数转盘通断光电开关产生的脉冲,计算出转速。光电开关发射光,射到测量物体上,如果强反射,光电开关接收到反射回来的光,则产生高电平1;弱反射,光电开关接收不到反射回来的光,则产生弱电平0。通过计算一定时间内的脉冲个数计算出电机的转速。实验时需要知道如何解决以下问题:(1)RS485总线的协议是什么;(2)如何实现数据的收发(3)直流电机测速的原理是什么;(4)如何计算电机的实时转速;(5)如何实现电机的转速控制。2、解决问题的思路及方法(1)硬件部分结合题意要求以及实际需要,在硬件上提供解决问题的方案如下。首先要解决的是设定值的问题。主机设定初始转速,通过星研试验箱G6区的逻辑开关设定转速的设定值。再次是数据传送,主机需将设定的转速初始值传送给从机,用到串行通信模块即RS485,由于主机和从机两边要实现动态的收发,需两片485。在发送数据的时候,只是数据在485总线上,实际的传输还需要通过芯片来解决。本实验采用8251芯片,8251芯片可实现半双工串行通信。在确定485的收发状态时需要对MX485的使能端进行判断,通过8255的C口中的一个端口即可实现使能端的工作状态控制,因此用到了芯片8255。在接受时同样也要对MAX485的使能端口进行控制,因此用了两片8255。从机在接受到数据通过DA转换将数字电压转为模拟电压供给电机,实现电机的启转。测速模块用到光电测速,采用的是反射式光电开关,通过计数转盘通断光电开关产生的脉冲,计算出转速。脉冲的技术用到8253计时器定时器和8259中断控制。通过一定时间的定时测出脉冲的个数,经过计算得出电机的转速。转速显示模块,可采用8255或8279。8255的PA口和PB口和接LED的B,C口。但涉及到位选和段选。也可用8279直接将数据送数据口即可显示,在本实验中用的8279。综上所述列出硬件清单如下:硬件8255A827982518253光电开关8259逻辑开关LEDRS485主要功能控制MAX485的使能端口显示实时的速度,控制LED工作实现串行通信通过计数器对脉冲计数测量直流电机转速中断控制转速设定值显示设定速度和当前转速串行通信(2)软件部分软件应该具备以下几个主要部分:对光电开关的操作(初始化/启动,读写速度,速度转换/显示);对控制芯片8255A的控制和操作(数据读入,MX485使能端的控制)对通用控制芯片8279的操作(如8279的初始化,显示速度,清除显示等功能);对直流电机的操作(控制其加速或减速);通过对8251进行相关操作实现串行通信(在主机和从机两边各用一块8251芯片,通过8251将待传送的信息放到RS485总线上,实现串行通信。)另外还要设置一定的延时程序以满足不同芯片及元器件的工作时序;二、硬件设计1、选择芯片RS485RLDE6ADI图1血天RLDE6ADI图1血天4酣逻辑图T]GNDZlVcc(1) RS485在在本设计中的作用:RS485总线上通行的是串行通信协议,可实现双机的串行通信。数据可在双机或多机的情况下通过把数据送到485总线上实现通信。在本实验中用到两台PC机和两台试验箱,通过主机把待传送的转速信息送到485总线上,通过RS485总线将转速信息传送给从机。(2) RS485的功能分析、引脚定义及技术参数RO(引脚1):接收信号的输出引脚。可以把来自A和B引脚的总线信号,输出给单片机。是COMS电平,可以直接连接到单片机。RE(引脚2):接收信号的控制引脚。当这个引脚低电平时,RO引脚有效,MAX485通过RO把来自总线的信号输出到单片机;当这个引脚高电平时,RO引脚处于高阻状态。DE(引脚3):输出信号的控制引脚。当这个引脚低电平时,输出驱动

器无效;当这个引脚高电平时,输出驱动器有效,来自DI引脚的输出信号通过A和B引脚被加载到总线上。是COMS电平,可以直接连接到单片机。DI(引脚4):输出驱动器的输入引脚。是COMS电平,可以直接连接到单片机。当DE是高电平时,这个引脚的信号通过A和B脚被加载给总线。GND(引脚5):电源地线。A(引脚6):连接到RS485总线的A端。B(引脚7):连接到RS485总线的B端。Vcc(引脚8):电源线引脚。电源4・WVccW5・。25V75V2、通信控制芯片8251RESET饥CLKRD-WH.GS控制

逻辑发送器及发送控制>TxRDYTxETzC状态.发送数据/命令RESET饥CLKRD-WH.GS控制

逻辑发送器及发送控制>TxRDYTxETzCDTRir*SYNDEDTRir*SYNDERxRDYRxC图T.58251A的內部结构(1) 8251在本设计中的作用:主机:8251A作为发送器使用,主机上R0和DI分别接8251的发送控制端和接受控制端RxD、TxD,通过设置控制命令字控制是否发送准备好。从机:8251A作为接收器使用,从机上R0和DI分别接8251的发送控制端和接受控制端RxD、TxD,通过设置控制命令字和读取状态字控制是否准备好接受了。(2) 8251的功能分析:当8251A工作于异步方式时,若允许接收和准备好接收数据时,它监视RXD线,在无字符传送时,RXD线上为高电平,当发现RXD线上出现低电平时,即认为它是起始位,就启动一个内部计数器,当计数器计到一个数据位宽度的一半(若时钟脉冲频率为波特率的16倍时,则为计数到第8个脉冲)时,又重新采样RXD线,若其仍为低电平,则确认它为起始位,此后在就作用下(若喙频率为波特率的16倍时,则每隔16个就采样一次RXD线),把RXD线上的数据送至移位

寄存器,经过移位,又经过奇偶校验和去掉停止位后,就得到了转换的并行数据,再传送给接收数据缓冲器,同时输出RXRDY有效信号,通知CPU取走字符。在同步方式时,接收器监视RXD线,每出现一个接收时钟,采样一位数据到接收数据移位寄存器中,构成并行字节,并送到接收数据缓冲器中,再与含有同步字符(由程序设定)的寄存器相比较,看是否相等,若不等,重复上述过程。当找到同步字符后(若规定为两个同步字符,则出现在RXD线的两个相邻字符必须与规定的字符相同),则置SYNDET信号,表示已找到同步字符。在找到同步字符后,每隔一个接收时钟米样一次RXD线上的数据位,送到接收数据移位寄存器中,经移位并按规定的位数转换成并行字节数据,再把它并行送至接收数据缓冲器中,同时输出RXRDY有效信号,通知CPU取走字符。(3)8251的技术参数:由五大部分组成:1) 数据总线缓冲器:它由状态缓冲器、发送数据/命令缓冲器和接收数据缓冲器组成,是三态双向8位缓冲器,用作8251A和微机系统数据总线之间的接口。其中状态缓冲器和接收数据缓冲器分别用来存放CPU从8251A读取的状态信息和数据,发送数据/命令缓冲器用来存放CPU写入8251A的数据/控制字。2) 接收器:接收RXD线上的串行数据并按规定的格式把它转换为并行数据,存放在接收数据缓冲器中。其接收数据的速率取决于从就端输入的接收时钟频率。当8251A工作于异步方式时,若允许接收和准备好接收数据时,它监视RXD线,在无字符传送时,RXD线上为高电平,当发现RXD线上出现低电平时,即认为它是起始位,就启动一个内部计数器,当计数器计到一个数据位宽度的一半(若时钟脉冲频率为波特率的16倍时,则为计数到第8个脉冲)时,又重新采样RXD线,若其仍为低电平,则确认它为起始位,此后在就作用下(若疏频率为波特率的16倍时,则每隔16个西疋采样一次RXD线),把RXD线上的数据送至移位寄存器,经过移位,又经过奇偶校验和去掉停止位后,就得到了转换的并行数据,再传送给接收数据缓冲器,同时输出RXRDY有效信号,通知CPU取走字符。在同步方式时,接收器监视RXD线,每出现一个接收时钟,采样一位数据到接收数据移位寄存器中,构成并行字节,并送到接收数据缓冲器中,再与含有同步字符(由程序设定)的寄存器相比较,看是否相等,若不等,重复上述过程。当找到同步字符后(若规定为两个同步字符,则出现在RXD线的两个相邻字符必须与规定的字符相同),则置SYNDET信号,表示已找到同步字符。在找到同步字符后,每隔一个接收时钟米样一次RXD线上的数据位,送到接收数据移位寄存器中,经移位并按规定的位数转换成并行字节数据,再把它并行送至接收数据缓冲器中,同时输出RXRDY有效信号,通知CPU取走字符。3) 发送器要发送数据(字符)由CPU送到发送数据缓冲器中,再由发送缓冲器并行传送到发送数据移位寄存器中。在异步传送方式时,发送器先在串行数据字符前加上起始位,并根据约定的要求加上校验位和停止位,然后在斑作用下,由TXD线一位一位串行发送出去。

在同步方式时,发送器在准备发送的数据前面先插入一个或两个同步字符在初始化时,由程序设定),在数据块的每个字符后,插入奇偶校验位,然后在诧作用下,将数据一位以为地由TXD线发送出去。不论是同步还是异步,只有当操作命令字中的TXEN(允许发送)为1且陀(准许发送)引脚为低电平时,发送器才能发送数据。4)读/写控制逻辑和调制解调控制电路读/写控制电路用于CPU对8251A的I/O缓冲器进行读/写控制,调制解调控制电路用于8251A与MODEN或外设之间的通信联络的控制。衾9.1 8251A1^/写攻能衾CSRD■WR功能0001CPU^..8251A读数据010'1CFU:^垃5认读状态001CFU写数据到^51A011CPU写命等到^251A1XXX无操作模式寄存器的格式模式寄存器其具体的格式如图7.7所示。模式字是在对8251A进行初始化时,用程序命令写入且只需写一次。校方式数辽位00据竹位0101位7位1010数&位1111图7.7模式寄存誰的格式01双同歩字符11单同步字符 丨00无效毅£1不校验校方式数辽位00据竹位0101位7位1010数&位1111图7.7模式寄存誰的格式01双同歩字符11单同步字符 丨00无效毅£1不校验验D1奇校验1位停止位1位半停止位2位停止位11偶校验汉1外同歩=xo内同歩ESD5D+D3D201XI10X1611XG4DiD0异步波特系数培控制寄存器的格式控制字是在模式字之后写入,用来控制8251A的工作,使其处于规定的状态

以及准备发送或接收数据,可进行多次写入操作。其具体格式如图7.8所示。控制字和模式字共用一个奇地址端口,且又无特征标志,8251A是根据写入的先后顺序来加以区分的,即先写入的是模式字,后写入的是控制字。接收允许1允讦0禁止出错复位1复位错误标志內部复位1825±A接收允许1允讦0禁止出错复位1复位错误标志內部复位1825±A內部复位发送断点字爲1迫使TzD为底0正常工作数据錚端准备好1迫使D1R输出0请求发送1迫使尺巧输出©ENIRRTSERSBRK1进入搜索右式1进行SYWC搜索发送允许1允许0禁止状态寄存器用来存放8251A的状态字,用来反映8251A的状态信息,可供CPU读取查询,其具体格式如图7.9所示。DSR:数据设备准备好标志。DSR为1时, 引脚为低电平。SYNDET:同步标志,和SYNDET引脚的电平相同。FE:帧格式错误标志,为1时,帧格式出错。OE:溢出标志,为1时,溢出错误。即接收缓冲器内的字符尚未被:PU取走又有新的字符装入。PE:奇偶错标志,为1时,表明有奇/偶错。FE、0E和PE都由控制字中的ER位清除。TXE:发送缓冲器空标志,和TXE引脚的电平相同。RXRDY:接收准备好标志,和RXRDY引脚的电平相同,为1时,表示数据输入缓冲器已收到字符,CPU可以取走数据。TXRDY:发送准备好标志,为1时,表示数据输出缓冲区为空。此状态位不与TXRDY引脚相同,它不受CTS和TXE的影响。3、选择芯片DAC0832数模转换器⑴芯片DAC0832在本设计中的作用DAC0832在设计中的作用是将8086送来的8位数字量化成模拟电流量,在设计中需将数字信号转换为模拟信号,故选取DAC0832数模转换器。DAC0832的功能分析DAC0832是8位数/模转换芯片,输入数字量具有双缓冲功能,可以工作在双缓冲,单缓冲或直接输入三种方式。直接输入方式是将8086送来的8位数据量直接送入数/模转换器,不进行锁存;单缓冲只锁存一次数据(即80856送来的数据量进行锁存);双缓冲方式的工作原理:输入寄存器经过总线收发器与数据总线连接,当ile,cs和WT7有效时,8位数据量被打入输入寄存器,当XFET和芫有效时,输入寄存器中数据送至dac寄存器并输出,则将这个数据锁存WR2在DAC寄存器中,并开始转换。本次设计中采用的是直通方式。DAC0832的技术参数DAC0832芯片采用CMOS工艺,四象限乘法型DAC与微机兼容,数据输入能与双缓冲,单缓冲或直接缓冲通过三种方式工作。主要参数为:转换时间lus分辨率8位功耗20mW单一工作电源+5V〜+15V电流建立时间1线性度8,9或10位增益温度系数0.0002%usFS/°CDAC0832主要技术参数在此实验箱中的DAC0832芯片中包含有运算放大器,用来将电流信号转换成电压信号量,并且能够放大信号量。成电压信号量,并且能够放大信号量。4、选择74LS138译码器⑴芯片74L138译码器在本设计中的作用扫描计数器采用编码工作方式⑵芯片74L138译码器的功能分析74LS138是3/8译码器,即对3个输入信号进行译码。得到8个输出状态。G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。G1高电平有效。A,B,C为译码信号输出端,Y0~Y7为译码输出端,低电平有效。

数据输出勒选择 丸汴输出74LS138数据输出勒选择 丸汴输出74LS138功能表74LS138译码器的技术参数极限值电源电压 7V输入电压74LS138 7V工作环境温度74LS138 0〜70°C贮存温度 一65〜150C5、、可编程中断控制器8259A芯片8259A在本设计中的作用本设计中用于中断源的判断,计算转速芯片8259A的功能分析.8259A的主要特性微机系统中,可以使用8259A扩展外部中断,Intel8259A可编程中断控制器,主要有以下功能:(1)1片8259A能管理8级中断,通过级联用9片8259A可以构成64级主从式中断系统。⑵每一级中断可以屏蔽或允许。⑶中断响应周期,8259A可提供相应的中断类型号。⑷编程使8259A工作在多种不同的方式。.8259A的内部结构与引脚信号⑴数据总线缓冲器8位、双向、三态,是8259A与CPU之间的数据接口。D0〜D7直接与CPU数据总线的低8位连结。⑵读/写控制逻辑CS接高位地址的译码输出A0:常常与地址信号线A0相连。RD,WR与CPU的RD,WR相连,低平有效。CPU通常利用:OUT指令,WR与A0配合写入有关的控制字IN指令,RD与CS,A0配合读出8259A内部有关寄存器的内容。⑶中断请求寄存器IRR8位,若IRi有效(“1”,),对应位置“1”,直到IRi得到响应。因此,IRR记录外中断源IRi的请求信息。⑷中断服务寄存器ISR8位,当IRi得到响应时,对应位置“1”。ISR记录正在处理的IRi,当中断嵌套时,可能多位置“1”。因此,ISR记录CPU对IRi的响应情况。⑸中断屏蔽寄存器IMR8位,某位置“1”,对应IRi禁止产生中断。因此,IMR控制是否对IRi进行屏蔽操作。⑹优先权电路由IRR和PR的情况,向8259A其它部件发出控制信息。向CPU发出INT信号,接收CPU信号⑻级联缓冲/比较器可以实现8259A的级联,扩展外中断。.8259A的中断处理过程下面以8259A单片使用为例,说明其中断处理过程。⑴当一条或多条中断请求线IR0〜IR7变高时,设置相应的IRR位。⑵PR对中断优先权和中断屏蔽寄存器的状态进行判断之后,如某中断优先权最高且为允许中断状态,就向CPU发高电平信号INT,请求中断服务。⑶CPU响应中断时,送回应答信号INTA。8259A接到来自CPU的第一个信号INTA时,当前中断服务寄存器(ISR)中相应位置位,并把IRR中相应位复位。同时,8259A准备向数据总线发送中断类型号。⑸在8259A发送中断类型号的后一个INTA脉冲期间,如果是在AEOI(自动结束中断)方式下,在这个INTA脉冲结束时复位ISR的相应位。在非自动中断结束方式下,ISR相应位要由中断服务程序结束时发出的EOI命令来复位。.8259A的工作方式8259A有多种工作方式,这些工作方式可以通过初始化命令字(ICW1~ICW4)和操作命令字(OCW1~OCW3)来设置。⑴引入中断请求的方式边沿触发方式。以上跳沿向8259A请求中断,上跳沿后可一直维持高电平,不会再产生中断。电平触发方式。以高电平申请中断,但在响应中断后必须及时清除高电平,以免引起第二次误中断。中断查询方式。外设通过8259A申请中断,但8259A却不使用INT信号向CPU申请中断,CPU用软件查询确定中断源,并为其服务⑵连接系统总线的方式在大系统中,要求数据总线有总线缓冲器。8259A与这种带总线缓冲器的系统总线连接的方式称缓冲器方式。在小系统中,则8259A不需要总线缓冲器而是将其直接接至数据总线°8259A与这种不需总线缓冲器而直接连到系统总线的方式称非缓冲器方式。⑶屏蔽中断源的方式普通屏蔽方式。利用操作命令字OCW1,使屏蔽寄存器IMR中的一位或几位置1来屏蔽一个或几个中断源的中断请求。若要开放某一个中断源的中断请求,则将IMR中相应的位置0。特殊屏蔽方式。在某些场合,在执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式。它可通过OCW3的D6D5=11来设定。⑷优先级排队的方式全嵌套方式。在此种方式下中断优先级按0~7顺序进行排队,只允许中断级别高的中断源去中断中断级别低的中断服务程序。特殊全嵌套方式。它和全嵌套方式基本相同,所不同的是在特殊全嵌套方式下,当执行某一级中断服务程序时,可响应同级的中断请求,从而实现对同级中断请求的特殊嵌套(8259A级联使用时,某从片的8个中断源对主片来说,可以认为是同级的)。特殊全嵌套方式用于多片级联。优先级自动循环方式。在这种方式下,优先级顺序不是固定不变的,一个设备得到中断服务后,其优先级自动降为最低。其初始的优先级顺序规定为IR0,IR1,…,IR7。该方式用在系统中多个中断源优先级相等的场合。优先级特殊循环方式。这种方式与优先级自动循环方式唯一的区别是,其初始的优先级顺序不是固定IR0为最高,然后开始循环,而是由程序指定IR0~IR7中任意一个为最高优先级,然后再按顺序自动循环,决定优先级。⑸结束中断的处理方式自动中断结束方式。在中断服务程序中,中断返回之前,不需发中断结束命令就会自动清除该中断源所对应的ISR位(实际上在CPU发第二个信号时,8259即自动消除ISR中的对应位)。这种方式用在多个中断不会嵌套的系统中。非自动中断结束方式。在中断服务程序返回之前,必须发中断结束命令才能使ISR中的当前服务位清除。5).8259A的初始化命令字8259A初始化编程时,有四个初始化命令字ICW(InitialiationCommandWord),即ICW1〜ICW4;8259A工作期间,有三个操作命令字0CW(0perationCommandWord),即OCW1〜0CW3。8259A只有两个端口地址,A0=0偶地址端口/A0=1奇地址端口。因此,对8259A读/写操作时,要注意控制字:写入的端口地址,写入的顺序,有关的标志位

⑴ICW1(IRi触发方式,是否单片使用,是否写入ICW4)A0D7D6D5D4D3D2D1D00XXX1标记位LTIMXSNGICW4是否写入ICW4IC4=1,要写入ICW4IC4=0,不写入ICW4,即ICW4规定的位全为0⑵ICW2(中断类型号的高5位)A0D7D6D5D4D3D2D1D01T7T6T5T4T3XXX[Ri对「应中断类型号的高5位(中断类型号的低3位由8259A自动编码产生)设置中断向量号T7〜T3为中断向量号的高5位低3位由8259A自动确定:IR0为000、IR1为001、……、IR7为111⑶ICW3(级联时,主从芯片的级联引脚)若ICW1中SNGL=1不写入ICW3=0写入ICW3D7D6D5D4D3D2D1D0S7/S6/S5/S4/S3/S2/S1/S0/ID7ID6ID5ID4ID43ID2ID1ID0级连命令字主片8259A:Si=1对应IRi接有从片;否则IRi没有连接从片从片8259A:ID0〜ID2编码说明从片INT引脚接到主片哪个IR引脚(1)写给主片的ICW3⑷ICW4A0D7D6D5D4D3D2D1D01000SFNMBUFM/SAEOI1D7,D6,D5为标志位,D0为1表示用于8088/8086系统SFNM:规定8259A中断的嵌套方式SFNM=0正常的完全嵌套方式=1特殊的完全嵌套方式(单片使用时,两种方式一样。)6.8259A的操作命令字⑴OCW1(中断屏蔽操作命令字)设置或清除IMR的各个位。D7D6D5D4D3D2D1D0M7M6M5M4M3M2M1M0屏蔽命令字内容写入中断屏蔽寄存器IMRDi=Mi对应IRi,为1禁止IRi中断;为0允许IRi中断。各位互相独立。⑵OCW2(优先权循环方式和中断结束方式操作命令字)D7D6D5D4D3D2D1D0RSLEOR00L2L1L0R、SL和EOI配合使用产生中断结束EOI命令和改变优先权顺序L2〜L0的3位编码指定IR引脚⑶0CW3(特殊屏蔽方式和中断查询方式操作命令字)D7D6D5D4D3D2D1D00ESMMSMM01PRRRISESMM、SMM设置中断屏蔽方式P、RR和RIS规定随后读取的状态字含义7.8259A查询字D7D6D5D4D3D2D1D01————W2W1W0中断位I位为1,有外设请求中断W2〜W0的编码当前中断请求的最高优先级6、键盘显示接口芯片8279A8279A在本设计中的作用在本设计中用8279A芯片控制键盘输入和LED显示。主机和从机分别都要用到。主机用于输入控制命令字,从机用于输入预设速度值和显示测得的转速值。8279A的功能分析、8279A主要特性8279A芯片是一种通用的可编程序的键盘/显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。可与任何8位机接口。8279A芯片包括键盘输入和显示输出两个部分。若采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点.当今已成为设计计算机应用系统,特别是实时性较高的测控系统的首选器件之一。、8279A的内部结构图中,IRQ:中断请求输出线,DB0~DB7:双向数据总路线(传送命令、数据、状态),西、厩:读写控制输入端,RESET:复位输入端,CLK:时钟输入端,霁:片选,C和/D(A0):片内寄存器选址,0UTA0~A1、OUTB0~B3:8位显示输出端,EB:熄灭显示输出端,SL0~SL3:公用扫描输出线,RL0~RL7:键盘回馈输入线,SHIFT:抵挡键输入线,CNTL/STB:控制/选通输入线。另外,8279的键盘接口部分内部有一个8X8位先进先出的堆栈(FIFO),用来存放键盘输入代码,显示DB03DB038279A的内部结构器接口部分内部有一个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〜DO为命令的控制位。CPU对8279写入的命令数据为命令字,读出的数据为状态字。8279共有八条命令,其功能及命令字格式分述如下。(1)键盘/显示方式设置命令字命令格式:D7D6D5D4D3D2D1DOOOODDKKK其中:D7、D6、D5=000为方式设置命令特征位。DD(D4、D3):用来设定显示方式,如表2-1所示。D4D3显示方式008个字符显示,左端入口0116个字符显示,左端入口108个字符显示,右端入口1016个字符显示,右入口显示方式选择所谓左入口,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,则是显示位置从最右一位(最低位)开始,以后逐次输入显示字符时,已有的显示字符依次向左移动。KKK(D2、DI、DO):用来设定七种键盘/显示扫描方式,如表2-2所示。(2)时钟编程命令命令格式D7O其中:D7D6O(2)时钟编程命令命令格式D7O其中:D7D6OD6、D5=OO1为时钟命令特征位。D51D4PD3PD2PD1PDOPD2D1D0键盘/显示扫描方式000编码扫描键盘,双键锁定001译码扫描键盘,双键锁定010编码扫描键盘,N键轮回011译码扫描键盘,N键轮回100编码扫描传感器矩阵101译码扫描传感器矩阵110选通输入,编码显示扫描111选通输入,译码显示扫描键盘/显示扫描方式PPPPP(D4、D3、D2、DI、DO)用来设定外部输入CLK时钟脉冲的分频系数N。N取值范围为2〜31。如CLK输入时钟频率为2MHZ,PPPPP应被置为10100(N=20),才可获得8279内部要求的100KHZ的时钟频率。(3)读FIFO/传感器RAM命令命令格式:D7D6D5D4D3D2D1D00 1 0AIXAAA其中:D7、D6、D5=010为读FIFO/传感器RAM命令特征位。该命令字只在传感器方式时使用。在CPU读传感器RAM之前,必须用这条命令来设定所读传感器RAM中的地址。AAA(D2、D1、D0)为传感器RAM中的八个字节地址。AI(D4)为自动增量特征位。当AI=1时,每次读出传感器RAM后地址自动加1使地址指向下一个存储单元。这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。在键盘工作方式中,由于读出操作严格按照先入先出顺序,因此,不需使用这条命令。(4) 读显示RAM命令命令格式:D7D6D5D4D3D2D1D0011AIAAAA其中:D7、D6、D5=011为读显示RAM命令字的特征位。该命令字用来设定将要读出的显示RAM地址。AAAA(D3、D2、DI、D0)用来寻址显示RAM中的存储单元。由于位显示RAM中有16个字节单元,故需要4位寻址。AI(D4)为自动增量特征位。AI=1时,每次读出后地址自动加1,指向下一地址。(5) 写显示RAM命令命令格式:D7D6D5D4D3D2D1D0100AIAAAA其中:D7、D6、D5=100为写显示RAM命令字的特征位。在写显示RAM之前用这个命令字来设定将要写入的显示RAM地址。AAAA(D3、D2、D1、D0)为将要写入的显示RAM中的存储单元地址。AI(D4)为自动增量特征位。AI=1时,每次写入后地址自动加1,指向下一次写入地址。(6) 显示禁止写入/消隐命令命令格式:D7 D6 D5 D4D3 D2D1 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(DI、DO)为消隐设置位。用于对两组显示输出消隐。若BL=1,对应组的显示输出被消隐。当BL=O,则恢复显示。(7)清除命令命令格式:D7 D6D5D4D3D2D1 DO1 1 O CDCD CDCF CA其中:D7、D6、D5=110为清除命令特征位。清除显示RAM方式如表2-3所示。D4D3D2清除方式10X将全部显示RAM清为00H110将全部显示RAM置为20H,A组输出0010,B组输出0000111将全部显示RAM置为FFH0XXD0=0不清除,D0=1按上述方法清除显示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)结束中断/错误方式设置命令命令格式:D7 D6 D5 D4 D3 D2 D1 D01 1 1 E X X X X其中:D7、D6、D5=lll为该命令的特征位。此命令有两种不同的作用。作为结束中断命令。在传感器工作方式中使用。每当传感器状态出现变化时,扫描检测电路就将其状态写入传感器RAM,并启动中断逻辑,使INT变高,向CPU请求中断,并且禁止写入传感器RAM。此时,若传感器RAM读出地址的自动递增特性没有置位(AI=0),则中断请求INT在CPU第一次从传感器RAM读出数据时就被清除。若自动递增特征已置位(AI=1),则CPU对传感器RAM的读出并不能清除INT,而必须通过给8279写入结束中断/错误方式设置命令才能使INT变低。因此,在传感器工作方式中,此命令用来结束传感器RAM的中断请求。作为特定错误方式设置命令。在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=l),则8279将以一种特定的错误方式工作。这种方式的特点是:在8279的消抖周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和禁止写入FIFORAM。上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。因此,写入命令字时唯一的要求是使数据选择信号A0=1。5、8279的状态字及其格式8279的FIFO状态字,主要用于键盘和选通工作方式,以指示FIFORAM中的字符数和有无错误发生。其格式为:D7 D6 D5 D4D3D2D1D0DU S/E O UFNNN其中:Du(D7)为显示无效特征位。当Du=1表示显示无效。当显示RAM由于清除显示或全清命令尚未完成时,Du=1,此时不能对显示RAM写入。S/E(D6)为传感器信号结束/错误特征位。该特征位在读出FIFO状态字时被读出。而在执行CF=1的清除命令时被复位。当8279工作在传感器工作方式时,若S/E=1,表示传感器的最后一个传感器信号已进入传感器RAM;而当8279工作在特殊错误方式时,若S/E=1则表示出现了多键同时按下错误。O、U(D5、D4)为超出、不足错误特征位。对FIFORAM的操作可能出现两种错误:超出或不足。当FIFORAM已经充满时,其它的键盘数据还企图写入FIFORAM,则出现超出错误,超出错误特征位O(D5)置1;当FIFORAM已经置空

时,CPU还企图读出,则出现不足错误,不足错误特征位U(D4)置1。F(D3)表示FIFORAM中是否已满标志,若F=1表示已满。NNN(D2、D1、DO)表示FIFORAM中的字符数据个数。6)、数据输入/输出格式对8279输入/输出数据不仅要先确定数据地址口,而且数据存放也要按一定格式,其格式在键盘和传感器方式有所不同。(1)键盘扫描方式数据输入格式键盘的行号、列号及控制键格式如下:键盘的行号、列号及控制键格式控制键CNTL、SHIFT为单独的开关键。CNTL与其它键连用作特殊命令键,SHIFT可作上、下挡控制键。传感器方式数据输入格式此种方式8位输入数据为RLO〜RL7的状态。格式如下:D7 D6D5D4D3D2D1DORL7 RL6RL5RL4RL3RL2RL1RLO(3)8279A的技术参数symbolParameterMinMaxUnitTestConditionsVIL1InputLowVOltageForReturnLine—0.51.4VVIL2InputLowVOltageForAllOther—0.50.8vVIH1InputHighVoltageForReturnLines2.2vVIH2InputHighVoltageForAllOthers2.0vVolOutputLowVoltage0.45v(note1)□Outputhighvoltageoninterruptline3.5v(note2)VOH2OtherOutputs2.4IOH=-400pA8279-5-100pA8279IIL!InputCurrentOnShift,ControlAndReturnLines+10-100pApA临INIIL2InputLeakageCurrentOnAllOthers±10pAV=Vto0VIN CCIoflOutputFloatLeakage±10pAV=Vto0.45VOUT CCIccPowerSupplyCurrent120mACINInputCapacitance10pFf=1MHUnmeasured

COUTTOutputCapacitance20pFPinsReturnedVfiS^8279主要性能参数7、 十六进制小键盘十六进制小键盘在本设计中的作用由于本设计需要向系统输入一个转速设定值,所以键盘起到了输入设定值的作用。4X4键盘矩阵图(2)小键盘的电路结构右图显示的是小键盘的电气结构,右图可以看出只有当行线和列线逻辑值相同时,按键才会显示正确的值4X4键盘矩阵图第。行第1行第.2狞第&行8、七段LED显示器七段LED显示器在本设计中的作用本实验设计用7段LED显示器的左四位来显示电机转速的设定值,剩下四位来显示实时的转速值,其中转速设定值的显示方法是从右到左依次显示设定值的低位到高位;而实时的温度值则采用动态的效果,能准确地反映电机转速的变化情况。七段LED显示器功能分析七段LED显示器可以控制在哪几个数位上,哪几个发光二极管亮,从而显示数字。其工作原理:如果发光二极管共阳极,则输入为0时亮,为1时不亮,反之如果发光共阴极,则输入1时亮,0时不亮。发光二极管时一种外加电压超过额定电压时发生击穿,并因此能产生可发光的器件,数码显示器通常由多个发光二极管来组成七段或八段笔画显示器,当段组合发光时,便会显示某一个数码管或字符,七段代码的各位用作a—g和DP的输入,本实验中采用共阳极接法。(3)七段LED显示器主要技术参数注:此时的驱动电流为25mAPCWLFVrIrIfP对应变量散射颜色BT23570255三1.5<2.5200SEL-10红BT144100405三0.5<2.5565绿BT134100405三0.5<2.5585蓝七段LED显示器的技术参数⑷七段LED显示器的真值表显示字型dpgfedcbA共阴极字形码共阳极字形码0001111110x3F0xC0

1000001100x060xF92010110110x5B0xA43010011110x4F0xB04011001100x660x995011011010x6D0x926011111010x7D0x827000001110x070xF88011111110x7F0x809011011110x6F0x90A011101110x770x88b011111000x7C0x83C001110010x390xC6d010111100x5E0xA1E011110010x790x86F011100010x710x8ELED真值表9、可编程的定时/计数器8253(1)芯片8253在本设计中的作用8253具有定时中断,定时采集或者延时一段时间实行某种控制,等等。本次实现需要8253对脉冲进行定时计数,测量电机转速。(2)芯片8253的功能分析8253既可作为定时器,又可作为计数器。它具有三个完全独立操作的16位计数器,每一组计数器可以使用软件加以设定内部6种特定的工作方式。一旦8253设定某种工作方式并载入计数器值后,便能够独立工作。计数完后自动产生信号输出,完全不用CPU额外控制。8253工作在方式2,作为频率发生器使用时,它分频工作的功能:CLK引脚获得初始频率,此时若GATE为高电平,十六位计数初值寄存器中的数据装入计数执行单元CE中,它对CLK脉冲计数,每出现一个CLK脉冲,计数对执行单元CE的值减小。当减为0时,通过OUT输出指示信号,表明计数执行单元已为0。这时OUT输入的信号频率是CLK频率的1/N。这样就达到了分频的目的。8253的主要性能为:内有三个独立的16位计数器,工作方式可编程控制,计数脉冲频率为0MHZ-2.6MHZ,可以按二进制或BCD码计数,使用单一+5电源芯片8253的技术参数参数名称符号测试条件最大规范值最小规范值输入低电平电压VIL0.8-0.5V输入高电平电压VIAVcc+0.52.2V输出低电平电压VOLVin=Vcc--0V0.45

输出高电平电压VOHVout=Vcc--O.45V2.4V输入负载电流IIL+/-1O输出浮动漏电流IOFL+/-1O电源电流Icc1408253的技术参数输入低电压的范围是-0.5—0.8,输出低电压的范围0.45—2.4,输入高电压的范围是2.2—Vcc+0.5。而测试条件均为Vin=Vcc—OV,Vout=Vcc—0.45V11、硬件逻辑总图及说明(1)主机接线图:说明:各芯片的片选都是根据其偏移地址范围确定的;RS485的RE/DE端接GND端表示485处于发送状态;8253的OUT0接8251的TxC端,表示8253给8251提供相应的发送时钟;2)从机接线图:(逆转90°)模块及其他一些初始化程序和中断子程序。总的程序设计思路是首先通过设置预设转速,利用星研试验箱的逻辑开关通过8255将转速信息读取到PC中,通过8251将转速信息送到485总线上。从机接收到转速信息后将转速进行相关的处理后经DA转换送直流电机驱动口,电机转动同时LED显示电机实时转速。利用软件实现将这两个部分转速进行比较,当测得的转速值低于用户所设定的值时则有控制程序发出指令将DAC0832缓冲区数据增加,此时实现“电机”的加速功能;反之,同样,可实现电机减速功能,最终都能达到所需要控制到的转速。这样实现RS485直流电机转速控制器的设计。2、程序流程图:

继续输入?退出两次接收一样?测量并显示电机转速,与设定值有差异逐步调整,增加或减小送DA缓冲区的数值来调整转速对数据进行D7继续输入?退出两次接收一样?测量并显示电机转速,与设定值有差异逐步调整,增加或减小送DA缓冲区的数值来调整转速对数据进行D7清零,分别将低四位送转速个位,高四位送转速十位D/A转换驱动电机转动初始化0832初始化8259再次接收3)数模转换子模块0832控制口地址VData0832—>AL▼转换电压送输出口RET⑷显示转速模块 [开始数码管1,2位上显示DA缓冲区的值(实时转速)数码管5,6位上显示设定转速值(十进制)(5)转速控制子程序流程图YNYNYCF=O?NNYY返回当前转速=设置转速?当前转速>设置转速?开始Data_0832+=设置转速一当前转速A=当前转速一设置转速Data_0832—=AData_0832=0FFHData_0832=10(6)8253初始化子程序流程图(7)8259初始化子程序流程图(9)接收到的数值处理DWW_8253_TOW_8253_CDWW_8253_TOW_8253_CDW00E0HDW00E3H3、控制程序主机:.MODELTINYPCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)Vendor_IDEQU10EBH ;厂商ID号Device_IDEQU 8376 ;设备ID号.STACK100.DATAIO_Bit8_BaseAddressDW?msgO DB 'BIOS不支持访问PCI$'msg1 DB '找不到StarPCI9052板卡$'msg2 DB '读8位I/O空间基地址时出错$'msg_input DB '请输入数字:','$'msg_over DB '发送完毕!','$'CTL_ADDR DW00F1H ;8251A的控制字或状态字DATA_ADDR00F0H ;8251A数据端口CMD_8279 DW00B1H;8279命令字、状态字地址(片选CS5:0B0H--0BFH)DATA_8279 DW00B0H ;8279读写数据口的地址NUMBERDB?,? ;存放按键的对应值NUM DW?.CODESTART:MOVAX,@DATAMOVDS,AXNOPMOVSI,0FFFFHMOVCX,2CALLInitPCICALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址CALLInit8279 ;初始化8279CALLINIT_8253CALLINIT_8251LEADX,msg_inputMOVAH,9INT21HSTART1:MOVNUM,SICALLSCAN_KEYnn:CALLSENDBYTEMOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,2INT21HLEADX,msg_overMOVAH,9INT21HJMPnnJMPEXIT;8279初始化Init8279PROCNEARMOVDX,CMD_8279;CMD_8279为写命令地址、读状地址MOVAL,34H ;可编程时钟设置,设置分频系数(20分MOVMOV频,100kHZ);00110100B,001为时钟频率特征位OUTDX,ALMOVAL,0;8*8字符显示,左边输入,外部译码键扫描方式,双键锁定;00000000B,000为设置键盘及显示方式的命令特征码OUTDX,AL;CALLCLEAR;清显示MOVAL,90H ;写显示RAM命令字:10010000从第一个数码管开始移位显示,前三位特征码OUTDX,ALRETInit8279ENDP;扫描8279是否有数据输入SCAN_KEYPROCNEARNEXT:MOVDX,CMD_8279INAL,DX ;读状态ANDAL,7 ;低三位为0,说明无键入代码JZNEXT;是否有键按下MOVAL,40H ;命令字OUTDX,AL;读FIFORAMMOVDX,DATA_8279INAL,DXSTCANDAL,3FH ;键值转化为键号SUBAL,0D0H;CMPAL,0FH;CMPAL,9;JASCAN_KEY1MOVSI,NUM

NUMBER[SI],ALMOVDL,ALMOVAH,2INT21HSCAN_KEY1:RET;NO_KEY:;CLC;JMPSCAN_KEY1SCAN_KEYENDP;初始化8253INIT_8253PROCNEARMOVDX,W_8253_CMOVAL,37H ;定时器0.方式3OUTDX,ALMOVDX,W_8253_TOMOVAL,26H ;BCD码26OUTDX,ALMOVAL,00HOUTDX,ALRETINIT_8253ENDP;初始化8251AInit_8251PROCNEARMOVDX,CTL_ADDRMOVAL,7EH;01111110OUTDX,AL;异步,8位数据位,*16波特率MOVAL,15HOUTDX,AL;命令控制字,允许发送RETInit_8251ENDP;8279到8251的发送程序SENDBYTEPROCNEARMOVSI,0FFFFHtt:INCSIMOVAL,NUMBER[SI]InitPCI2:ANDAL,0FHMOVAH,0B1HMOVAH,0MOVAL,02HMOVMOVCX,Device_IDDX,DATA_ADDR;读MOVDX,Vendor_ID入8251的端口MOVSI,0OUTDX,ALINT1AHCALLJNCInitPCI3;是否存在StarSENDER;通PCI9052板卡过com1端口发送到从机上,即rs485LEADX,msg1的JMPInitPCI1;CMPSI,1InitPCI3:;JBttMOVDI,PCIBAR3RETMOVAH,0B1HSENDBYTEENDPMOVAL,09HINT1AH;读取该卡;发送程序PCI9052基地址SENDERPROCJNCInitPCI4NEARLEADX,msg2PUSHAXJMPInitPCI1MOVDX,CTL_ADDRInitPCI4:sent:ANDCX,0FFFCHINAL,DXMOVIO_Bit8_BaseAddress,CXANDAL,01H;测试RET允许数据发送吗?InitPCIENDPJZsentMOVDX,DATA_ADDRModifyAddressPROCNEARADDCMD_8279,CXOUTDX,ALADDDATA_8279,CXPOPAXADDCTL_ADDR,CXSENDERENDPADDDATA_ADDR,CXInitPCIPROCNEARADDW_8253_TO,CXMOVAH,00HADDW_8253_C,CXMOVAL,03HRETINT10H ;清屏ModifyAddressENDPMOVAH,0B1HExit:MOVAL,01HMOVAH,4CHINT1AHINT21HCMPAH,0ENDSTARTJZInitPCI2从机:LEADX,msg0.MODELTINYInitPCI1:MOVAH,09HPCIBAR1EQU14H;PCI9052INT21HI/O基地址(用于访问局部配置寄存JMPExit器)PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)PCIIPREQU3CH;IRQ号TOC\o"1-5"\h\zINTCSR EQU 4CH;PCI9052INTCSR地址mask_int_9052 EQU 24HDAC0832Init EQU 080H;DAC0832初始输入值Vendor_IDEQU10EBH;厂商ID号Device_IDEQU8376;设备ID号.STACK200.DATA3CMD_8279DW00B1H;8279命令字、状态字地址CS5DATA_8279DW00B0H;8279读写数据口的地址LED_TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB080H,90H,88H,83H,0C6H,0A1H,86H,8EHDB0FFH,0BFH3TOC\o"1-5"\h\z;COM1_ADD DW0ABH;8250线路控制寄存器地址;COM2_ADD DW0A8H;8250除数寄存器地址低字节和数据接收/发送寄存器;COM3_ADD DW0ACH;MODEM控制寄存器地址;COM4_ADD DW0ADH;8250通信状态寄存器地址ADR DW0D0H;;用于清除PCI9052上一次写操作产生的地址BUFDB? ;存储接收到得数据;COM_ADD DW;8255A控制口偏移量00C3HCS4;PC_ADDDW00C2H;PC口偏移量CTL_ADDRDW00A1H ;8251 CS6DATA_ADDRDW00A0H ;8251IO8259_0DW00F0H;CS1IO8259_1DW00F1HRD_IO8259DW0000HCon_8253DW00E3H ;CS2T0_8253DW00E0HT1_8253DW00E1HT2_8253DW 00E2HDA0832DW00D0H ;CS3IO_Bit8_BaseAddressDW?PCI_IO_BaseAddress0DW?PCI_IRQ_NUMBERDB?INT_MASKDB?INT_VectorDB?INT_CSDW? ;保护原中断入口地址INT_IP DW?msg0 DB'BIOS不支持访问PCI$'msg1 DB'找不到StarPCI9052板卡$'msg2 DB'读PCI9052I/O基地址时出错$'msg3 DB'读8位I/O空间基地址时出错$'msg4 DB'读IRQ号出错$'buffer DB8DUP(0);显示缓冲区,8个字节CountDB0 ;一秒转动次数化设置转速50r/sCount1DB0;前一次MOVRevSetH,5Count2DB0;再前一MOVRevSetL,0次MOVbTime,0Count3DB0;再前一;0.25s标志位,即读取转速、控制转次速标志位NowCountDB0;当前计MOVCount500ms,1数值MOVkpTime,0;保存kpTimeDW0;保存上上一次采样时定时器的值一次采样时定时器的值MOVNowCount,0;当前Count500msDB0;500ms计计数值数MOVCount,0;一秒转动次数bTimeDB0;0.25s间CALL隔标志Init8253_1bHighKeyDB0;设置转CALLInit8251速十位START1:RevSetDB0;设置转CALLRECEIVE速值;接收数据(主机接受的数是RevSetHDB0;保存1)设置转速的十位数ANDAL,01HRevSetLDB0;保存设JNZEXIT2置转速的个位数Data_0832DB0START3:CALLDAC0832;DAC0832输入值;初始D/ACALLInit8253.CODECALLInit8259START:MOVAX,@DATASTI;允许MOVDS,AX中断,IF=1MOVES,AXMain:CALLIfExitNOPCALLGetKeyACALLInitPCIJNBMain1CALLModifyAddress3CALLkey根据PCI提供的基地址,将偏移地址转JMPMain2化为实地址Main1:CALLModifyVector3CMPbTIME,0修改中断向量、允许中断JZMainMOVbHighKey,1;设置MOVbTIME,0转速十位数标志位Main2:CALLRateDis;MOV显示转速Data_0832,DAC0832Init;初始化CALLREVControl;转速转换电压输入值控制MOVRevSet,32H ;初始 JMPMain

EXIT2:得到设置的转速值MOVAH,4CHMOVbHighKey,1INT21HKey2: RETRECEIVEPROCNEARKey ENDPMOVDX,CTL_ADDRWAITRXD:;显示转速INAL,DXRateDis PROCNEARANDAL,02HXORAH,AH;0JZWAITRXDMOVAL,CountMOVDX,DATA_ADDRMOVBL,10INAL,DXDIVBLRETMOVbuffer,AHRECEIVEENDPMOVbuffer+1,AL;8251初始化MOVAL,RevSetLInit8251PROCNEARMOVbuffer+4,ALMOVDX,CTL_ADDRMOVAL,RevSetHMOVAL,4EHMOVbuffer+5,ALOUTDX,AL;异步,8位数据位,*16MOVbuffer+2,10H3MOVAL,37H不显示OUTDX,AL;命令控制字,允许MOVbuffer+3,10H发送MOVbuffer+6,10HRETMOVbuffer+7,10HInit8251ENDPLEASI,buffer;设置速度转化CALLDisplay8;显示KeyPROCNEAR转换结果CMPAL,10RETJAEKey2RateDis ENDPCMPbHighKey,0;设置;转速控制的转速有十位REVControlPROCNEARJZKey1MOVRevSetH,AL;个位MOVAL,Count;当前MOVbHighKey,0转速RETCMPAL,RevSet;设置转速Key1: MOVJZREVControl1RevSetL,AL ;十位JNBRevDECMOVAL,RevSetH;提高转速MOVBL,10RevINC:MULBLMOVAL,RevSet;设置ADDAL,RevSetL转速MOVRevSet,ALSUBAL,Count;当前;RevSetH*10+RevSetL-->RevSet,转速RevINC1:ADDAL,Data_0832;转速差值+上一次DAC0832输入值=DAC0832输入值JNBRevINC2 ;判断是否超过DAC0832最大输入值MOVAL,0FFHRevINC2:MOVData_0832,ALCALLDAC0832;D/A,调整DAC0832输出电压JMPREVControl1;降低转速RevDEC:MOVAL,Count ;当前转速SUBAL,RevSet ;设置转速RevDEC1:XCHGAL,Data_0832;上一次DAC0832输入值-转速差值=DAC0832输入值SUBAL,Data_0832JNBRevDEC2MOVAL,10RevDEC2:MOVData_0832,ALCALLDAC0832;D/A,调整DAC0832输出电压REVControl1:RETREVControlENDP;计算速率Timer0Int:MOVbTime,1;0.25s间隔标志,0.25定时到标志MOVAL,NowCount ;本次0.25秒内累计转数MOVCount,ALMOVNowCount,0SUBTOC\o"1-5"\h\zAL,Count1 ;Count1上次0.25秒内累积转数JZTIMER0_2 ;本次0.25秒内累计转数与上次相比,不超过正负1INCAL ;求本次与前三次转速均值JZTIMER0_2CMPAL,2JNZTIMER0_3TIMER0_2:MOVAL,Count;1s测速PUSHAXXORAH,AHADDAL,Count1JNBTIMER0_4INCAHTIMER0_4:ADDAL,Count2JNBTIMER0_5INCAHTIMER0_5:ADDAL,Count3JNBTIMER0_6INCAHTIMER0_6:SHRAX,2;(count+count1+count2+count3)/4MOVCount,ALMOVAL,Count2MOVCount3,ALMOVAL,Count1MOVCount2,ALPOPAXMOVCount1,ALJMPTIMER0_1TIMER0_3:MOVAL,Count;本次转数与前几次相差较大,以本次为准MOVCount3,AL;250ms测速MOVCount2,ALMOVCount1,ALTIMER0_1:RETIntProc:PUSHAXPUSHDXCALLClearInt态,HEX计数MOVDX,RD_IO8259MOV DX,T0_8253INAL,DX;向计数器T0写入计数初值,INAL,DX;判断由先写低字节,后写高字节哪个中断源引起的中断MOV AL,84HCMPAL,08HJNZIntProc1OUT DX,ALCALLTimer0IntMOV AL,1EHJMPIntProc2IntProc1:CMPAL,0FHOUT DX,ALJNZIntProc2;CLK0=31250Hz,250ms定时(计数CALLCountInt效果)IntProc2:MOVDX,IO8259_0MOVMOVAL,20HDX,Con_8253OUTDX,ALMOV AL,74HPOPDX;01110100POPAXOUT DX,ALIRET;计数器T1设置在模式2状态,HEX计数CountInt:MOVDX,Con_8253MOV DX,T1_8253MOVAL,40H;向计数器TO写入计数初值,先写OUTDX,AL低字节,后写高字节;锁存MOV AL,OFFHMOVDX,T1_8253INAL,DXOUT DX,ALMOVAH,ALMOV AL,OFFHINAL,DXOUT DX,ALXCHGAL,AH;作定时器使用,辅助定时计数;T1的当前值RETXCHGAX,kpTimeInit8253ENDPSUBAX,kpTimeInit8253_1PROCNEARCMPAX,100MOVJBCountInt1;前后DX,Con_8253二次采样时间差小于100,判断是干扰MOVINCNowCountAL,OB7HCountInt1:RETOUT DX,ALInit8253PROCNEARMOVMOVDX,Con_8253DX,T2_8253MOVAL,34HMOV AL,26H;00110100选通道0,先写/读计数OUT DX,ALrrrtFy tr.■—1.、.,tr.―l,Z- 、.rv亠/,u-r* “、MOV AL,OOH器低字节后高字节,工作方式2(频率发生器),二进制计数OUT DX,ALOUTDX,ALRET;计数器T0设置在模式2状Init8253_1ENDP

Init8259PROCNEARMOVCX,8 ;计数用MOVDX,IO8259_0LEABX,LED_TABMOVDisPlay81:MOVAL,[SI] ;不用AL,13H;ICW1=0001001显示的位调整1,上升沿触发、间隔8、单片工作、写XLATICW4XCHGAL,[SI]OUTDX,ALMOVDX,IO8259_1INCSIMOVLOOPDisPlay81AL,08H;ICW2=0000100MOVAL,00,中断类型码:08H、09H、0AH、0BH、CALLINIT8279_10CH、0DH、0EH、0FHMOVCX,8OUTDX,ALDisplay82:DECSIMOVMOVAL,[SI]AL,09H;ICW4=0000100CALLWRITE_DATA1LOOPDisplay82OUTDX,ALPOPDXMOVPOPCXAL,7EH;OCW1=011111POPBX10,屏蔽除IR0和IR7位的中断POPAXOUTDX,A

温馨提示

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

评论

0/150

提交评论