您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 电气技术 > 80C51单片机原理实验指导书
MCS51单片机实验指导书(第2版)淮阴师范学院计算机科学系2006.92006.11.8修改了音乐演奏程序中的有关休止符的BUG2实验板结构实验板结构如下图所示:注意:实验板与PC机连接时一定要先连接串行通信电缆,然后再将其电源线插入USB接口;拆除时先断开其电源,再断开串行通信电缆。否则极易损坏PC机的串口。最好先关闭微机电源,再连接或拆除实验板。实验要求1、实验前预习实验内容,理解实验原理。2、按规定时间进入实验室,登记领取实验板和连接线,按操作程序将实验板连接到PC机上,开始实验。2、实验完毕请指导老师确认后,按操作程序拆除实验板,将连接线收拾好,与实验板一起归还指导老师,方可离开实验室。3、按时撰写并上交实验报告。实验报告格式为:(1)实验目的,(2)实验内容,(3)源代码及流程图,(4)结果记录及分析,(5)思考题,(6)体会及设想。351单片机集成开发环境MedWinV2.39简介1、安装从网站集成开发环境安装程序压缩包,将其释放后,按照默认路径安装到C:\Manley\PmedWin文件夹。2、设置(1)每次启动MedWin会出现对话框,询问使用仿真器还是模拟仿真,应点击[模拟仿真]按钮。(2)设置仿真器点击[设置]—[设置仿真器]命令,选择时钟频率为12兆赫兹。(3)设置工作目录MedWin集成开发环境默认的工作目录为C:\MedWin\PMedWin,建议根据需要建立自己的工作目录。注意:不得使用长文件名或长目录名!(4)设置编译器将C语言编译器C51(文件夹)拷贝到C:\MedWin文件夹下,点击[设置]—[设置编译工具]命令,打开“设置编译工具”对话框,使用汇编语言时选择第一行,使用C语言时选择第二行,如下图所示。3、使用(1)新建项目点击[项目管理]—[新建项目]命令,输入项目名称,点击[确定]按钮,出现“添加项目文件”对话框,输入源代码文件名,如T1.C(或T1.ASM),单击[打开]按钮,出现代码窗口,即可开始编程。(2)打开项目点击[项目管理]—[打开项目]命令,点击项目文件名(项目文件后缀为.mpf),点击[打开]按钮,即可打开上次保存的项目。(3)编译点击[项目管理]—[编译/汇编]命令,启动编译器对源文件进行语法检查并编译,在消息窗口中显示编译结果。(3)模拟仿真当源程序编译无误后,可进行模拟仿真调试。点击[项目管理]—[产生代码并装入]命令,编译器对源程序进行重新编译并装入。这时,可使用[调试]菜单中的相关命令进行调试,如设置断点、单步及全速执行等。4(4)生成目标代码点击[项目管理]—[输出Binary文件]命令,生成BIN文件,用下载工具将其下载到实验板的单片机中执行。STC单片机下载软件STC-ISP的使用该软件界面如下图所示:按照界面上的提示,第一步,设置单片机型号为STC89C51RC,第二步,设置串口号,通常为COM1,第三步,点击[OpenFile]按钮,打开编译生成的BIN文件,第四步,检查实验板的串行通信线及电源线与PC机连接是否良好,并且实验板的电源开关处于关闭状态,第五步,点击[下载]按钮后,再打开实验板电源开关,此时,软件将自动完成程序下载,下载完毕,实验板上的单片机立即开始运行。目前,MCS51内核单片机中STC89C5X(宏晶)和AT89S5X(ATMEL)两种芯片具有在线下载功能。5实验一LED流水灯一、实验目的1.学习单片机并口的使用方法。2.学习延时子程序的编写和使用。3.学习集成开发环境MedWin的安装与使用。4.学习STC单片机在线下载软件STC-ISP的使用。二、实验内容所谓流水灯就是4个发光二极管(LED)轮流点亮,周而复始。实验板上以P3口作输出口,接有四只发光二极管,当单片机的引脚输出为低电平时发光二极管点亮,为高电平时息灭。编写程序,使4个发光二极管循环点亮,时间间隔约0.5秒。三、实验电路连线实验板上与本实验有关的硬件如下图所示。4个LED上串联4个限流电阻,以防止其电流过大而烧坏。单片机的主时钟为11.0592MHz。四、实验说明1、P3口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。输出时需要接上拉电阻,P3口内部有弱上拉,若将外围电路设计为低有效,高无效,则无需再外接上拉电阻。2、为使每次点亮一个LED,应使P3.4~P3.74个端口中有一个为低,其余均为高,延时一段时间后再点亮另一个LED。3、编写for循环构成的软件延时子程序,在MedWin下模拟执行,根据MedWin显示的执行时间,调整循环变量的终值,使延时时间约0.5秒,在晶振频率为11.0592MHz情况下,循环终值约27000。程序如下:voiddelay(void){unsignedinti,j,k,l;for(i=0;i=27000;i++){j++;k++;l++;};}流水灯的主程序为:#includeREG51.Hvoidmain(void){unsignedchari,c[4]={0xef,0xdf,0xbf,0x7f};//从左往右流水i=0;while(1){P3=c[i&3];i++;6delay();}}五、思考1、如何使点亮的LED从右往左移动?2、如何使点亮的LED从两边往中间移动?实验二用一位数码管循环显示0~9一、实验目的1.学习单片机并口的使用方法。2.学习延时子程序的编写和使用。3.学习LED数码管的驱动编码。二、实验内容实验板上有4个LED数码管,编写程序,使最右边的一个LED数码管循环显示0~9十个数字。时间间隔约0.5秒,其余LED数码管关闭。三、实验电路连线7实验板上与本实验有关的硬件如上页图所示。4个共阳的LED数码管上同名的引脚连接在一起,通过限流电阻接到单片机的P0口(段控制)。单片机P2口的4个引脚分别控制4个LED数码管的公共端(位控制)。单片机的主时钟为11.0592MHz。四、实验说明1、P0口和P2都是准双向口,输出时需要接上拉电阻。P0内部没有上拉电阻,P2口内部有弱上拉,本实验外围电路设计均为低有效,故无需外接上拉电阻。2、下表为驱动LED数码管的段代码表,“0”代表对应的笔段亮,“1”代表不亮。若需要在最右边显示数字“5”,只要将从表中查得的段代码2CH写入P0口,再将P2.4置低即可。数字gchdebfa十六进制P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0010100000A0110111011BB201100010623001010102A400111001395001011002C60010010024710111010BA8001000002090010100028A0011000030b0010010125C11100100E4d0010001123E0110010064F0111010074-011111117F3、实现最右边的一个LED数码管循环显示0~9十个数字的C语言程序如下:#includeREG51.H#defineU8unsignedcharcodeU8tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};voiddelay(void){unsignedinti,j,k,l;for(i=0;i=27000;i++){j++;k++;l++;};}voidmain(void){U8i;8P2_4=0;while(1){P0=tab[i];delay();i++;if(i==10)i=0;}}五、思考题1.分别写出六个字母(用于显示十六进制数)的段代码。2.能否交替点亮4个LED数码管?实验三LED数码管的动态驱动一、实验目的1、学习LED数码管的动态驱动编程。2、学习使用定时/计数器。二、实验内容编写程序,使实验板上的4个LED数码管稳定显示4个不同的数字,并使这四位数从0000开始,每秒钟加一。三、实验电路连线本实验有关的硬件见实验二。四、实验说明在实验二中,我们已经能够让某一个LED数码管显示需要的数字,比如选让第一个LED显示“1”,隔一较短的时间(如5毫秒)后关闭第一个LED,让第二个LED显示“2”,如此周而复始,让4个LED依次显1、2、3、4,我们就能看到4个LED上稳定地显示4个不同的数字。当然,每个瞬间只有一个LED被点亮,大家亮的时间相同,均为5毫秒,4个LED数码管点亮一遍需要20毫秒,一秒钟各亮50次,所以看上去不会有闪烁感,但亮度只是实验二中LED亮度的四分之一。要实现每隔5毫秒变换一个LED,最好的方法是使用定时器中断。C51程序如下:#includeREG51.H#defineU8unsignedcharU8tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};U8scn[]={0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管U8buf[4]={0,0,0,0};//显示缓冲区,开机先显示0000U8cnt=0;//扫描计数voidmain(void)9{EA=1;//允许中断TMOD=0x01;//设定时器0为模式1(16位)ET0=1;//定时器0中断允许TH0=0xee;//晶振11.0592MHz,5mSTL0=0;TR0=1;//开始计数while(1);//死循环,等待中断}voidtimeint(void)interrupt1//定时器0中断服务程序{chari;TH0=0xee;//设置定时器时间常数TL0=0;i=cnt&0x03;//求应点亮的LED号(从左到右依次为0,1,2,3)P0=tab[buf[i]];//笔划代码送P0口P2=scn[i];//控制扫描码送P2口if(cnt==200){cnt=0;//到1秒钟,显示的数字加一for(i=3;i=0;i--){buf[i]++;if(buf[i]==10)buf[i]=0;//加到10向前进位elsebreak;}}cnt++;}五、思考题如何让4个LED数码管从0000开始,每秒钟自动加1,前两位代表分,后两位代表秒?实验四数字电子钟一、实验目的进一步熟悉定时/计数器的使用。二、实验内容在实验板上编写程序,实现电子钟功能。时间显示格式为HH.MM,中间的小数点每秒钟闪烁一次。三、实验电路连线本实验有关显示部分的硬件见实验二,按钮连接见实验四。10四、实验说明实验二及实验三中LED数码管的笔划代码均不含小数点(h位为1,小数点不亮),为了让第2个LED的小数点在每一秒的前半秒亮,后半秒灭,应在定时器的中断子程序中,判断当前时间为前半秒,而且动态扫描到第2个LED时,将其笔划代码取出,和0xDF相与后再写入P0口。该电子钟在上电或复位后时间均从00时00分00秒开始,若要使电子钟断电后照常行走,应采取电池供电。为了降低使用成本及减小体积,可采用两节5号电池,其满电量时电压为3伏,89C51单片机的正常工作电压范围为4.5~5.5伏,无法使用,可选用89C2051单片机(电压范围2.7~6伏),最好使用工作电压更低的单片机(如工作电压为1.8伏的AVR单片机)。为了延长电池使用寿命,必须采取一些节电措施,如将LED换成液晶、让单片机不工作时进入休眠方式、适当降低单片机的时钟频率等。五、思考题给电子钟加上能输入当前时间的功能。实验五自动演奏乐曲一、实验目的(1)进一步熟悉89C51定时器/计数器的功能及应用;(2)掌握其初始化与中断服务程序的编程方法;(3)掌握用定时器/计数器产生不同频率方波的编程方法。二、实验内容用单片机的定时器/计数器0作定时器使用,工作于模式1,中断产生方波发声,根据简谱中各个音阶的频率,计算对应的定时时间常数,定时器中断后按此常数赋初值,从而发出对应的音调。将歌曲的音调和节拍各编
本文标题:80C51单片机原理实验指导书
链接地址:https://www.777doc.com/doc-3581974 .html