• 2.97 MB
  • 2022-04-22 11:20:02 发布

某汽车驾驶室噪声分析结构设计

  • 51页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'江苏技术师范学院毕业设计说明书(论文)某汽车驾驶室噪声分析结构设计第1章课题分析与方案论证1.1课题任务分析本课题主要实现用单片机控制交流、直流、步进三种电机转速的目的,并采集变频器转速输出口的电流信号将交流电机的实际转速显示出来。实验室现有的西门子变频器有一模拟量输入口,在该口输入0-10V的电压,变频器就可以输出不同频率的交流电,达到控制交流电机转速的目的,为此对于交流电机的转速控制只要将单片机产生的数字信号转化为模拟电压信号与实验室现有的西门子变频器的模拟量输入口接驳即可;交流电机的转速显示则需将变频器输出的电流模拟信号转换为数字信号送单片机。步进电机通过环行分配器控制各绕组的通电顺序运转,分配器有软件和硬件之分。实验室的步进电机是通过硬件环行分配器驱动的,因而只要使单片机输出不同频率的脉冲至硬件环行分配器就可以控制步进电机的转速。还可以从单片机上引出一个口,通过控制这个口的高低电平让步进电机正转或反转。直流电机的转速控制只要改变直流电机的输入电压就能实现,为此利用单片机产生PWM脉冲送直流电机的驱动电路,由驱动电路产生不同的电压至直流电机,从而达到直流电机的转速控制。本实验平台要求三种电机的调速电路以及模/数转换电路相互独立,以便在以后做不同的实验时只需将相应的电路与单片机控制电路接驳。为此需要将各电路的硬件和系统的软件模块化,其中硬件部分首先将各电路设计成一个个独立的单元,然后用插口将各单元电路与单片机控制单元相连;软件的模块化则通过在主程序中调用各子程序实现。1.2方案论证尽管所要控制的交流电机的额定转速为1400r/min,所要的A/D、D/A芯片的分辨率最小为1/1400第51页共54页 江苏技术师范学院毕业设计说明书(论文),但考虑到本次设计任务只是锻炼我们的实践能力和方便以后教学,没有必要去片面的追求高精度而增加硬件成本,为此直接选用了市面上较为常见的八位D/A(DAC0809)、A/D(ADC0832)转换芯片,而没有将D/A、A/D芯片的选择在方案中作为考虑对象。本次方案论证主要对键盘/显示接口电路进行选择。方案一:1.键盘/显示器单元电路方案选用通用并行接口芯片8155作LED显示和键盘的输入。其中,8155的PA口为输出口,控制键盘列线的扫描,PA口同时又是4位LED显示器的位扫描口,PB作为显示器的段码口,PC口作为键盘行线状态的输入口。2.交流电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断处理后经P0输出8位数字量信号经D/A转换芯片DAC0832进行转换,产生相应的模拟电压信号,再将模拟电压信号通过二级运算器放大后,输入西门子变频器MM420的模拟量输入口,去控制交流电动机的转动。3.步进电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断处理后经P1.0、P1.1口输出步进电机的控制信号,经74LS07正向放大后送步进电机驱动电路。4.直流电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断处理后经P1.0口输出PWM信号,将此脉冲信号送直流电机驱动电路控制直流电机的转动。方案二:1.键盘/显示器单元的电路方案选用五片“串入并出”移位寄存器74LS164扩展五个8位并行输出口:一个8位并行输出口用于键盘的列线使用,其余的四个8位并行输出口用于控制4个LED段选口作静态显示。2.交流电机单元的转速控制方案第51页共54页 江苏技术师范学院毕业设计说明书(论文)由AT89C51单片机将键盘输入信号进行判断处理后经P0输出8位数字量信号经D/A转换芯片DAC0832进行转换,产生相应的模拟电压信号,再将模拟电压信号通过二级运算器放大后,输入西门子变频器MM420的模拟量输入口,去控制交流电动机的转动。3.步进电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断处理后经P1.0、P1.1口输出步进电机的控制信号,经74LS07正向放大后送步进电机驱动电路。4.直流电机单元的转速控制方案由AT89C51单片机将键盘输入信号进行判断处理后经P1.0口输出PWM信号,将此脉冲信号送直流电机驱动电路控制直流电机的转动。综合上述两种方案,区别在于所采用的键盘、显示接口电路不同。方案一:选用通用并行接口芯片8155作LED显示和键盘的输入,这样就会和D/A转换芯片DAC0832共用P0口资源,需要进行片选,软件工作量大,硬件接线复杂。方案二:直接使用89C51的串换行口外扩键盘/显示器。应用串行口方式0的输入方式,在串行口外接移位寄存器74LS164,构成键盘/显示器接口。这种静态显示方式的优点是亮度大,显示闪烁感小,且CPU不必频繁地为显示服务,因而主程序可不必扫描显示器,软件设计比较简单,整个接口电路硬件也不复杂。通过比较我发现:第二种方案软、硬较第一种方案简单,且充分利用了89C51单片机的串行口资源,节约了成本。为此,我采用第二种方案。最终确定的整体方案框图如下:显示单元单片机键盘单元A/D转换单元交流电机单元步进电机单元直流电机单元图1-1整体方案框图第51页共54页 江苏技术师范学院毕业设计说明书(论文)1.3设计步骤图1-2设计步骤第51页共54页 江苏技术师范学院毕业设计说明书(论文)第2章硬件电路根据第一章中的各单元电路方案,细化总体框图如下:显示接口单元电路键盘接口单元电路单片机D/A转换接口单元电路直流驱动接口单元电路电路A/D转换接口单元电路硬件环行分配器变频器步进电机直流电机交流电机图2-1系统结构图下面先介绍涉及的硬件知识点,再说明各单元电路的设计方法,最后给出总体设计图。2.1主要芯片简介2.1.1AT89C51AT89C51是ATMEL公司生产的MCS-51系列芯片,是一种低功耗、高性能的片内含有4KB快闪可编程/擦除只读存(FPEROM-FLASHPROGRAMMABLEANDERASABLEREADONLYMEMORY)的8位CMOS微控制器。芯片上的FPEROM允许在线编程或采用通用的非易失存储编程器对程序存储器重复编程。AT89C51的引脚图如图2-1所示:第51页共54页 江苏技术师范学院毕业设计说明书(论文)图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:该引脚为单片机的上电复位和掉电保护端。第51页共54页 江苏技术师范学院毕业设计说明书(论文)RST引脚是复位信号的输入端,复位信号是高电平有效。复位操作有上电自动复位和按键手动复位两种方式。(3)、主电源引脚:Vcc:接+5V电源正极(4)、外接晶体引脚:XTAL1:接外部石英晶体的一端。它是一个反相放大器的输入端,这个放大器构成了片内震荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部震荡信号是输入端。XTAL2:接外部石英晶体的另一端。在单片机内部,它是片内震荡器的反相放大器的输出端。当采用外部时钟时。2.1.2D/A转换芯DAC0832D/A转换接口设计,主要是选择D/A转换集成芯片,配置外围电路及器件,实现数字量至模拟量的线性转换,并不涉及D/A转换器的结构设计,也不必对其内部电路作详细分析。1.DAC0832的内部结构及其引脚DAC0832的内部结构主要由两面三个8位寄存器与一个D/A转换器组成。这种结构使输入的数据能有两次缓冲,因此在操作上十分方便与灵活。DAC0832是电流型输出,应用时需要外接运算放大器使之成为电压型输出。DAC0832为20脚双列直插芯片,芯片的引脚与逻辑结构如图所示。图2-3DAC0832芯片的引脚与逻辑结构第51页共54页 江苏技术师范学院毕业设计说明书(论文)DAC0832的各管脚的功能如下:——8位数据输入端,常和CPU的数据总线相连,用于输入CPU送来的待换的数字量,DI7为最高位。ILE——数据允许锁存信号引脚,高电平有效。——输入寄存器选择信号脚,低电平有效。——输入寄存器写选信号,输入寄存器的锁存信号/LE1由ILE、、的逻辑组合产生,为高电平时,输入寄存器状态随输入数据线变化,的负跳变将输入数据锁存。——传送控制输入线,低电平有效。——DAC寄存器的写选通信号。DAC寄存器的锁存器锁存信号由和/XFER的逻辑组合而成,为高电平时,DAC寄存器的输出随寄存器的输入变化,负跳变时,输入寄存器的内容打入DAC寄存并开始D/A转换。——参考电压输入端,一般在,由稳压电源提供。——运算放大器反馈信号输入端,通常接到运算放大器输出端。Iout1、Iout2——电流输出端,其值随DAC内容线性变化、Iout1+Iout2=常数。为保证额定负载下输出电流的线形度,Iout1、Iout2引脚上的电位尽量接近地电平。因此,Iout1、Iout2通常接运算放大器输入端。当输入数字为全”1”时,Iout1输出电流最大,约为:,全”0”时,输出电流为0。——电源输入端,可在范围内。AGND——模拟地。DGND——数字地。通常上两种地线接在一起。第51页共54页 江苏技术师范学院毕业设计说明书(论文)2.1.3A/D转换芯片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-4 ADC0809引脚与逻辑结构图3.外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装。下面说明各引脚功能。IN0~IN7:8路模拟量输入端。2-1~2-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8第51页共54页 江苏技术师范学院毕业设计说明书(论文)路模拟输入中的一路。如表2-1所示。本次课程设计中,我们将A、B、C接地,选择IN0输入通道。表2-1 ADDA、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输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。2.1.4移位寄存器74LS16474LS164是8位串入并出移位寄存器。第51页共54页 江苏技术师范学院毕业设计说明书(论文)图2-574LS164移位寄存器(1)A、B为串行输入端(2)QA~QH为串行输出端(3)CLK为串行时钟输入端(4)为串行输出清零端(5)VCC为+5V电源输入端(6)GND为接地端2.2硬件接线分析与设计2.2.1键盘接口单元电路设计键盘接口单元电路主要为电机的转速输入提供解决方案,并能对所要控制的电机进行选择,以及启动A/D转换。本设计中键盘接口电路采用一片74LS164串入并出八位输出,接收端使用P3.4、P3.5的第一功能,通过判断这两个口的高低电平,再结合74LS164就可以判断是哪个键按下,图2-6为键盘接口电路。图2-6键盘接口单元电路第51页共54页 江苏技术师范学院毕业设计说明书(论文)1.CLK引脚接线说明图2-7CLK引脚接线上图中164的CLK为串行时钟输入端,与单片机的移位时钟脉冲输出口TXD相连。2.串行数据接线说明图2-8A、B引脚接线上图中164的A、B为串行数据输入口,A、B并联后与单片机的串行数据输出口相连。3.MR接线说明图2-9A、B引脚接线由于164做键盘扩展用不需要对输出清零,故上图中MR接+5V高电平。2.2.2显示接口单元电路设计显示接口单元电路主要为键盘输入的数值提供显示方案。本设计采用静态显示的方式,考虑到直流、交流电机的最高转速达到千转,为此用四片74LS164(串入并出移位寄存器)驱动四只LED发光二极管。第51页共54页 江苏技术师范学院毕业设计说明书(论文)图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实现八位段码显示时也不要对输出清零,故接+5V高电平。3.多位数值显示的接线说明图2-12多位数值显示的接线第51页共54页 江苏技术师范学院毕业设计说明书(论文)由于164遵循“先入先出”的原则,故用164实现4位数值显示时只要将上级164的Q7引脚与下级的A、B引脚相连就能实现。1.LED限流电阻的选择一般LED段码的驱动电流在5-10mA左右,为此选用了750的电阻,则本设计中LED段码的驱动电流为6.7mA(5/750=6.7mA)。2.2.3交流电机接口单元电路设计交流电机接口单元电路为将单片机的数字信号转换为变频器的模拟量输入口能识别的模拟电压信号(0-5V)提供解决方案。本设计采用8位D/A转换芯片DAC0832先将单片机产生的数字信号转换为电流信号,再通过第一级运放(OP07)将DAC0832输出的电流信号转换为电压信号;接着用第二级运放(OP07)把电压信号进行放大,在设计时将放大电路的放大倍数设为可调,实际调试时可以通过调节10K的可变电阻将交流电机的输入转速与实际转速相近。图2-13D/A接口电路第51页共54页 江苏技术师范学院毕业设计说明书(论文)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接地。2.2.4A/D接口单元电路设计A/D接口单元电路为采集到的变频器的模拟量能被单片机识别提供解决方案。本设计采用8位A/D转换芯片ADC0809,ADC0809的分辨率为1/255,而设计的交流电机的最高转速为1275r/min,这样本设计中的A/D采集的最小分辨率为5r/min。为了在以后的实验中能用A/D转换芯片单独采集电压信号,在设计中将ADC0809的INT0口和地线预留了接口。第51页共54页 江苏技术师范学院毕业设计说明书(论文)图2-17A/D接口电路1.输入模拟量的接线说明图2-18输入模拟量的接线由于变频器输出的是0-20mA,而ADC0809只能采集电压信号,故用两个510的电阻并联后接地,使电流信号转换为0-5V电压信号。上图中的运放是射随器的接法,为了增强变频器输出的带载能力。2.路模拟通道的选择图2-19模拟通道的选择由于只用一路通道作为变频器模拟量的输入,为简化电路将模拟通道选择信号A、B、C接地,选择IN0口作为模拟量的输入口。3.ALE、START接线说明第51页共54页 江苏技术师范学院毕业设计说明书(论文)图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(时钟信号)接线说明第51页共54页 江苏技术师范学院毕业设计说明书(论文)图2-23ALE接线图ADC0809一般使用频率为500kHz的时钟信号,而单片机使用的是600MHz的晶振,经六分频后由89C51的ALE引脚输出的是1000kHz的时钟信号,此因将ALE引脚上的信号经74LS74二分频后得到500kHz的时钟信号连接到ADC0809的ALE(时钟信号)引脚。在这里把74LS74当作一个二分频的分频器使用。2.2.5直流电机驱动接口单元电路设计本设计采用功率MOSFET单电源方式驱动电路。图2-24直流电机驱动接口单元电路各元件在驱动电路中的功能如下:光耦的驱动采用PNP形式的三极管9012,这样当控制上为高电平时,就不会导通,防止89C51在未初始化时电机运转。4N25起到耦合脉冲和隔离单片机系统输出部分的作用,使两部分的电流信号独立。本设计中在三极管的输出回路中串了510的电阻,因此在三极管完全导通时光耦的驱动电流约为10mA(5/51010mA)。第51页共54页 江苏技术师范学院毕业设计说明书(论文)74LS07同相驱动器是作为IRF540场效应管输入端的驱动,在74LS07的输出口接了5.1K的上拉电阻。三极管(IRF540)是起到功率放大的作用。它是功率MOSFET,可以用逻辑电平直接驱动。2.2.6电源接口单元电路设计电源接口单元电路为各接口单元电路提供电源解决方案。本设计中单片机、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.8V(12=16.8)的直流电输出,最后经7809(+9V稳压管)、7909(-9V稳压管)变为9V电压输出。+5V的电压直接通过稳压管7805经7809获得。2.2.7总体电路图第51页共54页 江苏技术师范学院毕业设计说明书(论文)图2-26总体电路图第51页共54页 江苏技术师范学院毕业设计说明书(论文)第3章软件设计开始时先初始化显示程序,接着分别调用键盘扫描子程序、显示子程序,最后返回。其中DA、AD的转换程序,直流电机驱动程序,步进电机驱动程序的执行,分别通过扫描键盘得到的键码进行跳转。由于驱动步进电机和直流电机的脉冲信号发生程序需要单片机不停将P1口置高、低电平,为避免死循环,让这种电机停止,并使程序顺利返回到主程序,还设有返回按钮,通过在上述两种电机的驱动程序中判断该键的值来决定是否返回。为节约键盘资源,我将返回键编码在显示总清键上,通过复用显示总清键实现;DAC0832具有输入锁存的功能,这样在启动了DAC0832之后CPU就可以不再为D/A转换服务,而是直接转到主程序,这样一来就没有必要单独再设让D/A转换输出为零的按键,要使D/A转换输出为零,只须用键盘输入四个“0”再启动D/A即可。3.1MAIN程序开始时先初始化显示程序,接着分别调用键盘扫描子程序以及显示子程序或某单元驱动子程序,最后返回。MAIN程序对显示子程序或某单元驱动子程序的调用是通过判断键码是否大于9来实现的。当键码小于等于9时,在主程序中调用显示,将取得的键码显示出来;当键码大于9时,则查转移指令表执行相应的子程序。第51页共54页 江苏技术师范学院毕业设计说明书(论文)1.MAIN程序流程图:开始初始化显示调用键盘扫描子程序(取得键码送A)A>9?N调用显示子程序Y调用分支程序转移子程序返回图3-1MAIN程序流程图2.汇编程序及说明主程序开始时先置堆栈指针,接着设置串行口工作方式,初始化显缓区内容地址。其程序如下:MAIN:MOVSP,#60H;置堆栈指针MOVSCON,#00H;设置串行口工作方式0MOVR0,#7FH;初始化显缓区单元地址MOVR1,#7FHSTART:MOVBUF0,#0bh;初始化显示缓冲区MOVBUF1,#0bhMOVBUF2,#0bhMOVBUF3,#0bhLCALLDISP;调用显示在主程序中对键盘扫描子程序、显示子程序或某单元驱动子程序进行调用。其程序如下:LOOP:ACALLKEYI;调用显示第51页共54页 江苏技术师范学院毕业设计说明书(论文)MOV@R1,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子程序3.2.1多分支程序转移子程序分支程序转移子程序为键码大于9时,调用单元驱动子程序提供解决方案。它的工作方式是:当键码大于9时,对键码进行除以10的运算并取余数送A,将余数作为跳转的分支程序号。1.多分支程序转移子程序流程图:第51页共54页 江苏技术师范学院毕业设计说明书(论文)开始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;转移指令表首址JMP@A+DPTR各分支程序的转移指令表:TAB:AJMPACMAJMPSETMJMPERTM1AJMPDCMAJMPADC第51页共54页 江苏技术师范学院毕业设计说明书(论文)AJMPMAINTAB:AJMPACMAJMPSETMAJMPSETM1AJMPDCMAJMPADCAJMPSTART3.2.2键盘单元扫描子程序在键盘扫描子程序的作用是取得键码送累加器A。1.键盘扫描子程序流程图开始扫描键盘有键按下?延时是抖动引起的?YN取得键码送A返回图3-3键盘扫描子程序流程图2.汇编程序及说明第51页共54页 江苏技术师范学院毕业设计说明书(论文)扫描程序子程序执行时先使7474LS164输出全为低电平(列线),这样就通过查询P3.4(第1行)、P3.5(第2行)的电平来判断是否有键按下。其程序如下:KEYI:MOVA,#00H;使所有列线为0的编码送AMOVSBUF,A;扫描键盘,使所有列线为0KL0:JNBTI,KL0;串行输出完否?CLRTI;串行输出完,清TIKL1:JNBP3.4,PK1;第1行有键闭合吗?如有,跳PK1进行处理JBP3.5,KL1;第2行有键闭合吗?没有,跳KL1PK1:ACALLDL10;调用10ms延时子程序DL0,进行软件消抖ACALLDL10JNBP3.4,PK2;判断是否是抖动引起的?JBP3.5,KL1;是抖动引起的,转KL1PK2:MOVR7,#08H;不是抖动引起的在进行软件消抖确定有键按下后,就逐列输出低电平,并记列号于R3,再查询行线状态,当1行有键按下时记行首键号0于R4,当1行有键按下时记行首键号8于R4,最后将按下的键所在位置的列号和行首键号相加获得键码。其程序如下:MOVR6,#7FH;判断是哪一个键按下,7FH为使第一列为低MOVR3,#00H;R3为列号寄存器MOVA,R6;KL5:MOVSBUF,A;列扫描码从串行口输出KL2:JNBTI,KL2;等待串行口发送完CLRTI;清TIJNBP3.4,PKONE;读第1行线状态,第1行有键闭合,跳PKONE处理JBP3.5,NEXT;读第2行线状态,第2行有键被按否?MOVR4,#08H;第2行有键被按下,行首键号08H送R4AJMPPK3;PKONE:MOVR4,#00H;第1行有键被按下,行首键号00H送R4第51页共54页 江苏技术师范学院毕业设计说明书(论文)PK3:MOVSBUF,#00H;等待键释放,发送00H使所有列线为低电平KL3:JNBTI,KL3;CLRTI;发送完毕,清TIKL4:JNBP3.4,KL4;判断行状态JNBP3.5,KL4;MOVA,R4;两行线均为高,说明键已释放ADDA,R3;计算得键码,送ARETNEXT:MOVA,R6;列扫描码左移一位,判下一列键是否按下RRA;MOVR6,A;记住列扫描码于R6中INCR3;列号增1DJNZR7,KL5;列计数器R7减1,8列键都检察完否?BACK:RETDL10:MOVR7,#0AH;延时10ms子程序DL:MOVR6,#0FFH;DL1:DJNZR6,DL1;DJNZR7,DL;RET;3.2.3显示单元子程序显示单元子程序的功能是将输入的0-9的键码用阿拉伯数字显示出来,由于显示的数字与键码一致,就可以直接用键码作为查段码表的依据。显示子程序执行时先把P3.3置为高电平,使RXT输出的串行口移位脉冲有效,在输出四位显示之后置P3.3为低电平,使RXT输出的串行口移位脉冲对显示不起作用,避免显示受键盘扫描的影响。第51页共54页 江苏技术师范学院毕业设计说明书(论文)初始化显示位数、显缓区单元地址开移位脉冲输出查表并显示关移位脉冲输出返回R7=0?开始1.显示子程序流程图NY图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字节的段码输出完,清TI第51页共54页 江苏技术师范学院毕业设计说明书(论文)DECR0;指向下一个显示单元DJNZR7,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,暗,-3.2.4交流电机单元控制子程序执行交流电机控制子程序时,首先对输入的数值进行判断,由于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+220+32+3/5=246(7C单元数值四舍五入)第51页共54页 江苏技术师范学院毕业设计说明书(论文)1.交流电机单元控制子程序流程图开始转速>1275?NY调用数据处理子程序,将处理结果送A启动DAC0832D/A转换输出控制电机的转速返回图3-5交流电机单元控制子程序流程图2.汇编程序及说明程序执行时先调用键盘输入处理,判断输入值是否大于1275,其程序如下:ACM:AJMPKDA;调用键盘输入处理ACM1:MOVDPTR,#7FFFH;置DAC0832地址MOVX@DPTR,A;D/A转换AJMPSTART键盘输入处理程序先判断输入的数值是否大于电机的转速将输入的数值缩小5倍,其程序如下:KDA:MOVA,BUF3;键盘输入处理CJNEA,#1,CASE0;分别对各位进行数值的判断MOVA,BUF2第51页共54页 江苏技术师范学院毕业设计说明书(论文)CJNEA,#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;大于最大数跳转至主程序第51页共54页 江苏技术师范学院毕业设计说明书(论文)AJMPTHU;小于最大数跳转至DA转换3.2.5步进电机单元控制子程序步进电机的速度控制是通过控制脉冲的延时程序实现的,延时的参数也是通过累加器A送延时子程序的。同样存在显示数值和累加器A之间数值转换的问题,由于时间有限和条件限制,我对步进电机的转速没能进行测量,只是为计算的方便将步进电机的最高转速定为了255转/分。当输入的数值为0时,进入步进电机的点动控制。执行步进电机控制子程序时:(A)=(7EH)100+(7DH)10+(7CH)1.步进电机单元控制子程序流程图开始转速>255?NY调用数据处理子程序,将处理结果送AA=0?调用含有A延时参数的高低电平子程序控制步进电机转速点动控制步进电机P3.5=0NNP3.5=0返回YY第51页共54页 江苏技术师范学院毕业设计说明书(论文)图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;第51页共54页 江苏技术师范学院毕业设计说明书(论文)KWS:MOVA,BUF3;键盘输入处理(在交流电机驱动程序中已作说明)CJNEA,#0,CASE2MOVA,BUF2CJNEA,#2,CASE3MOVA,BUF1CJNEA,#5,CASE3MOVA,BUF0CJNEA,#5,CASE3以下程序将输入的数值处理为0-FFH的数送A。HUNS:MOVA,BUF2;百位数暂存82H单元MOVB,#100MULABMOV82H,AMOVA,BUF1;个位数暂存81H单元MOVB,#10MULABMOV81H,AMOVA,BUF0个位数直接存AADDA,81H;各位数相加ADDA,82HAJMPLOOP0;脉冲循环以下程序对键盘数值作进一步判断(在交流电机驱动程序中已作说明)。CASE2:JNCMAIN2AJMPHUNSCASE3:JNCMAIN2AJMPTHUSMAIN3:AJMPMAIN2以下是点动控制子程序。POIT:MOVA,#0F7H第51页共54页 江苏技术师范学院毕业设计说明书(论文)MOVSBUF,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:AJMPMAIN23.2.6直流电机控制子程序直流电机的转速是通过控制PWM第51页共54页 江苏技术师范学院毕业设计说明书(论文)脉冲的占空比实现的,说到底就是用软件编一个高低电平的总周期固定的脉冲信号。与步进电机一样要设置一个延时参数(由累加器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,故忽略)1.直流电机单元控制子程序流程图开始转速>2550?YN调用数据处理子程序,将处理结果送A调用含有A延时参数的高低电平子程序控制直流电机的转速NP3.5=0?返回图3-7直流电机单元控制子程序流程图2.汇编程序及说明DCM:AJMPKWD;调用输入数值处理子程序LOOP1:SETBP1.4;第51页共54页 江苏技术师范学院毕业设计说明书(论文)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,#100第51页共54页 江苏技术师范学院毕业设计说明书(论文)MULABMOV83H,AHUND:MOVA,BUF2;百位MOVB,#10MULABMOV82H,AMOVA,BUF1;十位MOV81H,AMOVA,BUF0MOVB,#10;个位DIVABMOV80H,AADDA,81HADDA,82HADDA,83Hajmploop1CASE4:JNCMAIN3AJMPHUNDCASE5:JNCMAIN3AJMPTHUD3.2.7A/D转换单元子程序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用汇编语言转换数值的过程用语言较难叙述,我在流程图中详细的表达出来了。第51页共54页 江苏技术师范学院毕业设计说明书(论文)1.A/D转换单元子程序流程图开始置ADC0809地址启动A/DA/D转换成数值送A7FH(千位)除以200商7EH(百位)除以20余数商余数7DH(十位)除以2?商余数送A并乘57CH(个位)返回图3-8A/D转换单元子程序流程图2.汇编程序及说明ADC:MOVDPTR,#0BFFFH;置0809地址MOVX@DPTR,A;启动A/D转换第51页共54页 江苏技术师范学院毕业设计说明书(论文)HERE:JB3.2,HERE;等待A/D转换结束MOVXA,@DPTR;读A/D转换值以下程序的作用是把采集到的存在A中0-FFH的数值扩大5倍后送各位数值的显缓区。MOVB,#200;除数送BDIVAB;A除以200MOVBUF3,A;商存千位显缓区MOVA,B;余数送AMOVB,#20DIVAB;A除以20存B百位显缓区MOVBUF2,A;A除以2存商于十位显缓区MOVA,BMOVB,#2DIVABMOVBUF1,AMOVBUF0,B;存余数于个位显缓区ADDCA,#0ACALLDISP;调用显示AJMPMAIN第51页共54页 江苏技术师范学院毕业设计说明书(论文)第4章软硬件调试4.1硬件调试硬件是软件的基础,只有确保硬件上的正确才能使设计出来系统顺利执行软件传达的指令。正是由于这样,完成电路板的制作之后,并没有立即编制程序,而是先对硬件进行检查、调试。4.1.1键盘/显示单元的调试1.键盘单元的调试图4-1键盘单元的硬件图键盘是最简单也是最容易调试出来的,选择了测量电阻的方法对它进行调试。首先将万用表打到欧姆挡,依次按下各个按钮,同时测量按下的按钮的相应的引脚与单片机上的P3.4或P3.5(键盘单元是通过P3.4、P3.5接受高低电平的)引脚之间的电阻是否接近“0”(键盘与单片机之间的连线也有电阻)。十六个按钮测量下来全部合格,算是牛刀小试吧。2.显示单元的调试显示单元的接线密度较大,在仿真调试前,先目测了一下电路板的焊接面,没有发现所担心的碰线的情况。接着用万用表测量了显示单元电源接口的电阻,第51页共54页 江苏技术师范学院毕业设计说明书(论文)图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字节的段码输出完,清TI第51页共54页 江苏技术师范学院毕业设计说明书(论文)AJMPLOOP;返回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电路图一开始我们没有确定是仿真机的问题,就是因为仿真机对单片机的其他功能都能仿真,大家就以为仿真机是好的。4.1.2交流电机控制单元的调试DAC0809的接线不算复杂,在仿真软件内输入下面的调试程序:ORG0000HAJMPACMORG0030HACM:MOVSP,#60H;置堆栈指针MOVA,#0MOVDPTR,#7FFFH;置DAC0832地址LOOP:MOVX@DPTR,A;D/A转换INCANOP第51页共54页 江苏技术师范学院毕业设计说明书(论文)AJMPLOOPEND调试过程中当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可变电阻)。4.1.3A/D接口单元的调试ADC0809的接线比DAC0832第51页共54页 江苏技术师范学院毕业设计说明书(论文)复杂,但由在课程设计中已经使用过该芯片,因此对它并不陌生。在仿真软件内输入下列调试程序:ORG0000HAJMPADORG0030HAD:MOVSP,#60H;置堆栈指针MOVDPTR,#0BFFFHMOVX@DPTR,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第51页共54页 江苏技术师范学院毕业设计说明书(论文)转换程序调试中只是在数值的转换过程出现了一些问题,为此下面的叙述中我着重对键盘/显示和综合调试中出现的几个软件问题作出说明。4.2.1键盘/显示单元的软件调试1.预期的效果我在键盘/显示单元软件的设计思想是每按一下键盘的数字键就让LED更新显示。于是在键盘扫描子程序中,我可以将按键的键码取出送A后就直接调用显示子程序,不需要单独设置显缓区。图4-10键码取出送A后就直接调用显示的显示子程序2.出现的问题在软件的调试中并没有实现预期的功能。只是在第一次按下键盘时LED能正确显示数字,当第二次按下键盘时前一次显示的数字就变成了乱码,也就是说LED只能正确显示当前按下的数字。3.问题的分析百思不得其解后,经老师用仿真机的单步执行功能,跟踪程序后发现每当执行显示程序中的“SETBP3.3”语句后,前面显示的数值就发生了变化。此时谜团终于解开了,执行显示程序中的“SETBP3.3”语句,74LS164(移位寄存器)中的数值就换成了SBUF(串行口的缓冲寄存器)中的当前内容,让已经显示的数字发生了改变。但是如果这样的话,执行“SETBP3.3”语句后显示的位数应该会增加一位(即与单片机直接相连的164中移入SBUF中的内容,而这片164中的内容应该移入与它串联的下一级164)。对此我的解释是:在执行“SETBP3.3”语句后SBUF中的内容立即移入了与单片机直接相连的164中,速度快到164还没有来得及将自身的内容移入与它串联的下一级164,于是只有与单片机直接相连的164第51页共54页 江苏技术师范学院毕业设计说明书(论文)中的内容发生了改变,而其他164中的内容没有变。4.问题的解决在程序中加入显缓区,每次调用显示时,将显缓区四个单元的内容送显,而不是仅仅送显一个八位二进制数。图4-11加了显缓区的显示子程序4.2.2多转移查表指令的调试1.预期的效果当取得的键盘编码大于9时,就将键码值除以10,并将余数作为所要转移的程序号值送A,通过JMP指令把程序转移到相应的分支程序的入口,从而执行相应的子程序,驱动相应的电机运转或A/D采集。图4-12修改前的多转移查表指令程序2.出现的问题按下键盘中编码值大于“9”的键时,不能执行相应的子程序。3.问题的分析通过对程序的单步跟踪分析,发现按下键盘的编码值为“10”的键时,跳转到了“AJMPSETM”语句,并没有执行意料中的“AJMPACM”语句。这时想起编写程序时,并没有仔细揣摩查转移指令表转移程序的原理,只是对A执行了两次“INCA”。经过和显示查表指令的对比,我豁然开朗:由于AJMP第51页共54页 江苏技术师范学院毕业设计说明书(论文)是二字节指令,当然要对A乘2,而不是加2。4.问题的解决将原来的两句“INCA”改为“RLA”即可。修改后的程序如下图:图4-13修改后的多转移查表指令程序4.2.3软件的综合调试1.预期的效果只要各个子程序都能正确执行,那么只要像串糖葫芦那样将各个子程序一样串在一起就可以实现软件的联合调试。2.出现的问题图4-14软件综合调试中常出现的错误图4-5中显示了软件综合调试中出现最多的错误,第一个错误是说有标号在程序中出现了两次;第一个错误是说要转移的目的程序超出了跳转的范围。3.问题的分析由于所用的仿真软件具有跳转到错误程序标号的功能,为此我双击提示的第一个错误提示,跳转到了步进电机驱动子程序中的“CASE0:JNCMAIN”语句,经排查我发现在交流电机的驱动子程序中也存在标号“CAS0”。双击第二个错误提示,跳转到了步进电机驱动子程序中的“CASE1:JNCMAIN”语句,联想到“AJMP”与“LJMP”所跳转的范围是不一样的,我估计是“CASE3:JNCMAIN”语句与标号为“MAIN”的程序之间相隔得太长,以至于“JNC”指令“够不着”。4.问题的解决第51页共54页 江苏技术师范学院毕业设计说明书(论文)对于标号相同的问题,将步进电机驱动子程序中的“CASE0”改为了“CASE1”就得以解决。对于第二种问题通过执行多条跳转指令的方式来解决。其解决的方法如下图所示:图4-15一次跳转不能到达目的标号的解决方法第51页共54页 江苏技术师范学院毕业设计说明书(论文)参考文献[1]宋培义,刘立新.单片机原理接口技术与应用[M].北京:中国广播电视台出版社,1999.[2]梁恩主,梁恩维编著.Protel99SE电路设计与仿真应用[M].北京:清华大学出版社,2005.[3]潘新民,王燕芳编著.微型计算机控制技术[M].北京:人民邮电出版社,1999.[4]马志良编著.单片机原理与控制技术[M].北京:机械工业出版社,2002.[5]李广弟,朱月秀,王秀山编著.单片机基础(第二版)[M].北京:北京航空航天大学出版社,2001.[6]何宏编著.单片机原理与接口技术[M].北京:国防工业出版社,2006.[7]秦晓梅,陈育斌编著.单片机原理综合实验教程[M].大连:大连理工大学出版社,2004.[8]公茂法,马宝甫,孙辰.单片机人机接口实例[M].北京:北京航空航天大学,1998.[9]胡汗才,单片机原理及其接口技术[M].北京:清华大学出版社,1996.[10]张振荣,晋明武,王毅平.MCS-51单片机原理及其实用技术[M].北京:人民邮电出版社,2000.[11]李秉操,张登举,付寿英,徐飞.单片机接口技术及其在工业控制中的应[M].陕西:陕西电子编辑部,1991.[12]赵依军.单片微型计算机接口技术[M].湖北:湖北计算机协会,1988.[13]张俊谟.单片机中级教程[M].北京:北京航空航天大学出版社,2000.[14]梁建明.电阻炉炉温控制系统[J].兵工自动化,2003,Vol.18(3):123~126.[15]BoseBK.PowerElectronicsandMotionControl-TechnologyStatusandRecentTrends[J].IEEE.1993:828~836.第51页共54页 江苏技术师范学院毕业设计说明书(论文)致谢毕业设计是我们在大学期间最后的课程,是几年学习的一个好的总结,也是我们学习成果具体的体现;所以我们搞毕业设计必须有一个良好的态度,认真地对待,只有这样才可以学到更多的专业知识,为将来的工作做好各个方面准备。首先要感谢带我毕业设计的李四老师,我学的很多机电方面的知识都是他传授的。在毕业设计中遇到的问题,老师都能得到老师的悉心指导和帮助。往往都是在吃饭和下班的时间,老师继续为我们留在学校。通过毕业设计我不但更深的掌握了单片机控制方面的知识,更为重要的是也学到了做人做事应该所必要的素质,那就是李老师那种治学严谨,平易近人,无私奉献的精神。其次要感谢我的同学们,感谢他们在设计的过程中给我的帮助。没有他们的帮助,我也不可能很好的完成本次设计。感谢从我进入大学以来,学校所有老师在学习方面和生活方面对我的关心。最后感谢为我们毕业设计辛苦的所有老师。第51页共54页'