您好,欢迎访问三七文档
0单片机C语言程序设计实验指导书成都工业学院通信工程系微电子技术教研室二O一三年九月1实验须知实验是教学的重要实践环节,是理论联系实际,培养实际操作能力和科学研究方法的重要手段,也是培养观察问题、分析问题、解决问题能力的重要方式。要求做到:实验前认真准备,实验中亲自动手、细心观察、认真思考,实验后认真写好总结报告。一、实验守则1、实验前认真阅读实验指导书,搞清原理,明确实验任务,有目的的进行实验,以提高实验课的质量,巩固和加深理论知识。2、必须按实验指导书预习好实验内容,复习教材有关内容,完成规定的预习内容。3、同一实验小组内应适当分工、紧密配合,培养安全工作作风、团结协作精神和爱护公物的优良品质。4、接线前,应合理布置仪器设备和实验板位置,以利于安全、方便的操作,做到文明实验。5、保持实验室安静、整洁,在实验室不吸烟、不喧闹、不随地吐痰、不丢纸屑。6、在实验过程中不得擅自离开,未经实验指导教师的同意,不得随意调换仪器,也不得乱拿实验室或他组的仪器设备。7、实验所记录的波形、数据等实验结果,应经指导教师检查、同意后才能拆除电路并整理放好。8、在实验中应注意人身和设备安全,如在实验中发生事故或异常现象应立即断开电源,保持现场,并立即报告实验指导教师,等后处理。二、实验方法及要求1、每次实验前,首先应熟悉所用仪器、设备的性能等。2、每一实验小组,可由一人担任指挥(可轮流担任)。线路接好先在组内相互检查。再经指导教师检查后,才能通电实验。3、实验中所画波形或测量数据,应当场画好或记录好,并加以分析,如发现波形或数据有不合理之处,应重作一遍或说明其原因。4、实验内容全部完成后,要认真检查实验结果是否合理,有无遗漏,实验结果应经教师检查认可后,方可拆除线路。5、实验结束后,应将仪器设备复归原位,清理好导线、实验桌面,打扫完实验室卫生后,方可离开。三、实验报告1、实验报告是每次实验的全面总结,编写实验报告是实验中的一项基本技能,是每个工程技术人员的基本功之一,决不可马虎从事。2、实验报告必须每人一份,独立完成,报告内容按要求填写,要求书写认真,图表、波形清楚,不得相互抄袭。3、实验报告一般应有下列内容:实验课程、实验名称、实验班级、姓名、同组者姓名、实验日期实验目的、实验内容与实验步骤、实验仪器设备、实验结果、实验结果与结论4、实验报告一律用实验报告纸书写,要求字迹工整,条理清楚。2目录实验一KEILCx51上机指南………………………………………………………3实验二模块化编程…………………………………………………………………4实验三中断实验……………………………………………………………………6实验四循环显示实验………………………………………………………………7实验五基于Protues的闪烁灯控制实验……………………………………………9实验六流水灯控制实验……………………………………………………………12实验七定时/计数器应用实验……………………………………………………17实验八数字钟实验…………………………………………………………………21实验九串行口通信实验……………………………………………………………24实验十A/D转换实验………………………………………………………………26实验十一D/A转换实验……………………………………………………………283实验一KEILCx51上机指南实验目的:掌握仿真器使用;如何建立工程、模块;编译、全编译;如何看信息窗口,看C编译结果,了解汇编与C的关系。实验要求:通过简单程序的输入,检查和执行。熟悉仿真器的使用,了解工程、模块的建立,了解程序的编译以及信息窗口的查看。实验内容及步骤:一.程序:程序功能,延时1s。程序如下:#includereg51.h/*包含51头文件*//*===============定义延时100ms程序=====================*/voiddelay(unsignedintt){unsignedintk=13000;for(;t!=0;--t){k=13000;while(k!=0){k--;}}}main(void){delay(10);for(;;){};}二.实验步骤:⑴建立项目以及文件名在Keil窗口下建立一个新项目,并将模块加入到新项目,在模块下面建立一个文件。注意项目名后缀为x.obj,文件名后缀为x.c。⑵输入程序⑶程序编译,注意编译和全编译的差别。⑷查看信息窗口。⑸将C源程序所对应的.HEX文件反汇编成汇编语言,了解C与汇编语言的关系。实验结果:在主程序for设立断点,通过程序运行时间,查看程序所实现的功能。并修改寄存器的值了解程序功能的变化。4实验二模块化编程实验目的:掌握模块化编程的基本要领,几种类型,模块程序与主程序之间的关系。实验要求:了解汇编至汇编模块程序的调用;了解C与C模块程序的调用;了解C与汇编模块程序的调用。实验内容及步骤:㈠汇编与汇编程序⑴建立模块及文件名⑵输入源程序#includereg51.Hmian(){P1=ox55;f(jj);}⑶编译程序⑷查看程序运行结果㈡C与C模块程序⑴建立模块及文件名⑵输入源程序主程序:#includereg51.htest(){test();f(jj);}模块程序:test(){P1=0x55;}⑶编译程序⑷查看程序运行结果㈢C与汇编模块程序⑴建立模块及文件名⑵输入源程序5主程序:#includereg51.htest(){test();f(jj);}模块程序:test1SEGMENTCODEPubictestRSTtest1Test:P1=0x51retEND⑶编译程序⑷查看程序运行结果6实验三中断实验实验目的:熟悉Cx51单片机中断以及初始化程序的编程方法和响应过程。实验要求:通过实验熟悉中断处理的过程以及Cx51中断过程。实验内容及步骤:⑴建立模块及文件名,在WAVE窗口下建立一个新项目,并将模块加入到新项目,在模块下面建立一个文件。注意项目名后缀为x.obj,文件名后缀为x.c。并在文件里面输入相应程序。⑵输入源程序#includereg51.h/*包含51头文件*/main(void){P0=1;TMOD=0x22;TH0=56;TL0=56;ET0=1;EA=1;TR0=1;for(;;){};voidtimer0(void)interrupt1using2/*用P0口点亮LED*/{staticunsignedintt=5000;t--;if(t==0){t=5000;P0=P01;if(P0==0){P0=1;}};}⑶编译并调试程序⑷运行程序并查看运行结果7实验四循环显示实验实验目的:了解动态显示接口电路的基本原理和程序设计方法。实验要求:通过实验了解七段码的组成原则及动态接口电路,掌握动态扫描的基本原理及显示程序的设计及调试。实验内容及步骤:实验面板上有4块LED显示器,其接口电路如下图所示,8155的PA口为七段码口(字形口),PB口为数位代码口。8155初始化在单片机启动时已完成。单片机通过七段码输出七段码控制显示不同的字符,通过数位代码口输出数位代码控制4块LED中的一位点亮(共阴极接地),每一时刻只能点亮一位,若要求多位轮流点亮,则采用逐位轮显的“动态扫描”法显示。图1硬件连接图⑴程序#includereg51.h/*包含51头文件*//*本程序为循环点亮LED程序,用定时器0进行显示*/unsignedcharled[4]={16,16,16,16,};/*定义显缓*/unsignedcharcodeDDM[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,/*定义段代码*/0x7c,0x39,0x5e,0x79,0x71,00};/*===============定义延时100ms程序=====================*/voiddelay(unsignedintt){unsignedintk=13000;for(;t;t--)8{while(k){k--;}}}/*==================主程序=========================*/main(void){P0=1;TMOD=0x22;TH0=56;TL0=56;ET0=1;EA=1;TR0=1;/*初始化*/for(;;){delay(10);led[0]=8;/*延时约1秒改变1次显示状态*/delay(10);led[0]=16;led[1]=8;delay(10);led[1]=16;led[2]=8;delay(10);led[2]=16;led[3]=8;delay(10);led[3]=16;led[2]=8;delay(10);led[2]=16;led[1]=8;delay(10);led[1]=16;led[0]=8;delay(10);led[0]=7;led[1]=8;delay(10);led[0]=6;led[1]=7;led[2]=8;delay(10);led[0]=5;led[1]=6;led[2]=7;led[3]=8;delay(10);led[0]=4;led[1]=5;led[2]=6;led[3]=16;delay(10);led[0]=3;led[1]=5;led[2]=16;delay(10);led[0]=2;led[1]=16;delay(10);led[0]=1;delay(10);led[0]=16;}}voidtimer0(void)interrupt1using2/*用P0口点亮LED,P1口低四位为位选,200us中断一次,显示切换一位*/{staticunsignedchart=1;t=(++t)&3;P0=0;P1=(P1&0xf0)|~(1t);P0=DDM[led[t]];}⑵调试将程序编译成机器码输入。分别用单步、断点对其进行调试,最后用连续执行EXEC执行程序,检查结果。9实验五:基于Protues的闪烁灯控制实验一.实验目的1.学习P1口的使用方法;2.学习延时子程序的编写二.实验内容在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。三.实验电路原理图图2闪烁灯控制电路按图中要求,在Protues中把图绘制好,将晶振设置为12Mhz。四.程序设计思路⑴延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图1.1所示的石英晶体为12MHz,因此,1个机器周期为1μs,MOVR6,#20;2个机器周期2机TD1:MOVR7,#248;2个机器周期2机TDJNZR7,$;2个机器周期2机TDJNZR6,D1;2个机器周期2机T因此,上面的延时程序时间为2+(2+2×248+2)×20=10.002ms。10由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY:MOVR5,#20D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET⑵输出控制程序设计如图1.1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。五.程序流程图程序流程图如图3所示图3程序流程图六.汇编源程序ORG0000START:CLRP1.0LCALLDEL
本文标题:单片机C实验指导书
链接地址:https://www.777doc.com/doc-2594082 .html