单片机与接口控制试验平台结构设计_第1页
单片机与接口控制试验平台结构设计_第2页
单片机与接口控制试验平台结构设计_第3页
单片机与接口控制试验平台结构设计_第4页
单片机与接口控制试验平台结构设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

单片机及接口控制试验平台构造设计第1章课题剖析与方案论证1.1课题任务剖析本课题主要实现用单片机控制沟通、直流、步进三种电机转速的目的,并收集变频器转速输出口的电流信号将沟通电机的实质转速显示出来。实验室现有的西门子变频器有一模拟量输进口,在该口输入0-10V的电压,变频器就能够输出不同频次的沟通电,达到控制沟通电机转速的目的,为此关于沟通电机的转速控制只需将单片机产生的数字信号转变为模拟电压信号与实验室现有的西门子变频器的模拟量输进口接驳即可;沟通电机的转速显示则需将变频器输出的电流模拟信号变换为数字信号送单片机。步进电机经过环行分派器控制各绕组的通电次序运行,分派器有软件和硬件之分。实验室的步进电机是经过硬件环行分派器驱动的,因此只需使单片机输出不同频次的脉冲至硬件环行分派器就能够控制步进电机的转速。还能够从单片机上引出一个口,经过控制这个口的高低电平退步进电机正转或反转。直流电机的转速控制只需改变直流电机的输入电压就能实现,为此利用单片机产生PWM脉冲送直流电机的驱动电路,由驱动电路产生不同的电压至直流电机,进而达到直流电机的转速控制。本实验平台要求三种电机的调速电路以及模/数变换电路互相独立,以便在此后做不同的实验时只需将相应的电路与单片机控制电路接驳。为此需要将各电路的硬件和系统的软件模块化,此中硬件部分第一将各电路设计成一个个独立的单元,而后用插口将各单元电路与单片机控制单元相连;软件的模块化则经过在主程序中调用各子程序实现。1.2方案论证只管所要控制的沟通电机的额定转速为1400r/min,所要的A/D、D/A芯片的分辨率最小为1/1400,但考虑到本次设计任务不过锻炼我们的实践能力和方便此后教课,没有必需去片面的追求高精度而增添硬件成本,为此直接采纳了市道上较为常有的八位D/A(DAC0809)、A/D(ADC0832)变换芯片,而没有将D/A、A/D芯片的选择在方案中作为考虑对象。本次方案论证主要对键盘/显示接口电路进行选择。方案一:键盘/显示器单元电路方案采纳通用并行接口芯片8155作LED显示和键盘的输入。此中,8155的PA口为输出口,控制键盘列线的扫描,PA口同时又是4位LED显示器的位扫描口,PB作为显示器的段码口,PC口作为键盘行线状态的输进口。沟通电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断办理后经P0输出8位数字量信号经D/A变换芯片DAC0832进行变换,产生相应的模拟电压信号,再将模拟电压信号经过二级运算器放大后,输入西门子变频器MM420的模拟量输进口,去控制沟通电动机的转动。步进电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断办理后经P1.0、P1.1口输出步进电机的控制信号,经74LS07正向放大后送步进电机驱动电路。直流电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断办理后经P1.0口输出PWM信号,将此脉冲信号送直流电机驱动电路控制直流电机的转动。方案二:键盘/显示器单元的电路方案采纳五片“串入并出”移位存放器74LS164扩展五个8位并行输出口:一个8位并行输出口用于键盘的列线使用,其余的四个8位并行输出口用于控制4个LED段选口作静态显示。沟通电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断办理后经P0输出8位数字量信号经D/A变换芯片DAC0832进行变换,产生相应的模拟电压信号,再将模拟电压信号经过二级运算器放大后,输入西门子变频器MM420的模拟量输进口,去控制沟通电动机的转动。步进电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断办理后经P1.0、P1.1口输出步进电机的控制信号,经74LS07正向放大后送步进电机驱动电路。直流电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断办理后经P1.0口输出PWM信号,将此脉冲信号送直流电机驱动电路控制直流电机的转动。综合上述两种方案,差别在于所采纳的键盘、显示接口电路不同。方案一:采纳通用并行接口芯片8155作LED显示和键盘的输入,这样就会和D/A变换芯片DAC0832共用P0口资源,需要进行片选,软件工作量大,硬件接线复杂。方案二:直接使用89C51的串换行口外扩键盘/显示器。应用串行口方式0的输入方式,在串行口外接移位存放器74LS164,构成键盘/显示器接口。这类静态显示方式的长处是亮度大,显示闪耀感小,且CPU不用屡次地为显示服务,因此主程序可不用扫描显示器,软件设计比较简单,整个接口电路硬件也不复杂。经过比较我发现:第二种方案软、硬较第一种方案简单,且充分利用了89C51单片机的串行口资源,节俭了成本。为此,我采纳第二种方案。最后确立的整体方案框图以下:键盘单单片机显示单元元直流电机单元步进电机单元沟通电机单元A/D变换单元图1-1整体方案框图1.3设计步骤图1-2设计步骤第2章硬件电路依据第一章中的各单元电路方案,细化整体框图以下:键盘接口单元电路单片机显示接口单元电路D/A变换接口单元电路直流驱动接口单元电路硬件环行分派器变频器A/D变换电路接口单元电路直流电机步进电机沟通电机图2-1系统构造图下边先介绍波及的硬件知识点,再说明各单元电路的设计方法,最后给出总体设计图。2.1主要芯片简介AT89C51是ATMEL企业生产的MCS-51系列芯片,是一种低功耗、高性能的片含有4KB快闪可编程/擦除只读存(FPEROM-FLASHPROGRAMMABLEANDERASABLEREADONLYMEMORY)的8位CMOS微控制器。芯片上的FPEROM同意在线编程或采纳通用的非易失储存编程器对程序储存器重复编程。AT89C51的引脚图如图2-1所示:图2-2AT89C51引脚图AT89C51各个引脚功能说明以下:(1)输入/输出引脚:P0口:在不接外面储存器与不扩展I/O时,可做为准双向的输入/输出口。在接有外面储存器或有扩展I/O口时,该口分时复用为低8位的数据总线和地点总线。P1口的字节地点位90H,位地点为90H—97H。P1口只好作为通用I/O口使用,是准双向口。当P1口作为输出口使用时,已能对外供给推拉电流负载,外电路无需再接上拉电阻。当P1口作为输进口使用时,应先向锁存器写入“1”,使输出驱动电路的FET截止。P2口:P2口的字节地点位0A0H,位地点为0A0H—0A7H。在实质应用中P2口用于为系统供给高位地点,。其余,P2口也能够作为通用I/O口使用,这时多路转接开关倒向锁存器Q端。P3口:除了作为准双向口使用外,还能够将每一位用于地二功能,并且P3口的每一条引脚都能够独立的定义为第一功能的输入输出或第二功能。(2)控制线:ALE/PROG:地点锁存有效信号输出端。ALE在每个机器周期输出两个脉冲。PSEN:片外程序储存器读选通讯号输出端,低电平有效。RST/Vpd:该引脚为单片机的上电复位和掉电保护端。RST引脚是复位信号的输入端,复位信号是高电平有效。复位操作有上电自动复位和按键手动复位两种方式。(3)、主电源引脚:Vcc:接+5V电源正极(4)、外接晶体引脚:XTAL1:接外面石英晶体的一端。它是一个反相放大器的输入端,这个放大器构成了片震荡器。当采纳外面时钟时,关于HMOS单片机,该引脚接地;关于CHMOS单片机,该引脚作为外面震荡信号是输入端。XTAL2:接外面石英晶体的另一端。在单片机部,它是片震荡器的反相放大器的输出端。当采纳外面时钟时。变换芯DAC0832D/A变换接口设计,主假如选择D/A变换集成芯片,配置外头电路及器件,实现数字量至模拟量的线性变换,其实不波及D/A变换器的构造设计,也不用对其部电路作详尽剖析。1.DAC0832的部构造及其引脚DAC0832的部构造主要由两面三个8位存放器与一个D/A变换器构成。这类构造使输入的数据能有两次缓冲,所以在操作上十分方便与灵巧。DAC0832是电流型输出,应用时需要外接运算放大器使之成为电压型输出。DAC0832为20脚双列直插芯片,芯片的引脚与逻辑构造以下图。图2-3DAC0832芯片的引脚与逻辑构造DAC0832的各管脚的功能以下:——8位数据输入端,常和CPU的数据总线相连,用于输入CPU送来的待换的数字量,DI7为最高位。ILE——数据同意锁存信号引脚,高电平有效。CS——输入存放器选择信号脚,低电平有效。WR1——输入存放器写选信号,输入存放器的锁存信号/LE1由ILE、CS、WR1的逻辑组合产生,LE1为高电平常,输入存放器状态随输入数据线变化,LE1的负跳变将输入数据锁存。XFER——传递控制输入线,低电平有效。WR2——DAC存放器的写选通讯号。DAC存放器的锁存器锁存信号LE2由WR2和XFER/XFER的逻辑组合而成,LE2为高电平常,DAC存放器的输出随寄存器的输入变化,LE2负跳变时,输入存放器的容打入DAC存放并开始D/A变换。VREF——参照电压输入端,一般在,由稳压电源供给。Rfb——运算放大器反应信号输入端,往常接到运算放大器输出端。Iout1、Iout2——电流输出端,其值随DAC容线性变化、Iout1+Iout2=常数。为保证额定负载下输出电流的线形度,Iout1、Iout2引脚上的电位尽量接近地电平。所以,Iout1、Iout2往常接运算放大器输入端。当输入数字为全”1”时,Iout1输出电流最大,约为:255VREF,全”0”时,输出电流为0。256REBVcc——电源输入端,可在围。AGND——模拟地。DGND——数字地。往常上两种地线接在一同。变换芯片ADC08091.主要参数(1)8路8位A/D变换器。(2)拥有变换起停控制端。(3)变换时间为100μs(4)单个+5V电源供电(5)模拟输入电压围0~+5V,不需零点和满刻度校准。2.部构造ADC0809是CMOS单片型逐次迫近式A/D变换器,部构造如图13.22所示,它由8路模拟开关、地点锁存与译码器、比较器、8位开关树型D/A变换器、逐次迫近存放器、三态输出锁存器等其余一些电路构成。所以,ADC0809可办理8路模拟量输入,且有三态输出能力,既可与各样微办理器相连,也可独自工作。ADC0809引脚ADC0809逻辑构造图2-4ADC0809引脚与逻辑构造图3.外面特征(引脚功能)ADC0809芯片有28条引脚,采纳双列直插式封装。下边说明各引脚功能。IN0~IN7:8路模拟量输入端。2-1~2-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地点输入线,用于选通8路模拟输入中的一路。如表2-1所示。本次课程设计中,我们将A、B、C接地,选择IN0输入通道。表2-1ADDA、ADDB、ADDC真值表ALE:地点锁存同意信号,输入,高电平有效。START:A/D变换启动信号,输入,高电平有效。EOC:A/D变换结束信号,输出,当A/D变换结束时,此端输出一个高电平(变换时期向来为低电平)。OE:数据输出同意信号,输入,高电平有效。当A/D变换结束时,此端输入一个高电平,才能翻开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频次不高于640KHZ。REF(+)、REF(-):基准电压。Vcc:+5V电源。GND:接地。4.工作过程ADC0809的工作过程是:第一输入3位地点,并使ALE=1,将地点存入地点锁存器中。此地点经译码选通8路模拟输入之一到比较器。START上涨沿将逐次迫近存放器复位。降落沿启动A/D变换,以后EOC输出信号变低,指示变换正在进行。直到A/D变换达成,EOC变为高电平,指示A/D变换结束,结果数据已存入锁存器,这个信号可用作中止申请。当OE输入高电平常,输出三态门翻开,变换结果的数字量输出到数据总线上。移位存放器74LS16474LS164是8位串入并出移位存放器。图2-574LS164移位存放器(1)A、B为串行输入端(2)QA~QH为串行输出端(3)CLK为串行时钟输入端(4)CLR为串行输出清零端(5)VCC为+5V电源输入端(6)GND为接地端2.2硬件接线剖析与设计键盘接口单元电路设计键盘接口单元电路主要为电机的转速输入供给解决方案,并能对所要控制的电机进行选择,以及启动A/D变换。本设计中键盘接口电路采纳一片74LS164串入并出八位输出,接收端使用P3.4、P3.5的第一功能,经过判断这两个口的高低电平,再联合74LS164便可以判断是哪个键按下,图2-6为键盘接口电路。图2-6键盘接口单元电路1.CLK引脚接线说明图2-7CLK引脚接线上图中164的CLK为串行时钟输入端,与单片机的移位时钟脉冲输出口TXD相连。2.串行数据接线说明图2-8A、B引脚接线上图中164的A、B为串行数据输进口,A、B并联后与单片机的串行数据输出口相连。3.MR接线说明图2-9A、B引脚接线因为164做键盘扩展用不需要对输出清零,故上图中MR接+5V高电平。显示接口单元电路设计显示接口单元电路主要为键盘输入的数值供给显示方案。本设计采纳静态显示的方式,考虑到直流、沟通电机的最高转速达到千转,为此用四片74LS164(串入并出移位存放器)驱动四只LED发光二极管。图2-10显示接口单元电路1.CLK引脚接线说明图2-11P3.3控制的TXD显示接口单元电路与键盘接口单元电路的最大不同在于单片机的移位时钟脉冲输出口TXD与P3.3口经或门(74LS08)后与74LS164的CLK相连(图2-9),这样TXD就遇到P3.3的控制,只有当P3.3输出为高电平常74LS164的CLK端才能接遇到TXD发出的移位脉冲,进而更新显示。这样接线的目的在于防止显示与键盘扫描的扰乱,只有当要更新显示时才置P3.3为高电平。2.CLK引脚接线说明同键盘扫描电路相同用164实现八位段码显示时也不要对输出清零,故CLR接+5V高电平。3.多位数值显示的接线说明图2-12多位数值显示的接线因为164按照“先入先出”的原则,故用164实现4位数值显示时只需将上司164的Q7引脚与下级的A、B引脚相连就能实现。3.LED限流电阻的选择一般LED段码的驱动电流在5-10mA左右,为此采纳了750的电阻,则本设计中LED段码的驱动电流为6.7mA(5/750=6.7mA)。沟通电机接口单元电路设计沟通电机接口单元电路为将单片机的数字信号变换为变频器的模拟量输进口能识其余模拟电压信号(0-5V)供给解决方案。本设计采纳8位D/A变换芯片DAC0832先将单片机产生的数字信号变换为电流信号,再经过第一级运放(OP07)将DAC0832输出的电流信号变换为电压信号;接着用第二级运放(OP07)把电压信号进行放大,在设计时将放大电路的放大倍数设为可调,实质调试时能够经过调理10K的可变电阻将沟通电机的输入转速与实质转速邻近。图2-13D/A接口电路DAC0832是八位D/A变换芯片,它的分辨率为1/255,本设计的沟通电机的最高转速为1275r/min,这样本设计的分辨率为5r/min(1275/255=5)。1.CS接线说明图2-14CS接线要DAC0832工作,第一应付0832进行片选,我将单片机的P2.7口与0832的CS相连,启动D/A变换时将P2.7口置低电平。2.ILE(输入数据锁存同意信号)接线说明图2-15ILE接线ILE是高电平有效,我将ILE接在了+5V,使0832一直同意输入数据锁存。3.单缓冲方式的接线说明图2-16单缓冲方式的接线因为0832只有一路模拟量输出,为此选择将0832的DAC存放器处于直通方式,而让0832的输入存放器处于受控的锁存方式。于是把WR2、XREF接地。接口单元电路设计A/D接口单元电路为收集到的变频器的模拟量能被单片机辨别供给解决方案。本设计采纳8位A/D变换芯片ADC0809,ADC0809的分辨率为1/255,而设计的沟通电机的最高转速为1275r/min,这样本设计中的A/D收集的最小分辨率为5r/min。为了在此后的实验中能用A/D变换芯片独自收集电压信号,在设计中将ADC0809的INT0口和地线预留了接口。图2-17A/D接口电路1.输入模拟量的接线说明图2-18输入模拟量的接线因为变频器输出的是0-20mA,而ADC0809只好收集电压信号,故用两个510的电阻并联后接地,使电流信号变换为0-5V电压信号。上图中的运放是射随器的接法,为了加强变频器输出的带载能力。2.路模拟通道的选择图2-19模拟通道的选择因为只用一路通道作为变频器模拟量的输入,为简化电路将模拟通道选择信号A、B、C接地,选择IN0口作为模拟量的输进口。3.ALE、START接线说明图2-20ALE、START接线图图2-19中由89C51的P2.6和RD经74LS02(或非门)后与START(变换启动信号)、ALE(地点锁存同意信号)连结。在置ADC0809地点时将P2.6置为低电平,这样在ADC0809起动后就由89C51的WR作为ADC0809的写选通讯号。本次设计中将START、ALE连结在一同,这样使得在WR信号的前沿写入通道地点,紧接着在此后沿就起动变换。4.OE(输出同意信号)接线说明图2-21OE接线图图2-20中由89C51的P2.7和RD经74LS02(或非门)后与START(变换启动信号)、ALE(地点锁存同意信号)连结。在置ADC0809地点时将P2.7置为低电平,这样在ADC0809起动后就由89C51的RD作为ADC0809的读选通讯号。5.EOC(变换结束信号)接线说明图2-22EOC接线图本设计中A/D变换达成后以中止方式进行传递,当EOC=1时(高电平)时,A/D变换结束;而89C51的外中止INT0是低电平有效,因此将EOC经非门后与INT0连结,实现了数据的中止方式传递,因为电路中有一片74LS02(或非门),且只用了此中的两路非门,为此我将74LS02的一路非们的两个输入引脚并联接输入,当非门用。6.CLK(时钟信号)接线说明图2-23ALE接线图ADC0809一般使用频次为500kHz的时钟信号,而单片机使用的是600MHz的晶振,经六分频后由89C51的ALE引脚输出的是1000kHz的时钟信号,此因将ALE引脚上的信号经74LS74二分频后获取500kHz的时钟信号连结到ADC0809的ALE(时钟信号)引脚。在这里把74LS74看作一个二分频的分频器使用。直流电机驱动接口单元电路设计本设计采纳功率MOSFET单电源方式驱动电路。图2-24直流电机驱动接口单元电路各元件在驱动电路中的功能以下:光耦的驱动采纳PNP形式的三极管9012,这样当控制上为高电平常,就不会导通,防备89C51在未初始化时电机运行。4N25起到耦合脉冲和隔绝单片机系统输出部分的作用,使两部分的电流信号独立。本设计中在三极管的输出回路中串了510的电阻,所以在三极管完整导通光阴耦的驱动电流约为10mA(5/51010mA)。74LS07同相驱动器是作为IRF540场效应管输入端的驱动,在74LS07的输出口接了5.1K的上拉电阻。三极管(IRF540)是起到功率放大的作用。它是功率MOSFET,能够用逻辑电平直接驱动。电源接口单元电路设计电源接口单元电路为各接口单元电路供给电源解决方案。本设计中单片机、A/D变换芯片ADC0809以及各门电路芯片的工作电压为5V,这样就让D/A变换芯片DAC0832也接5V电压(DAC0832正常工作电压5-15V)。这就需要5V电源,本设计经过5V的稳压管实现5V电压输出。控制沟通电机的变频器要求输入的电压为0-10V,因为在市道上没有10V的稳压管,为防备输入变频器的电压过高,为此采纳9V的稳压管输出9V电压。图2-25电源接口单元电路本次设计的电源接口单元电路第一用三抽头的变压器将220V的沟通电降为两路12V的沟通电输出,接着用全桥整流电路将两路12V沟通电变为两路16.8V212=16.8)的直流电输出,最后经7809(+9V稳压管)、7909(-9V稳压管)变为9V电压输出。+5V的电压直接经过稳压管7805经7809获取。整体电路图图2-26整体电路图第3章软件设计开始时先初始化显示程序,接着分别调用键盘扫描子程序、显示子程序,最后返回。此中D\A、A\D的变换程序,直流电机驱动程序,步进电机驱动程序的履行,分别经过扫描键盘获取的键码进行跳转。因为驱动步进电机和直流电机的脉冲信号发生程序需要单片机不断将P1口置高、低电平,为防止死循环,让这类电机停止,并使程序顺利返回到主程序,还设有返回按钮,经过在上述两种电机的驱动程序中判断该键的值来决定能否返回。为节俭键盘资源,我将返回键编码在显示总清键上,经过复用显示总清键实现;DAC0832拥有输入锁存的功能,这样在启动了DAC0832以后CPU就能够不再为D/A变换服务,而是直接转到主程序,这样一来就没有必需独自再设让D/A变换输出为零的按键,要使D/A变换输出为零,只须用键盘输入四个“0”再启动D/A即可。3.1MAIN程序开始时先初始化显示程序,接着分别调用键盘扫描子程序以及显示子程序或某单元驱动子程序,最后返回。MAIN程序对显示子程序或某单元驱动子程序的调用是经过判断键码能否大于9来实现的。当键码小于等于9时,在主程序中调用显示,将获得的键码显示出来;当键码大于9时,则查转移指令表履行相应的子程序。1.MAIN程序流程图:开始初始化显示调用键盘扫描子程序(获得键码送A)NA>9?调用显示子程序Y调用分支程序转移子程序返回图3-1MAIN程序流程图2.汇编程序及说明主程序开始时先置货仓指针,接着设置串行口工作方式,初始化显缓区容地址。其程序以下:MAIN:MOVSP,#60H;MOVSCON,#00H;MOVR0,#7FH;

