单片机实验报告 3
姓名 吴新旺 学号 0815241048
时间 2011.04.28 地点 B526
实验题目 中断、定时器实验
一、实验目的
1. 学习外部中断和定时器的工作原理及使用方法。 2. 学习外部中断和定时器的初始化程序、应用程序的编写和调试。
二、实验说明
本实验1通过开关向单片机提出中断请求,单片机响应中断进行计数,并通过LED数码管指示出计数值,从而观察中断的请求、响应的过程。实验2通过单片机的定时器产生延时,模拟交通灯控制的方法。通过本实验学生可以掌握单片机中断和定时器的工作原理及使用方法以及中断和定时器的初始化程序、应用程序的编写和调试。
三、实验主要仪器及环境:
PC机、WAVE软件、仿真器+仿真头、实验板、电源等。
三、实验内容
1、开关S0—S1连接P3口做输入,P2输出接LED数码管,通过S2产生外部中断请求(/INT0)信号,在中断服务程序中完成十进制递增计数,并将计数值显示在LED数码管上,要求分别采用电平触发和边沿触发。按上述要求完成S3产生外部中断请求。编写初始化程序和中断服务程序。(注意开关抖动处理)
2、P1.0--P1.7作输入口接拨动开关S0--S7;P0.0--P0.7作输出口,接发光二极管L1—L8,编写程序读取开关状态,将此状态在对应的发光二极管上显示出来,要求发光二极管(LED)按亮0.5秒、暗0.5秒闪烁,LED亮的同时,从P3.0送出1kHz的音频信号到音频驱动电路发声(持续0.5秒),将开关编号(0—7)显示在LED数码管上。要求延时采用内部定时器T0,音频的产生采用内部定时器T1。编写初始化程序和中断服务程序。
四、实验步骤
1.事先写好程序,在WAVE软件上编译仿真通过后,下载到硬件上进行调试。将单片机的P2口与数码管连接以显示编号,将P3.0——P3.3分别通过开关控制高低电平。其中P3.0控制触发方式,P3.1选择中断源,P3.2与P3.3作为两个外部中断。
2.将P1.0—P1.7与拨动开关连接以控制高低电平,P0.0--P0.7接发光二极管,P2口与数码管相连,P3.0接到音频驱动电路的控制端,接好硬件电路后,将程序进行编译,仿真后下载到硬件调试。
五、实验程序流程框图、实验程序(必须加注释)
实验1程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0 ORG 0013H LJMP INT1 ORG 0030H
MAIN: MOV R5, #00H MOV DPTR, #TABLE
JB P3.0, M1
CLR IT0 ;选择外部中断触发方式 CLR IT1 LJMP M2 M1: SETB IT0
SETB IT1
M2: JB P3.1, M3
SETB EX0 ;选择中断源 LJMP M4
M3: SETB EX1
M4: SETB EA
LJMP $ ;等待中断 INT0: LCALL DELAY10MS ;延时防抖动 JB P3.2, BACK0
LCALL DISPLAY BACK0: RETI
INT1: LCALL DELAY10MS ;延时防抖动 JB P3.3, BACK1
LCALL DISPLAY BACK1: RETI
DISPLAY: MOV A, R5 ;数码管显示子程序 MOVC A, @A+DPTR MOV P2, A
INC R5
CJNE R5, #0AH, K2
MOV R5, #00H K2: RET
DELAY10MS:MOV R7, #200 ;延时子程序 K3: MOV R6, #24 DJNZ R6, $ DJNZ R7, K3 RET
TABLE: DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH
实验2程序:
ORG 0000H SJMP MAIN
ORG 000BH
LJMP INT0
ORG 001BH
LJMP INT1
ORG 0050H
MAIN:MOV SP,#60H ;各寄存器初始化
MOV TMOD,#11H
MOV TL0,#0B0H
MOV TH0,#3CH
MOV TL1,#0CH
MOV TH1,#0FEH
MOV R2,#10 ;由于定时器一次不能完成0.5秒延时,因此分10 MOV R6,#00H
SETB F0
SETB EA
SETB TR0
SETB ET0 SETB TR1 SETB ET1 SETB PT0 ;设置定时器0的优先级高于定时器1 CLR PT1
SETB P3.0
MOV P1,#0FFH
START:MOV A,P1
CJNE A,#0FFH,LP1
SJMP START
LP1:MOV P0,A ;将开关状态输出給P0口,用LED灯显示
MOV R3,P1
MOV R1,#00H
LP4:RRC A ;数管管显示程序
JNC LP3
MOV A,R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
LJMP LP2
LP3:INC R1
LJMP LP4
LP2:MOV A,R3 ;将P1口当前状态与之前比较,如果相同,则
XRL A,P1 继续循环,如果不同,则跳出循环到初始化程序 CJNE A,#00H,MAIN
SJMP LP2
INT0:PUSH A ;中断服务子程序,产生0.5S延时
CLR TR0
MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R2,LP5
CPL F0
MOV R2,#10
JB F0,LP7 ;通过标志位判定送给P0口的是#00还是P1口状态
MOV A,R6
MOV P0,A
LJMP LP5
LP7: MOV A,R3
MOV P0,A
LP5: SETB TR0
POP A
RETI
INT1:CLR TR1 ;中断服务子程序,产生1KHz方波
MOV TL1,#0CH
MOV TH1,#0FEH
JNB F0,LP6
CPL P3.0
LP6: SETB TR1
RETI
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
六、 实验及程序的分析和讨论(结合思考题)
1.电平触发时,当CPU响应中断后,硬件自动清零标志位,但由于外部请求信号的低电平可能保持,在以后的机器周期采样时,又会将标志位置1,进而又响应了中断,因此得在外围电路中加一个D触发器。而当边沿触发时,由于跳沿信号过后就消失了,不会出现上述得情况。
2. 定时器/计数器有四种工作方式。
方式0:定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0,1)的低五位和
THX的高八位所构成,计数溢出后计数器为全0所以方式0的计数范围为0001H——2000H
方式1:方式1与方式0的差别仅仅是计数器的位数不同,方式1是16位的计数器,由
TLX作为低八位和THX作为高八位所构成,所以方式1的计数范围是0001H
——10000H。
方式2:定时器/计数器的方式2为自动恢复初值的8位定时器/计数器,TLX作为常数缓
冲器,当YLX溢出时,在置1溢出标志位TFX的同时,还自动将THX的初值
送至TLX,使TLX从初值开始计数,因此可以精确的确定定时时间,方式2
的计数范围是0001H——0100H。
方式3:方式3仅适用与定时器/计数器T0,T0被分为2个独立的8位计数器。一般情
况下,当T1用作串行口的波特率发生器时,T0才工作在方式3。
3.
I/O口P3.0输出1KHZ的音频信号经过功放LM386放大后输入扬声器使扬声器发出1KHZ音频的声音,通过扬声器发出的声音可以判断单片机I/O口P3.0是否输入音频信号和音频信号的频率是否正确。
七、 程序测试报告:(调试输入数据、结果数据或状态。给出一、两个不同的输入和结果。)
通过PROTUES仿真得到实验的仿真图:
八、 体会:(碰到的问题、如何解决、有何体会。)
这次实验真得让我感受到了单片机这门学科难的程度,特别时写程序,当要求写出的程序实现较多的功能时,真是会把人搞的头头转,还好做实验前有预习,不然到实验室真的是完全干愣着,打酱油了。也因为这次实验才知道自己的单片机水平还远远不够,以后得更加努力了。
第二篇:单片机第三次实验报告
上海电力学院
MCS-51单片机实验报告
题 目:并行I/O接口8255应用实验
与继电器控制实验
院 系: 电气工程学院
专业年级:
学生姓名:
继电器控制实验
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
一、实验目的
掌握用继电器控制的基本方法和编程。
二、实验内容
用P1口输出高电平,控制继电器的开合,以实现对外部装置的控制。
三、预备知识
现代自动化控制设备都存在一个电子与电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机、电磁跌、电灯等):另一方面又要为电子电路和电气电路提供良好的电隔离,以保证电子电路和人身的安全,电子继电器便能完成这一桥梁作用。本实验采用JZC—23F型继电器,其控制电压为5V。继电电路中的一般要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电动势,防止干扰。
四、实验步骤
(1) 把8031的P1.0插孔接到JIN端。
(2) 把继电器的JZ(中心轴头)接地,JB常闭开关接L1,JK常开开关接L2。
(3) 编制程序,使P1.0电平变化,低电平时继电器吸合,常开触点接上L1熄灭,L2点亮,高电平时继电器不工作,常毕触点闭合,L1点亮,L2熄灭。
(4) 调试运行程序,L1、L2交替熄灭。
源代码
ORG 0000H
AJMP START
ORG 0030H
START: SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAY
SJMP START
DELAY: MOV R7,#0FFH
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
五、实验总结
通过继电器控制实验我学会了仿真软件的使用,掌握了汇编语言的设计和调试方法,掌握了用继电器控制的基本方法和编程。