单片机原理与接口技术实验指导书.doc
实验一 P1口输入、输出实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。三、实验内容及步骤用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。1、使用单片机最小应用系统1模块。关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。3、启动计算机,打开伟福仿真软件,进入仿真环境。首先进行仿真器的设置,选择仿真器型号、仿真头型号、CPU类型。选择通信端口,点击测试串行口,通信成功既可退出设置,进行仿真。4、根据要求编写源程序,进行编译。编译无误后,点击全速执行按钮运行程序,观察发光二极管显示情况。发光二极管单只从右到左轮流循环点亮。四、流程图及源程序 开始设置初始值设移位次数数据输出左一位延时移位次数完成?是否(A)P1口循环点灯程序框图1流程图 2源程序:ORG 00HLOOP: MOV A, #0FEH MOV R2, #8OUTPUT: MOV P1, A RL A ACALL DELAY DJNZ R2, OUTPUT LJMP LOOPDELAY: MOV R6, #0 MOV R7, #0DELAYLOOP: DJNZ R6,DELAYLOOP ;延时程序 DJNZ R7, DELAYLOOP RET END五、思考题(1)对于本实验延时子程序Delay: MOV R6,0 MOV R7, 0DelayLoop:DJNZ R6,DelayLoop DJNZ R7,DelayLoop RET本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?六、电路图实验二 十字路口交通灯实验一、实验目的1、掌握51系列单片机的常用指令;2、掌握定时器的使用方法;3、掌握十字路口交通灯控制方法。二、实验内容及步骤1、用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。按要求连接电路。2、根据要求编写源程序,编译无误后,全速运行程序。LED0、LED1、LED2分别表示东西方向绿、黄、红灯三、实验电路连接P10 - LED0 P11 - LED1 LED3、LED4、LED5分别表示南北方向绿、黄、红灯P12 - LED2 P13 - LED3 P14 - LED4 P15 - 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 00HSTART: MOV TMOD,#01H ;置T0工作方式1 MOV TH0, #3CH ;置T0定时初值50mS MOV TL0, #0B0H CLR TF0 SETB TR0 ;启动T0LOOP0: MOV R2,#20 ;置1S计数初值 50mS*20=1S MOV R3,#10 ;全亮10S LCALL STATE0 ;调用状态0WAIT0: 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 STATE1WAIT1: 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 ;黄灯亮2SLCALL STATE3 ;调用状态3 WAIT3:JNB TF0,WAIT3 ;查询50mS到否 CLR TF0 MOV TH0, #3CH ;恢复T0定时初值50mS MOV TL0, #0B0H DJNZ R2,WAIT3 ;判1S到否?未到继续状态3 MOV R2,#20 DJNZ R3,WAIT3 ;状态3维持2S MOV R2,#20 MOV R3,#20 ;红灯20SLCALL STATE4 ;调用状态4WAIT4: JNB TF0,WAIT4 ;查询50mS到否 CLR TF0 MOV TH0, #3CH ;恢复T0定时初值100mS MOV TL0, #0B0H DJNZ R2,WAIT4 ;判1S到否?未到继续状态4 MOV R2,#20 ; DJNZ R3,WAIT4 ;状态4维持20S MOV R2,#5 ;置50mS计数初值 MOV R4,#4 ;闪烁200mS MOV R3,#3 ;绿灯闪3SLCALL STATE5 ;调用状态5WAIT5: JNB TF0,WAIT5 ;查询50mS到否 CLR TF0 MOV TH0, #03CH ; MOV TL0, #0B0H DJNZ R4,WAIT5 ;判200mS到否?未到继续状态5 CPL LED_G2 ;南北绿灯闪 MOV R4,#4 ;闪烁200mS DJNZ R2,WAIT5 ;判1S到否?未到继续状态5 MOV R2,#5 ; DJNZ R3,WAIT5 ;状态5维持3S MOV R2,#20 ; MOV R3,#2 ;黄灯闪2SLCALL STATE6 ;调用状态6WAIT6: JNB TF0,WAIT6 ;查询50mS到否 CLR TF0 MOV TH0, #3CH ; MOV TL0, #0B0H DJNZ R2,WAIT6 ;判1S到否?未到继续状态6 MOV R2,#20 DJNZ R3,WAIT6 ;状态6维持2S LJMP LOOP1 ;大循环STATE0: ;状态0,全亮 SETB LED_G1 SETB LED_Y1 CLR LED_R1 SETB LED_G2 SETB LED_Y2 CLR LED_R2 RETSTATE1: ;状态1CLR LED_G1 ;东西绿灯亮 SETB LED_Y1 SETB LED_R1 SETB LED_G2 SETB LED_Y2 CLR LED_R2 ;南北红灯亮 RETSTATE2: ;状态2 SETB LED_Y1 SETB LED_R1 SETB LED_G2 SETB LED_Y2 CLR LED_R2 ;南北红灯亮 RETSTATE3: ;状态3 SETB LED_G1 SETB LED_R1 SETB LED_G2 SETB LED_Y2 CLR LED_R2 ;南北红灯亮 CLR LED_Y1 ;东西黄灯亮 RETSTATE4: ;状态4 SETB LED_G1 SETB LED_Y1 CLR LED_R1 ;东西红灯亮 CLR LED_G2 ;南北绿灯亮 SETB LED_Y2 SETB LED_R2 RETSTATE5: ;状态5 SETB LED_G1 SETB LED_Y1 CLR LED_R1 ;东西红灯亮 SETB LED_Y2 SETB LED_R2 RETSTATE6: ;状态6 SETB LED_G1 SETB LED_Y1 CLR LED_R1 ;东西红灯亮 SETB LED_G2 SETB LED_R2 CLR LED_Y2 ;南北黄灯亮 RET实验三 电子时钟实验一、实验目的1、进一步掌握定时器的使用和编程方法2、进一步掌握中断处理程序的编程方法二、实验说明本实验是利用CPU的定时器和实验台上提供的共阴极数码显示电路,设计一个电子时钟。格式如下:XX XX XX 由左向右分别为:时、分、秒本实验使用的是单片机内部计数器的定时器功能,有关设置主要针对定时器/计数器工作方式寄存器TMOD。具体为:工作方式选择位,设置为方式2;计数/定时方式选择位,设置为定时器工作方式。定时器每100uS中断一次,在中断服务程序中,对中断次数进行计数,100uS计数10000次就是1秒。然后再对秒计数得到分和小时值,并送入显示缓冲区。单片机P0口输出字段码,P1口输出位码。三、实验内容及步骤1、单片机最小应用系统1的P0口接动态扫描显示的段码口adp,P1口接位码口S1S6。2、安装好伟福仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。3、启动计算机,打开伟福仿真软件,进入仿真环境。选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。4、编写电子时钟.ASM源程序,编译无误后,全速运行程序,6LED数字显示时、分、秒值。四、流程图及源程序 1、流程图主程序框图 序 定时中断子程序框图是 中断返回中断入口保护现场恢复现场秒值加1小时值清0秒值清0,分钟加1分值清0,小时加1设置下次10000次计数值10000次计数值减1到24小时到60分钟到60秒计数值为0显示数据送缓冲转换成显示数据调用显示子程序转换成显示数据显示数据送缓冲读取分钟值显示数据送缓冲读取秒值开始置定时器模式及工作方式启动定时器设置初始常数读取小时值转换成显示数据否否否否 2、原程序:LEDBuf equ 60h ; 显示缓冲Hour equ 40hMinute equ 41hSecond equ 42hC100us equ 43hTick equ 10000T100us equ 256-50 ljmp Start org 000bhT0Int: push PSW push ACC mov a, C100us+1 jnz Goon dec C100usGoon: dec C100us+1 mov a, C100us orl a, C100us+1 jnz Exit mov C100us, #27h;#high(Tick) mov C100us+1, #10h;#low(Tick) inc Second mov a, Second cjne a, #60, Exit mov Second, #0 inc Minute mov a, Minute cjne a, #60, Exit mov Minute, #0 inc Hour mov a, Hour cjne a, #24, Exit mov Hour, #0Exit: pop ACC pop PSW retiDelay: ; 延时子程序 mov r7, #0FFHDelayLoop: djnz r7, DelayLoop djnz r6, DelayLoop retLEDMAP: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDisplayLED: mov r0, #LEDBuf mov r1, #6 ; 共6个八段管 mov r2, #b ; 从左边开始显示 Loop: mov a, #0 mov p0, a ; 关所有八段管 mov a, r0 mov p0,a mov a, r2 mov p1, a ; 显示一位八段管 mov r6, #01H acall Delay mov a, r2 ; 显示下一位 rr a mov r2, a inc r0 djnz r1, Loop ret; =ToLED: mov dptr, #LEDMAP movc a, a+dptr retStart: mov TMOD, #02h ; 模式2, 定时器 mov TH0, #T100us mov TL0, #T100us mov IE, #b ; EA=1, ET0 = 1 mov Hour, #0 mov Minute, #0 mov Second, #0 mov C100us, #27h ;#high(Tick) mov C100us+1, #10h ;#low(Tick) setb TR0 ; 启动定时器0 MLoop: mov a, Hour mov b, #10 div ab acall ToLED mov LEDBuf, a mov a, b acall ToLED orl a, #80h mov LEDBuf+1, a mov a, Minute mov b, #10 div ab acall ToLED mov LEDBuf+2, a mov a, b acall ToLED orl a, #80h mov LEDBuf+3, a mov a, Second mov b, #10 div ab acall ToLED mov LEDBuf+4, a mov a, b acall ToLED mov LEDBuf+5, a acall DisplayLED ljmp MLoop end