实验一P1口输入、输出实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。三、实验内容及步骤用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。1、使用单片机最小应用系统1模块。关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。3、启动计算机,打开伟福仿真软件,进入仿真环境。首先进行仿真器的设置,选择仿真器型号、仿真头型号、CPU类型。选择通信端口,点击测试串行口,通信成功既可退出设置,进行仿真。4、根据要求编写源程序,进行编译。编译无误后,点击全速执行按钮运行程序,观察发光二极管显示情况。发光二极管单只从右到左轮流循环点亮。四、流程图及源程序1.流程图开始设置初始值设移位次数数据输出左一位延时移位次数完成?是否(A)P1口循环点灯程序框图1K10033pF33pF12MHzRESETEA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10AT89C5110uFD03Q02D14Q15D27Q26D38Q39D413Q412D514Q515D617Q616D718Q719OE1LE1174LS373270*8VCCVCCVCC2.源程序:ORG00HLOOP:MOVA,#0FEHMOVR2,#8OUTPUT:MOVP1,ARLAACALLDELAYDJNZR2,OUTPUTLJMPLOOPDELAY:MOVR6,#0MOVR7,#0DELAYLOOP:DJNZR6,DELAYLOOP;延时程序DJNZR7,DELAYLOOPRETEND五、思考题(1)对于本实验延时子程序Delay:MOVR6,0MOVR7,0DelayLoop:DJNZR6,DelayLoopDJNZR7,DelayLoopRET本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?六、电路图实验二十字路口交通灯实验一、实验目的1、掌握51系列单片机的常用指令;2、掌握定时器的使用方法;3、掌握十字路口交通灯控制方法。二、实验内容及步骤1、用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。按要求连接电路。2、根据要求编写源程序,编译无误后,全速运行程序。三、实验电路连接P1.0●-----------------------●LED0P1.1●-----------------------●LED1P1.2●-----------------------●LED2P1.3●-----------------------●LED3P1.4●-----------------------●LED4P1.5●-----------------------●LED5四、实验说明l.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始为状态0。状态0:东西红灯,南北红灯;然后转状态1:南北绿灯通车,东西红灯;过一段时间转状态2:南北绿灯闪几次转黄灯亮,延时几秒,东西仍然红灯;再转状态3:东西绿灯通车,南北红灯;过一段时间转状态4:东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯;最后循环至状态1。2.各用一组红、黄、绿色LED分别表示南北方向和东西方向红绿灯。五、实验仪器和设备THKSCM-2单片机开发综合实验装置、PC机、WAVE软件、E6000/S51仿真器+POD8X5X仿真头等。六、流程图及源程序LED_G1BITP1.0;东西绿灯LED_Y1BITP1.1;东西黄灯LED_R1BITP1.2;东西红灯LED_G2BITP1.3;南北绿灯LED_Y2BITP1.4;南北黄灯LED_R2BITP1.5;南北红灯ORG00HSTART:MOVTMOD,#01H;置T0工作方式1MOVTH0,#3CH;置T0定时初值50mSMOVTL0,#0B0HLED3、LED4、LED5分别表示南北方向绿、黄、红灯LED0、LED1、LED2分别表示东西方向绿、黄、红灯CLRTF0SETBTR0;启动T0LOOP0:MOVR2,#20;置1S计数初值50mS*20=1SMOVR3,#10;全亮10SLCALLSTATE0;调用状态0WAIT0:JNBTF0,WAIT0;查询50mS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50mSMOVTL0,#0B0HDJNZR2,WAIT0;判1S到否?未到继续状态0MOVR2,#20DJNZR3,WAIT0;状态0维持10SLOOP1:MOVR2,#20MOVR3,#20LCALLSTATE1WAIT1:JNBTF0,WAIT1;查询50mS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50mSMOVTL0,#0B0HDJNZR2,WAIT1;判1S到否?未到继续状态1MOVR2,#20DJNZR3,WAIT1;状态1维持20SMOVR2,#5MOVR4,#4;闪烁200mSMOVR3,#3;绿灯闪3SLCALLSTATE2;调用状态2WAIT2:JNBTF0,WAIT2;查询50mS到否CLRTF0MOVTH0,#03CH;恢复T0定时初值50mSMOVTL0,#0B0HDJNZR4,WAIT2;判200mS到否?未到继续状态2CPLLED_G1;东西绿灯闪MOVR4,#4;闪烁200mSDJNZR2,WAIT2;判1S到否?未到继续状态2MOVR2,#5DJNZR3,WAIT2;状态2维持3SMOVR2,#20;MOVR3,#2;黄灯亮2SLCALLSTATE3;调用状态3WAIT3:JNBTF0,WAIT3;查询50mS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50mSMOVTL0,#0B0HDJNZR2,WAIT3;判1S到否?未到继续状态3MOVR2,#20DJNZR3,WAIT3;状态3维持2SMOVR2,#20MOVR3,#20;红灯20SLCALLSTATE4;调用状态4WAIT4:JNBTF0,WAIT4;查询50mS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100mSMOVTL0,#0B0HDJNZR2,WAIT4;判1S到否?未到继续状态4MOVR2,#20;DJNZR3,WAIT4;状态4维持20SMOVR2,#5;置50mS计数初值MOVR4,#4;闪烁200mSMOVR3,#3;绿灯闪3SLCALLSTATE5;调用状态5WAIT5:JNBTF0,WAIT5;查询50mS到否CLRTF0MOVTH0,#03CH;MOVTL0,#0B0HDJNZR4,WAIT5;判200mS到否?未到继续状态5CPLLED_G2;南北绿灯闪MOVR4,#4;闪烁200mSDJNZR2,WAIT5;判1S到否?未到继续状态5MOVR2,#5;DJNZR3,WAIT5;状态5维持3SMOVR2,#20;MOVR3,#2;黄灯闪2SLCALLSTATE6;调用状态6WAIT6:JNBTF0,WAIT6;查询50mS到否CLRTF0MOVTH0,#3CH;MOVTL0,#0B0HDJNZR2,WAIT6;判1S到否?未到继续状态6MOVR2,#20DJNZR3,WAIT6;状态6维持2SLJMPLOOP1;大循环STATE0:;状态0,全亮SETBLED_G1SETBLED_Y1CLRLED_R1SETBLED_G2SETBLED_Y2CLRLED_R2RETSTATE1:;状态1CLRLED_G1;东西绿灯亮SETBLED_Y1SETBLED_R1SETBLED_G2SETBLED_Y2CLRLED_R2;南北红灯亮RETSTATE2:;状态2SETBLED_Y1SETBLED_R1SETBLED_G2SETBLED_Y2CLRLED_R2;南北红灯亮RETSTATE3:;状态3SETBLED_G1SETBLED_R1SETBLED_G2SETBLED_Y2CLRLED_R2;南北红灯亮CLRLED_Y1;东西黄灯亮RETSTATE4:;状态4SETBLED_G1SETBLED_Y1CLRLED_R1;东西红灯亮CLRLED_G2;南北绿灯亮SETBLED_Y2SETBLED_R2RETSTATE5:;状态5SETBLED_G1SETBLED_Y1CLRLED_R1;东西红灯亮SETBLED_Y2SETBLED_R2RETSTATE6:;状态6SETBLED_G1SETBLED_Y1CLRLED_R1;东西红灯亮SETBLED_G2SETBLED_R2CLRLED_Y2;南北黄灯亮RET实验三电子时钟实验一、实验目的1、进一步掌握定时器的使用和编程方法2、进一步掌握中断处理程序的编程方法二、实验说明本实验是利用CPU的定时器和实验台上提供的共阴极数码显示电路,设计一个电子时钟。格式如下:XXXXXX由左向右分别为:时、分、秒本实验使用的是单片机内部计数器的定时器功能,有关设置主要针对定时器/计数器工作方式寄存器TMOD。具体为:工作方式选择位,设置为方式2;计数/定时方式选择位,设置为定时器工作方式。定时器每100uS中断一次,在中断服务程序中,对中断次数进行计数,100uS计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。单片机P0口输出字段码,P1口输出位码。三、实验内容及步骤1、单片机最小应用系统1的P0口接动态扫描显示的段码口a~dp,P1口接位码口S1~S6。2、安装好伟福仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。3、启动计算机,打开伟福仿真软件,进入仿真环境。选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。4、编写电子时钟.ASM源程序,编译无误后,全速运行程序,6LED数字显示时、分、秒值。四、流程图及源程序1、流程图主程序框图序定时中断子程序框图是中断返回中断入口保护现场恢复现场秒值加1小时值清0秒值清0,分钟加1分值清0,小时加1设置下次10000次计数值10000次计数值减1到24小时到60分钟到60秒计数值为0显示数据送缓冲转换成显示数据调用显示子程序转换成显示数据显示数据送缓冲读取分钟值显示数据送缓冲读取秒值开始置定时器模式及工作方式启动定时器设置初始常数读取小时值转换成显示数据否否否否2、原程序:LEDBufequ60h;显示缓冲Hourequ40hMinuteequ41hSecondequ42hC100usequ43hTickequ10000T100usequ256-50ljmpStartorg000bhT0Int:pushPSWpushACCmova,C100us+1jnzGoondecC100usGoon:decC100us+1mova,C100usorla,C100us+1jnzExitmovC100us,#27h;#high(Tick)movC100us+1,#10h;#low(Tick)incSecondmova,Secondcjnea,#60,ExitmovSecond,#0incMinutemova,Minutecjnea,#60,ExitmovMinute,#0incHourmova,Hourcjnea,#24,ExitmovHour,#0Exit:popACCpopPSWret