置货仓指针设置串行口工作方式0初始化显缓区单元地点MOVR1,#7FHSTART:MOVBUF0,#0bh;

初始化显示缓冲区MOVBUF1,#0bhMOVBUF2,#0bhMOVBUF3,#0bhLCALLDISP;

调用显示在主程序中对键盘扫描子程序、显示子程序或某单元驱动子程序进行调用。其程序以下:LOOP:ACALLKEYI;调用显示MOVR1,A;键码暂存显缓区CLRC;清进位标记位CJNEA,#9,NORMAL;A9转NORMALAJMPNORMAL1;A=9转NORMAL1NORMAL:JNCABOVE9;A>9转ABOVE9NORMAL1:DECR1;指向下一显缓单元CJNER1,#7AH,DISP1;输入数值未满4位,调用显示以下程序为输入数值满

4位,初始化显示。MOVR1,#7FH;MOVBUF3,#0AHMOVBUF2,#0BHMOVBUF1,#0BHMOVBUF0,#0BHDISP1:LCALLDISP;SJMPLOOP;

调用显示返回3.2子程序多分支程序转移子程序分支程序转移子程序为键码大于9时,调用单元驱动子程序供给解决方案。它的工作方式是:当键码大于9时,对键码进行除以10的运算并取余数送A,将余数作为跳转的分支程序号。1.多分支程序转移子程序流程图:开始A除以10并取余送AA=0A=1A=2A=3A=4A=5沟通步进步进直流A/D电机电机电机电机变换单元单元单元单元单元清键驱动驱动驱动驱动驱动盘输子程子程子程子程子程入序序序序序返回图

