单片机与PLC开发环境和C简介编者:胡学海开发环境开发系统主要包括:软件开发系统硬件开发系统软件开发系统系统主要包括:编译器:指能通过集成开发环境编译、连接,完成将用户程序转换为单片机可执行机器语言的程序。仿真器:在一定的开发环境下,将普通微机仿真成一个特定的单片机。编程器:编程器则是用来将已经编译好的单片机程序写入单片机的ROM中,使之形成一个独立运行的单片机系统。编译器集成开发环境(编译器)在这种开发环境下,设计者不仅可以对程序进行编写,还可以完成编译、连接和汇编工作,甚至可以完成软件的仿真调试。主要有MCS51和KEIL公司推出的集成开发环境KeilµVision。MCS51是一个专用汇编语言开发器,由于在中国进入市场时间较早,流行的范围较宽。KeilµVision集成程度高,应用方便。虽然这个开发环境主要是用来开发单片机C语言程序的,但也可以开发汇编语言程序,能够进行程序的仿真调试。简单介绍MCS51,具体使用在试验课介绍仿真器仿真器最关键的性能指标是可仿真的单片机种类。早期的仿真器都只能仿真特定系列中特定型号的单片机,如8031/32、8051、8751或是PIC的单片机等等,通用性不强,性能较低而且价格极为昂贵。有的单片机生产厂家甚至在单片机内部集成了简单在线调试功能。编程器:与仿真器类似,编程器是对特定的芯片进行编程。因此,一个编程器的性能也在很大程度上取决于其能编程芯片的种类、数量。此外,编程器的编程速度、稳定性等也是在选择编程器时需要考虑的因素。近几年来,许多单片机内部集成了在线可编程技术(ISP),通过串口便可以方便的对单片机进行编程。在线下载的电路图4-10中电路的基本原理:RST置高电平,然后向单片机串行发送编程命令。P1.7(SCK)输入移位脉冲,P1.6(MISO)串行输出,P1.5(MOSI)串行输入(要了解详细编程原理可以参考AT89S51的数据手册)。使用并口发出控制信号,74373只是用于信号转换,因为并口直接输出高电平的电压有点没到位,使用其他芯片也可以,还有人提出直接接电阻。并口引脚1控制P1.7,引脚14控制P1.5,引脚15读P1.6,引脚16控制RST,引脚17接74373LE(锁存允许),18-25这些引脚都可以接地。建议在你的单片机系统板上做个6芯的接口。注意:被烧写的单片机一定是最小系统(单片机已经接好电源、晶振,可以运行),VCC、GND是给74373提供电源的。软件可以使用一些共享软件,如聂忠强编写的EASY51,稳定性高,如图4-11所示。图4-11EASY51软件编程环境示意图该软件看上去简单但易于使用,有一点特别,当右击图中按钮后,可以把相关操作设置为自动模式(只有打开文件、擦除芯片、写FLASHROM、读FLASHROM和效验数据可以设置),单击“自动完成”后会依次完成这些操作,并在开始时检测芯片。当“打开文件”设为自动后,第2次烧写同一个文件时不必再去打开文件,软件会自动刷新缓冲。软件在WindowsXP、Windows2000可以使用(管理员登陆的),在Windows98、WindowsME使用并口模式时会更快些。这个软件同时支持串口编程器和并口下载线。操作正常结束后会有声音提示。如果没有声卡或声卡坏了,则声音会从机箱扬声器中发出。注意:记得在CMOS设置中把并口设为ECP模式。硬件调试环境主要包括:信号源:信号发生器,用来仿真单片机应用系统监控的被测信号示波器:实时监视和真实显示被测信号,可以监控单片机应用系统工作是否正常。万用表:用来测量电阻、电压、电流等基本电参数。在这里介绍一种直接使用计算机声卡的综合硬件调试系统图4-12综合硬件调试系统界面图五种工作方式如下:lX:单踪示波器;lX1,X2:双踪示波器;lX1+X2:两路信号相加;X-Y:两路信号分别做X轴,Y轴输入。这一种方式类似通用示波器中用李萨如图形测频率的方式;频域:显示信号的频谱分布。它的使用非常简单,首先要制作测试电缆,简单的方法是用两个3.5的立体声插头,并将两段三芯屏蔽线接上,另一端可接上鱼夹,如果要求不高可直接使用耳机线。但这样一定要注意输入信号的幅度,否则容易烧坏声卡。启动程序后,示波器已处于工作状态,有五种工作方式可供选择。l图4-13示波器工作状态选择界面图增益的调节如图4-14所示。PAUSE可将示波器屏幕暂停,以便观察,再次按下结束暂停。暂停时仍能调整各项参数。可将示波器屏幕存为位图文件,需先将屏幕暂停,调整好后再保存。图4-14中的两个滑尺用于调节左右声道增益(-12dB),上下两排按钮调节范围是-30dB,总增益为二者相加(-44dB)。图4-14增益调节界面图l图4-15文件保存界面图按下RECORD可将输入信号保存为WAV文件,再次按下停止记录,如图4-15所示。需要按下电源按钮来启动频率计,如图4-16所示图4-16频率计使用界面图频率是对输入信号进行FFT得到的,每秒可以更新约10次,显示误差约有10hz,如果想得到准确的频率值,可利用信号发生器的输出信号和示波器利用李萨如图形法测得。如果将FFT取样数提高,误差可以小于1hz,但会加大运算量,在实际中似乎没有必要,如图4-17所示。信号发生器(如图4-18所示):需要按下电源按钮来启动信号发生器。这是一个频率很准确的双路正弦波发生器,由于采样的特性所限,高频部分有所失真,但在50Hz-15KHz时波形都相当好,输出幅度可通过调节增益按钮实现,可以拉动滑尺调节频率,按下左边的按钮可精确设置输出频率。万用表(如图4-19所示)是一个有趣的附件,需要按下电源按钮来启动它。它可以测电阻、电容、电感和交流电压的有效值。测电阻、电容、电感时需要同时打开信号发生器,选择合适的输出信号频率。按照原理图把待测元件和标准元件接入电路。按下输入基准,把基准值输入,选择测量方式,LED屏上即可显出待测值,如图4-20所示。图4-19万用表界面图图4-20LED显示结果图声卡的正确设置是该软件正常工作的前提,设置时大致按以下步骤进行:(1)打开声音高级控制。(2)选择录音属性,打开录音音量控制面板,将输入方式选择“LINE”。(3)关闭不必要的声音特效,如混响环绕等,以避免左右声道互相干扰。(4)如果无信号时背景噪声较大,可尝试将一些选项静音,特别是CD音频。(5)调整输出和输入的平衡,可借助示波器部分和信号发生器部分实现。如果使用其他声卡,可参照以上步骤设置。51单片机C语言程序设计51的C语言与ANSIC语言兼容,但是具有单片机的一些特殊表达方法。C51的编程高手是先学习汇编语言的人。他能根据单片机结构特点编写出最简短有效的程序。当前常见的C51编译器是:KeilCKeilC可以从许多网站下载KeilC支持多种单片机仿真,对一些单片机的仿真功能需要购买。KeilC还支持一种在SST89C58单片机中固化了仿真软件的自制仿真器,只需安装一个RS232C驱动电路就可以进行硬件仿真C51变量定义特点位变量:SBIT变量名=可位寻址字节^位号,可位寻址字节可为SFR中寄存器的位,也可以是用BDATA定义过的片内RAM中可位寻址的变量。存储类型:data直接寻址片内数据区(00-7fH)长度8位bdata可位寻址片内数据区(20-2fH)长度8位idata间接寻址片内数据区(00-ffH)特别52系列的80~FFH区间,汇编中必须使用@r0,@r1寻址。pdata分页片外数据区类似movxa,@r0xdata片外数据区类似movxa,@dptrcode代码存储区8位变量:用CHAR定义,它实际已经可以不代表字符。前面冠以Unsigned定义0~FFH的8位变量,signed定义-128~+127之间的变量。C51的头文件简介用#include函数.h语句REG51.h:专用寄存器include文件。例如8031/8051均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。Keilc在你选择芯片型号时能自动选择对应文件。absacc.h:绝对地址include文件。该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。stdlib.h:动态内存分配函数。string.h:缓冲区处理函数。其中包括拷贝比较移动等函数如:memccpymemchrmemcmpmemcpymemmovememset这样很方便地对缓冲区进行处理。stdio.h:输入输出流函数。流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的getkey.c及putchar.c源文件,然后在库中替换它们即可。intrins.h:本征库函数(参看下页)。intrins.h:本征库函数C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBCbitvar测试该位变量并跳转同时清除。_chkfloat_:测试并返回源点数状态。KEIL环境下编程作为单片机的开发,首先是要在开发环境中选择合适的目标——CPU,keil支持很多种51核的单片机。在keil中选择单片机型号,如图4-0、图4-1所示。图4-0单片机型号的选择示意图1(1)图4-0是keil的主界面,在图4-0执行“Project”/“NewProject”命令,即出现图4-1的画面,然后选择所用的单片机即可。S52和C52的内部结构完全一致,只是前者多了ISP功能,所以选择AT89C52作开发可以完全烧写到S52单片机中。图4-1单片机型号的选择示意图2(2)选择好单片机后,建立一个新文件,并保存为后缀为“.c”的文件。(3)然后在新建的文件中添加头文件,AT89X52.H。(4)接下来向工程中添加文件,如下图4-2、图4-3所示。图4-2文件添加示意图1图4-3文件添加示意图2(5)然后再依次加入相应的文件,头文件等就构成了一个开发工程。当所有编程工作完成后选择工具栏的编译按钮即可对工程进行编译,如图4-4所示。图4-4程序编译调用示意图结果如图4-5所示。图4-5程序编译结果示意图从上面可以看出程序的大小等信息,如代码长度为4006个字节,即占用ROM4k左右的空间。如没有错误即可进行仿真调试。使用工具栏上“debug”中的“红色的d”按钮进入,如图3-6所示。图4-6仿真调试按钮位置图进入调试的画面如图4-7所示。通过选择外设菜单(peripherals)下面的子菜单,可以打开I/0端口窗口、中断串口和串口窗口等。调试通过后,即可生成hex代码,但需要进行设置才能生成,方法是在“project”窗口执行“Target”/“optionfortarget”命令,如图4-8所示。l图4-8hex代码生成设置图再随后出现的窗口中选择“createhexfile”,如图4-9所示。l图4-9hex文件创建图完成后单击“确定”按钮,再重新编译项目,即可在相应的工程文件目录中生成hex文件,利用此文件通过ISP口就可以将写好的程序写入单片机中。前面所述的调试是软件调试,keil也支持硬件调试,但需要相应的硬件仿真器,具体操作可参考相应生产厂商的手册。KEILC应用要点1.打开KeilμVision2编译器(双击桌面图标)。2.点击菜单栏中的“Project(工程)”,然后选择“NewProject”,在弹出的对话框的文件名中输入你想保存的工程名。然后点击“保存”。3.在“Project”下拉菜单中选择“SelectDeviceforTarget‘Target1’”,选择我们要用到的单片机,这里我们选择“Intel”中的“805