实验一 P1口输入、输出实验 一、实验目的
1、学习P1口的使用方法
2、学习延时子程序的编写和使用 二、实验说明
P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。 三、实验内容及步骤
用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。 1、使用单片机最小应用系统1模块。关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。
3、启动计算机,打开伟福仿真软件,进入仿真环境。首先进行仿真器的设置,选择仿真器型号、仿真头型号、CPU类型。选择通信端口,点击测试串行口,通信成功既可退出设置,进行仿真。
4、根据要求编写源程序,进行编译。编译无误后,点击全速执行按钮运行程序,观察发光二极管显示情况。发光二极管单只从右到左轮流循环点亮。 四、流程图及源程序 1.流程图
2.源程序: ORG 00H
LOOP: MOV A, #0FEH MOV R2,#8 OUTPUT: MOV P1,A RL A ACALL DELAY
DJNZ R2,OUTPUT LJMP LOOP DELAY: MOV R6,#0 MOV R7,#0
DELAYLOOP: DJNZ R6,DELAYLOOP ;延时程序 DJNZ R7,DELAYLOOP RET END 五、思考题
(1)对于本实验延时子程序 Delay: MOV R6,0 MOV R7, 0
DelayLoop:DJNZ R6,DelayLoop DJNZ R7,DelayLoop
RET
本模块使用12MHz晶振,粗略计算此程序的执行时间为多少? 六、电路图
实验二十字路口交通灯实验 一、实验目的
1、掌握51系列单片机的常用指令; 2、掌握定时器的使用方法;
3、掌握十字路口交通灯控制方法。 二、实验内容及步骤
1、用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。按要求连接电路。
2、根据要求编写源程序,编译无误后,全速运行程序。 三、实验电路连接
P1.0 ●-----------------------● LED0 P1.1 ●-----------------------● LED1 P1.2 ●-----------------------● LED2 P1.3 ●-----------------------● LED3 P1.4 ●-----------------------● LED4 P1.5 ●-----------------------● LED5 四、实验说明
l. 因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始为状态0。 状态0:东西红灯,南北红灯;然后转
状态1:南北绿灯通车,东西红灯;过一段时间转
状态2:南北绿灯闪几次转黄灯亮,延时几秒,东西仍然红灯;再转 状态3:东西绿灯通车,南北红灯;过一段时间转
状态4:东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯;最后循环至状态1。 2. 各用一组红、黄、绿色LED分别表示南北方向和东西方向红绿灯。 五、实验仪器和设备
THKSCM-2单片机开发综合实验装置、PC机、WAVE软件、E6000/S51仿真器+POD8X5X仿真头等。
六、流程图及源程序
LED_G1 BIT P1.0 ;东西绿灯 LED_Y1 BIT P1.1 ;东西黄灯 LED_R1 BIT P1.2 ;东西红灯 LED_G2 BIT P1.3 ;南北绿灯 LED_Y2 BIT P1.4 ;南北黄灯 LED_R2 BIT P1.5 ;南北红灯 ORG 00H
START: MOV TMOD,#01H ;置T0工作方式1 MOV TH0, #3CH ;置T0定时初值50mS MOV TL0, #0B0H CLR TF0
SETB TR0 ;启动T0
LOOP0: MOV R2,#20 ;置1S计数初值 50mS*20=1S MOV R3,#10 ;全亮10S LCALL STATE0 ;调用状态0
WAIT0: JNB TF0,WAIT0 ;查询50mS到否 CLR TF0
MOV TH0, #3CH ;恢复T0定时初值50mS MOV TL0, #0B0H
DJNZ R2,WAIT0 ;判1S到否?未到继续状态0 MOV R2,#20
DJNZ R3,WAIT0 ;状态0维持10S
LOOP1: MOV R2,#20 MOV R3,#20 LCALL STATE1
WAIT1: JNB TF0,WAIT1 ;查询50mS到否 CLR TF0
MOV TH0, #3CH ;恢复T0定时初值50mS MOV TL0, #0B0H
DJNZ R2,WAIT1 ;判1S到否?未到继续状态1 MOV R2,#20
DJNZ R3,WAIT1 ;状态1维持20S MOV R2,#5
MOV R4,#4 ;闪烁200mS MOV R3,#3 ;绿灯闪3S
LCALL STATE2 ;调用状态2
WAIT2:JNB TF0,WAIT2 ;查询50mS到否 CLR TF0
MOV TH0, #03CH ;恢复T0定时初值50mS MOV TL0, #0B0H
DJNZ R4,WAIT2 ;判200mS到否?未到继续状态2 CPL LED_G1 ;东西绿灯闪 MOV R4,#4 ;闪烁200mS
DJNZ R2,WAIT2 ;判1S到否?未到继续状态2 MOV R2,#5
DJNZ R3,WAIT2 ;状态2维持3S MOV R2,#20 ;
MOV R3,#2 ;黄灯亮2S LCALL STATE3 ;调用状态3
WAIT3:JNB TF0,WAIT3 ;查询50mS到否 CLR TF0
MOV TH0, #3CH ;恢复T0定时初值50mS MOV TL0, #0B0H