3-2

多分支程序转移子程序流程图2.汇编程序及说明ABOVE9:MOVA,R1;

键码送

AMOVB,#0AH;

除数送

BDIVAB;

键码除以

10MOVA,B;

余数存

ARLA;

分支程序号乘

2MOVDPTR,#TAB;

转移指令表首址JMPA+DPTR各分支程序的转移指令表:TAB:AJMPACMAJMPSETMJMPERTM1AJMPDCMAJMPADCAJMPMAINTAB:AJMPACMAJMPSETMAJMPSETM1AJMPDCMAJMPADCAJMPSTART键盘单元扫描子程序在键盘扫描子程序的作用是获得键码送累加器A。1.键盘扫描子程序流程图开始扫描键盘有键按下?延时Y是颤动惹起的?N获得键码送A返回图3-3键盘扫描子程序流程图汇编程序及说明扫描程序子程序履行时先使7474LS164输出全为低电平(列线),这样就通过查问P3.4(第1行)、P3.5(第2行)的电平来判断能否有键按下。其程序以下:KEYI:MOVA,#00H;MOVSBUF,A;KL0:JNBTI,KL0;CLRTI;KL1:JNBP3.4,PK1;JBP3.5,KL1;PK1:ACALLDL10;

使所有列线为0的编码送A扫描键盘,使所有列线为0串行输出完否?串行输出完,清TI第1行有键闭合吗?若有,跳PK1进行办理第2行有键闭合吗?没有,跳KL1调用10ms延时子程序DL0,进行软件消抖ACALLDL10JNBP3.4,PK2;JBP3.5,KL1;PK2:MOVR7,#08H;

