本科实验报告课程名称:微机原理与接口技术姓名:陈肖苇学院:信息与电子工程学院专业:电子科学与技术学号:3140104580指导教师:黄凯2016年12 月23 日课程名称:微机原理与接口技术指导老师:黄凯成绩:__________________ 实验名称:单片机硬件实验一二实验一I/O控制实验1. 实验目的①掌握基本IO输入输出操作指令;②熟练运用“WAVE”环境对硬件接口进行调试。
2.预习要求①理解51单片机IO的输入、输出控制方式;理解P0、P1、P2、P3口做为普通的IO口有何区别。
②理解实现软件延时程序设计的延时时间估算;③认真预习本节实验内容,设计出器件之间的实验连接线,自行编写程序,填写实验报告。
3.基础型实验内容①8位逻辑电平显示的接口电路设计如图1-1所示,用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。
用导线将MCS51模块的P1.0-P1.7端口依次与L0-L7小灯连接。
在“WAVE”环境运行该程序,观察发光二极管显示情况。
ORG 0LOOP: MOV A, #01H ;设置初值MOV R2,#8 ;设置循环次数OUTPUT: MOV P1,ARL A ;移位,让下一盏灯亮ACALL DELAY ;调用子程序来延迟DJNZ R2,OUTPUT ;循环R2次,即8次,达到依次点亮LJMP LOOP ;循环依次点亮的过程DELAY: MOV R6,#0 ;延时子程序MOV R7,#0DELAYLOOP:DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRETEND实验现象:LED小灯泡从右向左依次点亮,不断循环。
实验照片如下:②8位拨动开关的接口电路设计如图1-2所示,假设采用P1口控制LED显示,P2口接收拨码开关的输入值,用导线将MCS51模块的P1.0-P1.7端口依次与L0-L7小灯连接, 并将P2.0-P2.7端口依次与K0-K7开关连接。
在W A VE环境运行该程序,使用单步、断点、连续运行调试程序,查看结果。
ORG 0000HLL:MOV P2,#0FFHNOPMOV A, P2NOPMOV P1,ALJMP LLEND实验现象:当拨码开关在下面时,对应的灯灭;当拨码开关在下面时,对应的灯亮。
a)所有开关都在下面,灯全灭b)左侧两个开关在上面,左边两个灯亮③假设采用P1.0口控制外部LED,拨动开关控制外部中断,用二号导线将MCS51模块的P1.0、P3.2口分别与八位逻辑电平显示模块的L0、单次脉冲输出相连。
并在W A VE环境运行程序,观察实验现象。
ORG 0000HLJMP MAINORG 0003HLJMP INTERRUPTORG 0030HMAIN: CLR P1.0 ;P1.0输出低电平MOV TCON,#01H ;选择触发方式为下降沿触发MOV IE,#81HSJMP $ ;等待INTERRUPT: PUSH PSW ;保护现场CPL P1.0 ;P1.0电平求反POP PSW ;恢复现场RETIEND实验现象:每次点击时,LED灯状态取反,即原来熄灭的话,按一下按钮,LED灯会被点亮;原来点亮的话,按一下按钮,LED灯熄灭。
实验现象:按一下按钮,LED灯被点亮实验现象:再次按下按钮,LED灯熄灭④在上述步骤中,如果改变中断的触发方式为电平触发方式,试改动程序,并在W A VE环境运行程序,观察实验现象,说明实验结果。
ORG 0000HLJMP MAINORG 0003HLJMP INTERRUPTORG 0030HMAIN: CLR P1.0 ;P1.0输出低电平MOV TCON,#00H;选择触发方式为低电平触发MOV IE,#81HSJMP $ ;等待INTERRUPT: PUSH PSW ;保护现场CPL P1.0 ;P1.0电平求反POP PSW ;恢复现场RETIEND实验现象:当P3.2保持低电平时,LED灯被点亮,不过亮度弱于正常值(应为高频闪烁所致)。
实验现象:LED灯亮,但亮度低于正常值5.设计型实验内容画出流程并设计程序实现8位逻辑电平显示模块的奇偶位的亮灭闪烁显示,闪烁间隔为1S。
ORG 0000HLOOP: MOV A,#055HMOV R2,#2OUTPUT: MOV P1,ARL AACALL DELAYDJNZ R2,OUTPUTLJMP LOOPDELAY: MOV R6, #0AH ;延迟DLY1: MOV R5, #0C8HDLY2: MOV R4, #0F9HDLY3: DJNZ R4, DLY3DJNZ R5, DLY2DJNZ R6, DLY1RETEND设置初值55H,其二进制位为01010101表示奇偶位状态相反。
延迟时间:[(249*2+3)*200+3]*10*12/12000000=1.002030s实验二定时器计数器实验1.实验目的①掌握8051的定时器、中断系统编程方法;②了解定时器的应用、实时程序的设计和调试技巧。
2.预习要求①理解定时器的四种工作方式的异同点;②理解TMOD寄存器中GATE、C/T控制位的作用;③理解定时器中断服务程序的响应过程;④理解定时器实现精确定时的方法;⑤认真预习本节实验内容,设计出器件之间的实验连接线,自行编写程序,填写实验报告。
3.实验设备计算机 1 台;Lab8000型80C51实验开发系统 1 套;2号导线若干条;4.基础型实验内容①系统的时钟为12MHz,现欲实现10ms的精确定时,完成空白处程序填写,并在W A VE环境运行程序,观察实验现象。
(满足助教给出的要求:10ms放大至100ms,且输出到LED观察)ORG 0000HMOV TMOD, #01H ;设置T0为工作方式1LOOP1: MOV R0, #0AH ;计数十次LOOP2: MOV TL0, #0F0HMOV TH0, #0D8H ;装入初值SETB TR0JNB TF0,$CLR TF0DJNZ R0,LOOP2 ; 没到十次,继续计数CLP P1.0 ; 到10次,LED灯状态反转SJMP LOOP1 ;继续循环END实验现象:LED灯高频闪烁,每秒钟亮5次。
②假设采用P1.0口控制外部LED,用拨动开关控制外部中断,用二号导线将MCS51模块的P1.0、P3.2口分别与八位逻辑电平显示模块的L0、C6区八位逻辑电平输出K0相连。
在WA VE环境运行以下程序,分别拨动K0于高低电平位置,观察实验现象,并说明所发生实验现象的原因。
LJMP MAINORG 000BHLJMP TIMER0ORG 0030HMAIN: CLR P1.0 ;引脚设置低电平MOV TMOD,#0AH ;0000 1010 工作方式:计时器0的自动装在8位计时方式MOV TL0,#50H ;初值80,计数时间176usMOV TH0,#50H ;自动装载初值SETB TR0 ;TR0置位,且GATE0为1,由INT0引脚控制T0启停SETB EA ;开中断SETB ET0SJMP $TIMER0: CPL P1.0 ;引脚电平取反RETI ;中断返回END实验现象:当快速拨动K0时,LED灯的明暗状态不定,当拨码开关稳定在上面时,LED灯常量,不过亮度略低于正常值。
原因可能为每255us中仅176us被点亮,高频闪烁导致亮度不足。
③用二号导线将MCS51模块的P1.0与八位逻辑电平显示模块的任意一只发光二极管相连,全速运行下列程序,发光二极管隔一秒点亮一次,点亮时间为一秒。
流程图为:Tick equ 10000 ; 10000 x 100us = 1sT100us equ 40 ; 100us时间常数(12M)C100us equ 5h ; 100us记数单元LEDBuf BIT 00HLED BIT P1.0org 0000Hljmp Startorg 000BHLJMP T0IntORG 0100HT0Int: push PSWmov a, C100us+1jnz Goondec C100usGoon: dec C100us+1mov a, C100usorl a, C100us+1jnz Exit ;100us 记数器不为0, 返回mov C100us, #HIGH(TICK) ;#high(Tick)mov C100us+1, #LOW(TICK) ;#low(Tick)cpl LEDBuf ;100us 记数器为0, 重置记数器,取反LEDExit: pop PSWretiStart: mov TMOD, #02h ; 方式2, 定时器mov TH0, #t100usmov TL0, #t100usmov IE, #10000010b ; EA=1, IT0 = 1setb TR0 ; 开始定时clr LEDBufclr P1.0mov C100us, #high(Tick)mov C100us+1, #low(Tick)Loop: mov c, LEDBufmov P1.0, csjmp Loopend实验现象:全速运行实验时,发现LED等每隔一秒状态变化一次,即一秒亮,一秒暗。
5.设计型实验内容编程使第1~4和5~8发光二极管循环点亮的时间分别为0.25s、0.5s、0.75s、1s。
ORG 0000HLJMP MAINORG 001BH ;T1中断入口LJMP INT ;转T1中断服务ORG 0100HMAIN: MOV TMOD , #10H ;设置T1工作方式1MOV TH1 , #3CHMOV TL1 , #0B0H ;设置定时初值MOV R7, #0MOV P1, #1SETB EA ;CPU开中断SETB ET1 ;T1允许中断SETB TR1 ;启动T1SJMP $ ;模拟主程序ORG 0800HINT: CJNE R7, #0 , NEXT0MOV P1 , #1NEXT0:INC R7MOV TH1, #3CHMOV TL1, #0B0H ;重新装载定时初值CJNE R7 , #5 , NEXT1MOV P1 , #2RETINEXT1:CJNE R7 , #15 , NEXT2MOV P1 , #4RETINEXT2:CJNE R7 , #30 , NEXT3MOV P1 , #8RETINEXT3:CJNE R7 , #50 , NEXT4MOV P1 , #16RETINEXT4:CJNE R7 , #55 , NEXT5MOV P1 , #32RETINEXT5:CJNE R7 , #65 , NEXT6MOV P1 , #64RETINEXT6:CJNE R7 , #80 , NEXT7MOV P1 , #128NEXT7:CJNE R7 , #100 , ENDINTMOV R7 , #0ENDINT:RETI因为每个需要计时的时间都大于65ms(即定时器一次定时最大值),所以,需要选择一个合适的单位进行多次循环,在这里,我采用了50ms,即0.05秒的时间,作为一个周期单位。