重庆交通大学学生实验报告实验课程名称微机原理与接口技术B开课实验室机电自动控制实验室学院年级专业班学生姓名学号开课时间2017至2018学年第1学期总成绩教师签名蒙志强注:实验成果考核方式采用非实验报告形式的,可自行制定实验二Protues软件使用一.实验目的:掌握单片机仿真软件。二.实验器材:PC机一台三.实验内容:任务A:闪烁灯1、任务要求:如图2.1所示,在P1.0端口上接一个发光二极管D1,使D1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。2、电路原理图:图2.1电路原理图任务B:模拟开关灯1、任务要求:如图2.2所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。2、电路原理图:图2.2电路原理图任务C:多路开关状态指示1、任务要求:如图2.3所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。2、电路原理图:图2.3电路原理图四.实验代码:任务A:ORG0//起始地址为00HSTART:CLRP1.0//p1.0置零,开关灯亮LCALLDELAY//延时0.2sSETBP1.0//p1.0置1,开关灭LCALLDELAY//延时0.2sLJMPSTART//主程序为死循环DELAY:MOVR5,#20//延时子程序,延时0.2秒D1:MOVR6,#20//赋值R6为20D2:MOVR7,#248//赋值R7为248DJNZR7,$DJNZR6,D2DJNZR5,D1RET//子程序返回END//程序结束任务B:ORG00HSTART:JBP3.0,LIG//JB指定位1转移CLRP1.0//开关按下,把p1.0置零,灯亮SJMPSTART//主程序为判断开关状态,点亮灯的死循环LIG:SETBP1.0//开关未按下,把p1.0置1,灯灭SJMPSTART//跳转至主程序END//程序结束任务C:ORG00HSTART:MOVA,P1//一次把p1端口的状态全部读入ANLA,#0F0H//取高四位状态来显示RRA//右循环RRARRARRAORlA,#0F0H//或命令MOVP1,A//把A的值赋给p1口SJMPSTART//跳转至主程序END//程序结束五.实验结果:任务A仿真结果实验结果实现了P1.0接的发光二极管一亮一灭。任务B仿真结果实验结果实现了P3.0接的开关控制p1.0接的发光二极管的亮灭。任务C仿真结果实验结果实现了p1.0-p1.3接的开关分别控制p1.4-p1.7接的发光二极管的亮灭。六.实验调试分析这次是第一次微机实验,对于理论课并没有学得很好的我,其实是对这次实验是充满期待的,希望能在试验中恍然大悟理论课所讲的内容。这节课主要讲的是编程软件和仿真软件,让我初步感受到了单片机的神奇,可以通过不同的接口和元器件实现多种功能。虽然课上没有把软件完全熟练,但课后仔细琢磨了一下,达到了基本可以独立操作的水平。实验三p1口亮灯实验一.实验目的通过实验了解单片机最小系统;掌握P1口作为输入输出方式使用时,CPU对P1口的操作方法。二.实验器材PC机一台单片机开发板一台三.实验内容1、任务要求:任务1:任务1:在P1.0端口上接一个发光二极管D1任务2:在P1.0端口上接一个发光二极管D1,使D1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。任务3:在P1.3端口上接一个发光二极管D4,使D4在不停地一亮一灭,一亮一灭的时间间隔为0.1秒。(自己编写程序)任务4:监视开关s1(接在P3.4端口上),用发光二极管D4(接在单片机P1.3端口上)显示开关状态,如果开关合上,D1亮,开关打开,D1熄灭。任务5:监视开关s1、S2、S3、s4(接在P3.4,P3.5,P3.6,P3.7端口上),用发光二极管D4、D5、D6、D7(接在单片机P1.3-P1.6端口上)显示开关状态,S1-S4分别控制D4-D7的开关(开关闭合,对应的灯亮,开关断开,对应的灯灭)(自己编写程序)2、实验电路图(参考开发板原理图):四.实验代码:任务1:ORG0START:CLRP1.0//置零LJMPSTART//跳转至主程序END//程序结束任务2:ORG0START:CLRP1.0//置零LCALLDELAY//无条件转移至延时子程序SETBP1.0//将p1.0口置为高电平LCALLDELAY//无条件转移至延时子程序LJMPSTART//跳转至主程序DELAY:MOVR5,#20//延时子程序,延时0.2秒D1:MOVR6,#20//赋值R6为20D2:MOVR7,#248//赋值R7为248DJNZR7,$DJNZR6,D2DJNZR5,D1RET//子程序返回END//程序结束任务3:ORG0START:CLRP1.0LCALLDELAYSETBP1.0LCALLDELAYLJMPSTARTDELAY:MOVR5,#20D1:MOVR6,#10D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND任务4:ORG00HSTART:JBP3.4,LIG//JB指定位1转移CLRP1.3//开关按下,p1.3置0SJMPSTART//主程序为判断开关状态,点亮灯d死循环LIG:SETBP1.3//开关未按下,把p1.0置1,灯灭SJMPSTART//跳转至主程序END//程序结束任务5:ORG00HSTART1:JBP3.4,LIG1CLRP1.3SJMPSTART1LIG1:SETBP1.3SJMPSTART2START2:JBP3.5,LIG2CLRP1.4SJMPSTART2LIG2:SETBP1.4SJMPSTART3START3:JBP3.6,LIG3CLRP1.5SJMPSTART3LIG3:SETBP1.5SJMPSTART4START4:JBP3.7,LIG4CLRP1.6SJMPSTART4LIG4:SETBP1.6SJMPSTART1END五.实验结果:六.实验调试分析这是我第一次到土木楼上课,也是第一次操作单片机。很多同学很快就完成了试验任务,可能是对软件的熟悉程度不够,我比别人多用了一些时间,但最终完成了实验要求,有一点小小的成就感。实验四数码管显示实验一.实验目的1、掌握单片机数码管显示原理。2、编程实现数码管的动态、静态显示。二.实验器材PC机一台单片机开发板一套三.实验内容1、任务要求:任务一:查看开发板上电路图,6个数码管同时循环显示0-9数字,时间间隔0.2秒。(静态显示)任务二:编写程序使右边第一个数码管显示6(自己编写代码)任务三:查看开发板电路图,用右边两个数码管显示自己学号最后两位。(自己编写代码)2、实验电路图(参考开发板原理图):四.实验代码:任务一:ORG0START:CLRP2.7//数码管位选(关闭)CLRP2.6//数码管段选(关闭)MOVA,#00H//数码管静态显示(6个数码都显示一样的数字)LCALLDELAY//跳转至延时程序MOVP0,A//将A的值赋给p0口SETBP2.7//开启数码管位选LCALLDELAY//调用延时程序CLRP2.7//关闭数码管位选MOVR1,#00H//将R1赋值为0NEXT:MOVA,R1MOVDPTR,#TABLE//把表d收地址赋值给dptrMOVCA,@A+DPTR//查表指令MOVP0,A//把显示的数字给p0LCALLDELAY//调用延时程序SETBP2.6//开段选LCALLDELAYCLRP2.6//关段选INCR1//数值加一CJNER1,#10,NEXT//循环显示0至9LJMPSTART//跳转至主程序DELAY:MOVR5,#20D2:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH//0,1,2,3,4,5,6,7,8,9END任务二:START:CLRP2.7CLRP2.6MOVA,#0FEHMOVP0,ASETBP2.7CLRP2.7NEXT:MOVP0,#7DHSETBP2.6END任务三:START:CLRP2.7CLRP2.6MOVA,#0FeHMOVP0,ASETBP2.7CLRP2.7NEXT:MOVP0,#06HSETBP2.6LCALLDELAYCLRP2.6MOVP0,#00HLJMPSTART1START1:CLRP2.6CLRP2.7MOVA,#0FDHMOVP0,ASETBP2.7CLRP2.7MOVR1,#00HNEXT1:MOVP0,#3FHSETBP2.6LCALLDELAYCLRP2.6MOVP0,#00HLJMPSTARTDELAY:MOVR5,#1D2:MOVR6,#10D1:MOVR7,#21DJNZR7,$DJNZR6,D1DJNZR5,D2RET五.实验结果:任务一:任务二:任务三:六.实验调试分析实验越到后面,要求就越来越独立了,程序也越来越难。尽管我努力想要跟上同学的脚步,任然被别人狠狠地甩在后面,留下很多内容没有完成。回到寝室后,用了很长时间请教同学,大概还是完成了试验任务。实验五定时器中断实验一.实验目的掌握51单片机定时器编程方法掌握51单片机中断编程方法二.实验器材PC机一台单片机开发板一套三.实验内容1、任务要求:任务1:用单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。并用两位数码显示。(中断法)任务:2:用定时器0的方式1实现第一个发光二极管以200ms间隔闪烁。(查询法、中断方式两种方式编程)四.实验代码:INCCONNUM//计数值加一任务一:DULAEQUP2.6//p2.6为数码管段选位WELAEQUP2.7//p2.7为数码管段选位CONNUMEQU30H//定义了一个技术变量MIAOEQU31H//数码管要显示的数字SHIWEIEQU32H//定义了一个十位的变量GEWEIEQU33H//定义了一个个位的变量ORG00HLJMPSTART//跳转至主程序ORG0BH//定时器0入口地址LJMPINT0X//跳转到中断服务程序START:MOVA,#0//将累加器A置0MOVCONNUM,A//计时器清零MOVA,MIAO//将miao的置送入ALCALLINIT_T0//跳转至子程序INIT_T0NEXT1:LCALLDISPLAY//跳转到数码管显示程序SJMPNEXT1//循环INIT_T0:MOVTMOD,#01HMOVTH0,##3CHMOVTL0,#0B0H//初始化TMOD,TH0,TL0SETBEA//开cpu中断SETBET0//开定时器0中断SETBTR0//定时开始RET//子程序返回INT0X:MOVTH0,#03CHMOVTL0,#0B0H//重装MOVA,CONNUMCJNEA,#20,NEXT2//和20比较,不相等跳转到中断服务程序MOVCONNUM,#0INCMIAO//显示d数值加一MOVA,MIAOCJNEA,#60,NEXT2//和60比较,不相等跳转至中断服务程序MOVMIAO,00H//计数到60,把秒数清零NEXT2:RETIRETDELAY:MOVR1,#2//延时子程序DELAY3:MOVR2,#248DJNZR2,$DJNZR1,DELAY3RET//延时程序DISPLAY://显示百十个位CLRDULA//清零CLRWELA//清零MOVA,MIAOMOVB,#10//赋值B为10DIVAB//a保存十位,b保存个位MOVSHIWEI,AMOVA,BMOVGEWEI,ASETBWELA//将WELA置为高电平MOVA,0XFE//选择要显示那个数码管MOVP0,ACLRWELA//位选