判断是不是颤动惹起的?是颤动惹起的,转KL1不是颤动惹起的在进行软件消抖确立有键按下后,就逐列输出低电平,并记列号于R3,再查问行线状态,当1行有键按下时记行首键号0于R4,当1行有键按下时记行首键号8于R4,最后将按下的键所在地点的列号和行首键号相加获取键码。其程序以下:MOVR6,#7FH;MOVR3,#00H;R3MOVA,R6;KL5:MOVSBUF,A;KL2:JNBTI,KL2;CLRTI;JNBP3.4,PKONE;JBP3.5,NEXT;MOVR4,#08H;AJMPPK3;PKONE:MOVR4,#00H;

判断是哪一个键按下,7FH为使第一列为低为列号存放器列扫描码从串行口输出等候串行口发送完清TI读第1行线状态,第1行有键闭合,跳PKONE办理读第2行线状态,第2行有键被按否?第2行有键被按下,行首键号08H送R4第1行有键被按下,行首键号00H送R4PK3:MOVSBUF,#00H;

等候键开释,发送

00H使所有列线为低电平KL3:JNBTI,KL3;CLRTI;KL4:JNBP3.4,KL4;

发送完成,清判断行状态

TIJNBP3.5,KL4;MOVA,R4;ADDA,R3;

