南京晓庄学院电子工程学院实验报告课程名称:单片机系统设计与应用姓名:森专业:电子信息科学与技术年级:14级学号:052016年12月1日实验项目列表序号实验项目名称成绩指导教师1单片机仿真软件的使用2单片机I/O接口应用实验——流水灯3外部中断实验——工业顺序控制模拟4定时/计数器实验——矩形波5定时/计数器实验——计数器6综合实验78910注:1、实验箱端口为com6。2、芯片选择切换到513、停止运行使用实验箱上的复位按钮实验室号:___实验时间:成绩:实验一仿真软件的使用1.实验目的和要求1)熟悉KeilC51软件界面,以及编辑、编译、运行程序的步骤;2)掌握单片机仿真软件使用和调试的方法。2.实验原理KeilC51软件使用在KeilC51集成开发环境下,建立一个工程并编辑源程序,熟悉KeilC51集成开发环境下各种菜单、命令的使用。3.主要仪器设备(实验用的软硬件环境)安装有KeilC51软件的PC机1台4.操作方法与实验步骤KeilC51软件使用(1)建立用户文件夹(2)建立工程(3)建立文件并编码。输入以下源程序,并保存在项目所在的目录中(4)把文件加入工程中(5)编译工程。编译时观察在界面下方的“Build”页中的到编译错误信息和使用的系统资源情况等。(6)调试。利用常用调试命令,如复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令进行调试,观察并分析调试结果。(7)目标代码文件的生成。运行生成相应的.HEX文件。5.实验内容及程序1)从DATA区地址起始地址为40H的连续10个内存单元的内容传送到XDATA区起始地址为2000H的10个内存单元中。注意:DATA区地址起始地址为40H的连续10个内存单元必须先赋初值。P83-5源程序#includereg51.h#defineucharunsignedcharxdataunsignedcharbuffer1[10]_at_0x2000;//在xdata区定义数组变量BUF1,首地址为2000Hdataunsignedcharbuffer2[10]_at_0x40;//在data区定义数组变量BUF2,首地址为40Hvoidmain(void){uchari;for(i=0;i10;i++)buffer1[i]='A';for(i=0;i10;i++)buffer2[i]=buffer1[i];//把data区中的内容传送给xdata区while(1);}6.实验现象P83-5运行效果图2)将DATA区地址为20H的单元赋初值为05H,地址为21的单元赋初值为06H,将这两个单元的数据拼成56H,存入XDATA区地址为2000H的单元。程序(程序中请对应写出关键注释语句)P275源程序#includereg51.h#includeabsacc.h#defineaXBYTE[0x2001]#definebXBYTE[0x2002]main(void){a=0x05;b=0x06;a=a4;b=a|b;}P275运行效果图实验室号:___实验时间:成绩:实验二单片机I/O接口应用—流水灯1.实验目的和要求1)进一步掌握单片机仿真软件的使用方法。2)掌握单片机最小系统的构成。3)掌握单片机I/O口的使用方法,如何控制I/O口检测按键及驱动LED发光二极管。4)熟悉C51程序编程和调试方法。2.电路原理图(附proteus电路原理图)3.主要仪器设备(实验用的软硬件环境)安装有KeilC51软件与Proteus仿真软件PC机1台单片机试验箱一套4.实验说明及实验步骤P1口为准双向口,P1的每一位都能独立地定义为输出线或输入线,作为输入的口线,必须向锁存器相应位写入“1”,该位才能作为输入。延时程序的实现。现常用的有两种方法,一是用定时器中断来实现,一是用指令循环实现。在系统时间允许的情况下可以采用后一种方法。本实验中延时子程序采用指令循环来实现。1)源程序设计分析设计要求,根据任务要求,绘制源程序流程图,然后使用KeilC进行源程序文件的设计与调试,观察并分析程序调试结果。2)硬件运行加载目标代码至单片机中,运行,观察运行结果5.实验内容及程序1)在P1口实现流水灯。#includereg51.h#includeintrins.h//包含移位函数的头文件#defineucharunsignedchar#defineuintunsignedintvoiddelay(uinti)//延时函数{uchart;while(i--){for(t=0;t120;t++);}}voidmain()//主程序{P1=~0xfe;//高电平点亮第一个灯while(1){delay(500);//500为延时参数P1=_crol_(P1,1);//P1中的数据循环左移1位,实现流水灯}}2)任选某P端口接开关,控制流水灯的启动和停止。接线:P10-P17接D0-D7;P2.x接K0#includereg51.h#includeintrins.h//包含移位函数的头文件#defineucharunsignedchar#defineuintunsignedintvoiddelay(uinti)//延时函数{uchart;while(i--){for(t=0;t120;t++);}}sbitKEY=P2^0;//定义P2^0口作为开关voidmain()//主程序{P1=~0xfe;//高电平点亮第一个灯while(1){if(KEY==0)//开关接地,低电平启动流水灯{delay(500);//延时P1=_crol_(P1,1);//P1中的数据循环左移1位,实现流水}}}*3)设计花样流水灯:自行设计两种花样流水灯,利用开关实现两种流水灯的切换,例如K0控制第一种流水灯的启动和停止;K1控制第二种流水灯的启动和停止,两种流水灯可以通过两个开关实现切换。程序(程序中请对应写出关键注释语句)#includereg51.h#defineucharunsignedchar//定义无符号字符型变量sbitS0=P0^0;//将S0定义为P0.0unsignedcharstate;voidflow(void);//申明函数flowvoidkey_scan(void);//申明函数key_scanvoiddelay()//延时函数{uchari,j;for(i=0;i125;i++)for(j=0;j125;j++);}voiddelay1ms(void)//延时消抖函数{uchari,j;for(i=0;i10;i++)for(j=0;j10;j++);}voidmain(){state=0;while(1){key_scan();switch(state){case0:P1=0xff;break;case1:flow();break;}}}voidkey_scan(void)//开关检测函数{P0=0xff;if((P0&0x0f)!=0x0f)//检测到有按键按下{delay1ms();//延时1ms再去检测if(S0==0)state=0;elsestate=1;}}voidflow(void)//流水灯点亮函数{P1=0xfe;delay();P1=0xfd;delay();P1=0xfb;delay();P1=0xf7;delay();P1=0xef;delay();P1=0xdf;delay();P1=0xbf;delay();P1=0x7f;delay();}6.实验讨论及分析如果将P1口高4位定义为输入,低4位定义为输出,将高4位输入的值在低4位显示出来,请写出对应程序。实验室号:___实验时间:成绩:实验三外部中断实验——工业顺序控制模拟1.实验目的和要求1)掌握单片机系统中断原理和使用方法。2)掌握中断处理程序的编写方法2.电路原理图(附proteus电路原理图)3.主要仪器设备(实验用的软硬件环境)安装有KeilC51软件与Proteus仿真软件PC机1台单片机试验箱一套4.实验说明及实验步骤在工业控制中,象冲压、注塑、轻纺、制瓶等生产过程,都是一些继续生产过程,按某种顺序有规律的完成预定的动作,对这类继续生产过程的控制称顺序控制,象注塑机工艺过程大致按“合模注射延时开模产伸产退”顺序动作,用单片机最易实现。1)源程序设计分析设计要求,根据任务要求,绘制源程序流程图,然后使用KeilC进行源程序文件的设计与调试,观察并分析程序调试结果。2)硬件运行加载目标代码至单片机中,运行,观察运行结果5.实验内容及实验程序P1口控制注塑机的八道工序,现模拟控制八只发光二极管的点亮,即正常情况下P1口走亮流水(低电平点亮LED)。P2.4为开工启动开关,高电平启动。未启动及开关停止时LED全灭。INT0为外部故障1输入模拟开关,产生故障1使P1.0~P1.3口接的LED闪烁8次;INT1为外部故障2输入模拟开关,产生故障2使P1.4~P1.7口接的LED闪烁8次;接线:P10-P17接D0-D7;,INT0接KK1-(单次脉冲);INT1接KK2-(单次脉冲)附程序(程序中请对应写出关键注释语句)#includereg51.h#defineucharunsignedchar//定义无符号字符变量#defineuintunsignedint//定义无符号整型变量sbitK0=P2^4;//将K0定义为P2.4voiddelay(uintt);//申明延时函数delay()voiddelay(uintt)//延时函数{ucharj;for(;t0;t--)for(j=0;j125;j++);}voidmain(void){uchardisplay[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯显示数组inta;while(1){if(K0==1)//当开关为1{IE=0x85;IT0=1;//选择外部中断0为跳沿触发方式IT1=1;//选择外部中断1为跳沿触发方式PX0=0;//外部中断0为低优先级PX1=1;//外部中断1为高优先级for(a=0;a9;a++){delay(500);//延时P1=display[a];//将已经定义的流水灯显示数据送入P1口}}elseif(K0==0)//当开关为0{IE=0x00;P1=0x00;//P1口全亮delay(500);//延时}}}voidint0_isr(void)interrupt0//外部中断0的服务函数{ucharn;for(n=0;n8;n++){P1=0x0ff;//全灭delay(500);//延时P1=0xf0;//高4位LED灭,低4位LED亮delay(500);//延时}}voidint1_isr(void)interrupt2//外部中断1的服务函数{ucharm;for(m=0;m8;m++){P1=0x0ff;//全灭delay(500);//延时P1=0x0f;//低4位LED灭,高4位LED亮delay(500);//延时}}开关未启动LED全灭启动开关正常走流水中断T0使P1.0~P1.3口接的LED闪烁8次使P1.4~P1.7口接的LED闪烁8次中断结束回到主程序又开始正常走流水运行效果图6.实验讨论及分析1)INT0和INT1的中断优先级如何?在什么样的情况下会出现中断嵌套?如果要使INT1的中断优先级为高,该如何修改程序?答:INT0和INT1的中断优先级如何是采用的都是低优先级。在什么样的情况下会出现中断嵌套是T0和T1有一个优先级高。如果要使INT1的中断优先级为高,该如何修改程序是IP=0;改为PX0=0;PX1=1实验室号:___实验时间:成绩:实验四/五定时计数器实验1.实验目的和要求熟悉单片机内部定时/计