两行线均为高,说明键已开释计算得键码,送ARETNEXT:MOVA,R6;

列扫描码左移一位,判下一列键能否按下RRA;MOVR6,A;INCR3;DJNZR7,KL5;

记着列扫描码于R6中列号增1列计数器R7减1,8列键都检察完否?BACK:RETDL10:MOVR7,#0AH;

延时

10ms子程序DL:MOVR6,#0FFH;DL1:DJNZR6,DL1;DJNZR7,DL;RET;显示单元子程序显示单元子程序的功能是将输入的0-9的键码用阿拉伯数字显示出来,因为显示的数字与键码一致,就能够直接用键码作为查段码表的依照。显示子程序履行时先把P3.3置为高电平,使RXT输出的串行口移位脉冲有效,在输出四位显示以后置P3.3为低电平,使RXT输出的串行口移位脉冲对显示不起作用,防止显示受键盘扫描的影响。1.显示子程序流程图开始开移位脉冲输出初始化显示位数、显缓区单元地点查表并显示NR7=0?Y关移位脉冲输出返回图3-4

显示单元子程序流程图2.汇编程序及说明DISP:SETBP3.3;

同意

TXD引脚同步移位脉冲输出MOVR7,#04H;

送出段码个数,

R7为段码个数计数器MOVR0,#7FH;

7FH~78H

为显示数据缓冲区四位数显示程序以下:DL0:MOVA,R0;

拿出要显示的数送

AADDA,#0dH;

加上偏移量MOVCA,A+PC;

查段码表

SEGTAB,拿出段码MOVSBUF,A;

送出显示HERE1:JNBTI,HERE1;

查问

TI

状态,1字节的段码输出完否?CLRTI;1

字节的段码输出完,清

TIDECR0;

指向下一个显示单元DJNZ

R7,DL0;

段码个数计数器

R7能否为

0,如不为

0,持续送段码CLRP3.3;

4

个段码输出完成,封闭显示器输出RET;

返回TAB1:DB0C0H,0F9H,0A4H,0B0H,99H;共阳极段码表,0,1,2,3,4DB92H,82H,0F8H,80H,090H,0FFH,0BFH;5,6,7,8,9,暗,-沟通电机单元控制子程序履行沟通电机控制子程序时,第一对输入的数值进行判断,因为OP07的正极接的是+9V的电压,输出的最高电压为。实验中电机运行时的额定转速为1400转/分,而变频器同意的最高模拟电压为+10V。由上边的剖析不难得出OP07能控制的电机最高转速为1260转/分(1400/109=1260),那么输入的最高转速就应为1260。但考虑到输入的数值最后要送到累加器A中,再由A将数值送DAC0832进行D/A变换。而累加器A能存入的最大数为FFH(255),输入的最高转速1260与255的倍数关系为:1200/255=4.95,为计算方便我取键盘输入的最高转速为1275(2555=1275),这样在将键盘输入的数值送入A中时只需将输入的数值除以5就能够了。在汇编语言的实质数值变换过程中,我是这样办理的:比方我输入的数值是1233,那么履行沟通电机控制子程序时:(7FH)=1,(7EH)=2,(7DH)=3,(7CH)=3。(A)=(7FH)1000/5+(7EH)100/5+(7DH)10/5+(7CH)/5=(7FH)200+(7EH)20+(7DH)2+(7CH)/5(A)=1200+2

20+3

2+3/5=246

(7C单元数值四舍五入)沟通电机单元控制子程序流程图开始转速>1275?NY调用数据办理子程序,将办理结果送A启动DAC0832D/A变换输出控制电机的转速返回图3-5沟通电机单元控制子程序流程图汇编程序及说明程序履行时先调用键盘输入办理,判断输入值能否大于1275,其程序以下:ACM:AJMPKDA

;

调用键盘输入办理ACM1:MOVDPTR,#7FFFH

;

置DAC0832地点MOVXDPTR,A

;D/A

变换AJMPSTART键盘输入办理程序先判断输入的数值能否大于电机的转速将输入的数值缩小5倍,其程序以下:KDA:MOVA,BUF3

;

键盘输入办理CJNEA,#1,CASE0;

分别对各位进行数值的判断MOVA,BUF2CJNEA,#2,CASE1MOVA,BUF1CJNEA,#7,CASE1MOVA,BUF0CJNEA,#5,CASE1THU:MOVA,BUF3;

千位数减小

5倍后暂存

83H单元MOVB,#200MULABMOV83H,AHUN:MOVA,BUF2;

百位数减小

5倍后暂存

82H单元MOVB,#20MULABMOV82H,AMOVA,BUF;

十位数减小

5倍后暂存

81H单元RLAMOV81H,AMOVA,BUF0MOVB,#5;

个位数减小

5倍后直接存

ADIVABADDA,81H;

将各位上的数值相加ADDA,82HADDA,83HAJMPACM1以下是键盘办理的跳转子程序,因为前面的键盘输入办理程序只好判断个位上的数值能否和最大相等,故用以下程序判断比最大数大仍是小,大于最大数则跳转至主程序,小于最大数则跳转至DA变换。CASE0:JNCMAIN1;

大于最大数跳转至主程序AJMPHUN;

小于最大数跳转至

DA变换CASE1:JNCMAIN1;

大于最大数跳转至主程序AJMPTHU;

小于最大数跳转至

DA变换步进电机单元控制子程序步进电机的速度控制是经过控制脉冲的延时程序实现的,延时的参数也是经过累加器A送延时子程序的。相同存在显示数值和累加器A之间数值变换的问题,因为时间有限和条件限制,我对步进电机的转速没能进行丈量,不过为计算的方便将步进电机的最高转速定为了255转/分。当输入的数值为0时,进入步进电机的点动控制。履行步进电机控制子程序时:(A)=(7EH)100+(7DH)10+(7CH)步进电机单元控制子程序流程图开始转速>255?NY调用数据办理子程序,将办理结果送AA=0?调用含有A延时参数的高低电平子程序点动控制步进电机控制步进电机转速NNP3.5=0P3.5=0YY返回图3-6步进电机单元控制子程序流程图2.汇编程序及说明SETM:SETBP1.1;

步进电机正转AJMPKWS;

调用键盘办理,判断能否

>255SETM1:CLRP1.1;

步进电机反转AJMPKWS;

调用键盘办理,判断能否

>255LOOP0:CLRP1.0;

脉冲低电平ACALLDELAY1;;

脉冲低电平延时MOVR3,A;

暂存

A值于

R3以下是判P3.5能否为低的程序,用来在履行脉冲过程中按下“返回”键时返回主程序。MOVA,#0FEHMOVSBUF,Aherea:JNBTI,herea;

等候串行口发送完CLRTI;JNBP3.5,MAIN2SETBP3.5;ACALLDELAY1;AJMPLOOP0;DELAY1:MOVR7,#10;

脉冲高电平脉冲高电平延时脉冲循环含有A参数的延时子程序DL2:MOVR6,A;DL3:DJNZR6,DL3;DJNZR7,DL2;RETDL100:MOVR7,#1H;

延时

1ms子程序DLa:MOVR6,#0FFH;DL1a:DJNZR6,DL1a;DJNZR7,DLa;RET;KWS:MOVA,BUF3;

键盘输入办理(在沟通电机驱动程序中已作说明)CJNEA,#0,CASE2MOVA,BUF2CJNEA,#2,CASE3MOVA,BUF1CJNEA,#5,CASE3MOVA,BUF0CJNEA,#5,CASE3以下程序将输入的数值办理为HUNS:MOVA,BUF2;MOVB,#100MULABMOV82H,AMOVA,BUF1;MOVB,#10MULABMOV81H,AMOVA,BUF0ADDA,81H;ADDA,82HAJMPLOOP0;

0-FFH的数送A。百位数暂存82H单元个位数暂存81H单元个位数直接存A各位数相加脉冲循环以下程序对键盘数值作进一步判断(在沟通电机驱动程序中已作说明)。CASE2:JNCMAIN2AJMPHUNSCASE3:JNCMAIN2AJMPTHUSMAIN3:AJMPMAIN2以下是点动控制子程序。POIT:MOVA,#0F7HMOVSBUF,AHEREP:JNBTI,HEREP;等候串行口发送完CLRTI;JNBP3.4,POIT1MOVA,#7FHMOVSBUF,AHEREP1:JNBTI,HEREP1;等候串行口发送完CLRTI;JNBP3.5,POIT2MOVA,#0FEHMOVSBUF,AHEREB:JNBTI,HEREB;等候串行口发送完CLRTI;JNBP3.5,mAIn3AJMPHEREPPOIT1:SETBP1.1JNBP3.4,POIT1POIT2:JNBP3.5,POIT2CLRP1.1POIT0:CLRP1.0MOVA,#50H;设定点动速度ACALLDELAY1SETBP1.0ACALLDELAY1AJMPPOITMAIN3:AJMPMAIN2直流电机控制子程序直流电机的转速是经过控制PWM脉冲的占空比实现的,说究竟就是用软件编一个高低电平的总周期固定的脉冲信号。与步进电机相同要设置一个延时参数(由累加器A给出),为了达到周期固定的目的,我在程序顶用“CPLA”语句使总延时参数不变(总延时参数为255)。关于A的数值的获取,我将直流电机的最高转速设为2550转/分。恰巧是交流电机转速的两倍,这样就能够借用沟通电机的数值办理程序,不过将输入的数值的减小的倍数变为了10,则A中的数值为:(A)=(7FH)

1000/10+(7EH)

100/10+(7DH)

10/10+(7CH)/10=(7FH)

100+(7EH)

10+(7DH)(因为(7C)H<10,故忽视)直流电机单元控制子程序流程图开始转速>2550?YN调用数据办理子程序,将办理结果送A调用含有A延时参数的高低电平子程序控制直流电机的转速NP3.5=0?返回图3-7直流电机单元控制子程序流程图汇编程序及说明DCM:AJMPKWD;调用输入数值办理子程序LOOP1:SETBP1.4;ACALLDELAY2CPLACLRP1.4ACALLDELAY3CPLAmova,#0fehmovsbuf,ahereD:JNBTI,hereD;

等候串行口发送完CLRTI;jnbp3.5,main3AJMPLOOP1DELAY2:MOVR7,A;

延时

10ms子程序DL7:MOVR6,#0FFH;DL4:DJNZR6,DL4;DJNZR7,DL7RETDELAY3:MOVR7,A;

延时

10ms子程序DL5:MOVR6,#0FFH;DL8:DJNZR6,DL8;DJNZR7,DL5;KWD:MOVA,BUF3;

键盘输入办理CJNEA,#2,CASE4MOVA,BUF2CJNEA,#5,CASE5MOVA,BUF1CJNEA,#5,CASE5MOVA,BUF0CJNEA,#0,CASE5THUD:MOVA,BUF3;

千位MOVB,#100MULABMOV83H,AHUND:MOVA,BUF2;

百位MOVB,#10MULABMOV82H,AMOVA,BUF1;

十位MOV81H,AMOVA,BUF0MOVB,#10;

个位DIVABMOV80H,AADDA,81HADDA,82HADDA,83Hajmploop1CASE4:JNCMAIN3AJMPHUNDCASE5:JNCMAIN3AJMPTHUD变换单元子程序ADC0809工作时将0-5V的模拟电压变为0-FFH(255)的数值经并行口送A,因为沟通电机的最高转速被我设在了1275转/分,于是要将A中的数值扩大5倍(1275/255=5)送显缓区。比方(A)=F1H(241),则应显示1205(2415=1205),即显缓区各单元的容为:(7FH)=1,(7EH)=2,(7DH)=0,(7CH)=5用汇编语言变换数值的过程用语言较难表达,我在流程图中详尽的表达出来了。A/D变换单元子程序流程图开始置ADC0809地点启动A/DA/D变换成数值送A商除以2007FH(千位)余数商除以207EH(百位)余数商除以27DH(十位)余数送A并乘57CH(个位)返回图

3-8A/D

变换单元子程序流程图2.汇编程序及说明ADC:MOVDPTR,#0BFFFH;

置0809地点MOVXDPTR,A;

启动

A/D变换HERE:JB3.2,HERE;

等候

A/D变换结束MOVXA

,DPTR;

读A/D变换值以下程序的作用是把收集到的存在

A中0-FFH的数值扩大

5倍后送各位数值的显缓区。MOVB,#200;DIVAB;MOVBUF3,A;MOVA,B;

A

除数送B除以200商存千位显缓区余数送AMOVB,#20DIVAB;MOVBUF2,A;

A

A

除以除以

20存B百位显缓区2存商于十位显缓区MOVA,BMOVB,#2DIVABMOVBUF1,AMOVBUF0,B;

存余数于个位显缓区ADDCA,#0ACALLDISP;

调用显示AJMPMAIN第4章软硬件调试4.1硬件调试硬件是软件的基础,只有保证硬件上的正确才能使设计出来系统顺利履行软件传达的指令。正是因为这样,达成电路板的制作以后,并无立刻编制程序,而是先对硬件进行检查、调试。键盘/显示单元的调试1.键盘单元的调试图4-1键盘单元的硬件图键盘是最简单也是最简单调试出来的,选择了丈量电阻的方法对它进行调试。第一将万用表打到欧姆挡,挨次按下各个按钮,同时丈量按下的按钮的相应的引脚与单片机上的P3.4或P3.5(键盘单元是经过P3.4、P3.5接受高低电平的)引脚之间的电阻能否靠近“0”(键盘与单片机之间的连线也有电阻)。十六个按钮丈量下来所有合格,算是牛刀小试吧。显示单元的调试显示单元的接线密度较大,在仿真调试前,先目测了一下电路板的焊接面,没有发现所担忧的碰线的状况。接着用万用表丈量了显示单元电源接口的电阻,图4-2显示接口单元的硬件图阻值180,属于正常值。这样一来就义正词严的把显示单元与单片机接口连结后,用仿真机调试了。在仿真软件输入以下调试程序:ORG0000HAJMPDISPORG0030HDISP:MOVSP,#60H;

置货仓指针SETBP3.3;

同意

TXD引脚同步移位脉冲输出LOOP:MOVA,#0;

显示的值送

AADDA,#09;

加上偏移量MOVCA,A+PC;

查段码表

SEGTAB,拿出段码MOVSBUF,A;

送出显示HERE1:JNBTI,HERE1;

查问

TI

状态,1字节的段码输出完否?CLRTI;

1

字节的段码输出完,清

TIAJMPLOOP;

返回TAB:DB0C0H,0F9H,0A4H,0B0H,99H;

共阳极段码表,

0,1,2,3,4DB92H,82H,0F8H,80H,090H,0FFH,0BFH;5

,6,7,8,9,

暗,-END编译通事后,翻开仿真机的电源,显示单元显示四个“8”,但是小数点都不亮(此后发现其余组也有存在这类问题的,是数码管出缺点)。全速履行程序后,显示没有任何变化。接下来的两天里,向来在检查显示电路,一直没有找到问题。没有方法,只好问老师,经过老师我认识到从前也有同学也实用串行口显示的,但并无发现这类问题。实践是查验真谛的独一真谛,我拿来了从前的电路板,再用自己的程序进行仿真,仍是不可以显示。后经确立程序的确没有问题后,又找来了从前发现仍是不可以对显示单元进行仿真。用万用表丈量TXD引脚(移位时钟脉冲输出口)电压不到1V,这时其余组的同学也反应串行口无法发送数据。最后经老师与另一台仿真机比较,发现仿真机的一块非门(74LS04)坏了(图4-1),换了好的非门,显示单元调试成功。图4-374LS04的PROTEL电路图一开始我们没有确立是仿真机的问题,就是因为仿真机对单片机的其余功能都能仿真,大家就认为仿真机是好的。沟通电机控制单元的调试DAC0809的接线不算复杂,在仿真软件输入下边的调试程序:ORG0000HAJMPACMORG0030HACM:MOVSP,#60H;

置货仓指针MOVA,#0MOVDPTR,#7FFFH

;

置DAC0832地点LOOP:MOVXDPTR,A

;D/A

变换INCANOPAJMPLOOPEND调试过程中当A的值在0-0FFH之间变化使,输出端的电压只变化了4次,图4-4沟通电机控制接口单元的硬件图并无像预期的那样连续变化。在确立接线无误后,我的第一反响是运放器存在问题,因为这时接在电路中的运放器是一般的741运放(图4-1),预计是运放的精度不够,于是我将运放换成了高精度的OP07(图4-2),仍是存在这类问题。我找来了他人相关DAC0832的课程设计用的电路板,经过对照没有发现接线问图4-5原来的741运放接线图题。后经万用表丈量,发现模拟地虚焊。从头焊接模拟地,DAC0832调试成功。图4-6改后的OP07运放接线图在调试过程中,当运放器只接-9V电压时,输出电压为负,有时DAC0832不工作的时候,OP07也会输出细微的负电压,为保护变频器,在调试过程中我在OP07的输出口上串了一个二极管(图4-3中可见),并将放大电路的放大倍数变为可调(串了个10K可变电阻)。接口单元的调试ADC0809的接线比DAC0832复杂,但由在课程设计中已经使用过该芯片,因此对它其实不陌生。在仿真软件输入以下调试程序:ORG0000HAJMPADORG0030HAD:MOVSP,#60H;置货仓指针MOVDPTR,#0BFFFHMOVXDPTR,AHERE:JBP3.2,HEREMOVXA,DPTREND经过单步履行发现,程序在履行“here:jbp3.2,here”语句时常常无法持续往下履行,即便能往下履行,A中数值一直为“00H”,其实不随输入的电压值变化。我第一检查0809的模拟通道选择口,A、B、C三个引脚接地,输入电压接在INT0口,都正确。图4-7A/D接口单元的硬件图那就只好是0809与单片机之间的接线有误了,想到刚才履行“here:jbp3.2,here”语句时有无法持续的现象,于是我对0809的EOC引脚进行检查,没有发现硬件问题。接着又对0809的OE(输出同意信号)接线进行检查,发现本应接在单片机上RD的线误接在了RD旁边的XTAL2上(图4-4),更正后0809调试成功。图4-8RD与XTAL2的空间关系图4-9整体硬件图4.2软件调试硬件调试成功后,我就开始针对硬件编写软件,在软件的调试过程中也碰到了一些问题,有的甚至是我在书籍上没有看到的,因为D/A、A/D变换程序调试中不过在数值的变换过程出现了一些问题,为此下边的表达中我侧重对键盘/显示和综合调试中出现的几个软件问题作出说明。键盘/显示单元的软件调试1.预期的成效我在键盘/显示单元软件的设计思想是每按一下键盘的数字键就让LED更新显示。于是在键盘扫描子程序中,我能够将按键的键码拿出送A后就直接调用显示子程序

温馨提示

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

评论

0/150

提交评论