大连理工大学实验报告
实验时间: 2013 年 7 月 5 日 星期 五实验室(房间号):综420 实验台号码: 6 班级: 电子1004 学号: 201081163 姓名: 黄佳卿 指导教师签字: 成绩:
MCS-51单片机“定时器编程”思考题
(一) 编程要求:
编制一个1秒钟发声程序(参见图1),利用定时器控制无源蜂鸣器发生的时间和频率,单片机的端口驱动蜂鸣器发声。(参见实验教程的6.4.3 定时/计数器的编程实验(二): 蜂鸣器驱动实验)
1秒发声 P1.1
(1500KHZ)
图1:蜂鸣器驱动信号示意图
(二)要求:分别利用T0、T1实现1秒钟发声(1500HZ)操作,其中: ? 一个定时器控制蜂鸣器的发生频率(1500HZ),使用查询法编程; ? 另一个定时器做1秒钟定时(50mS×20),使用中断法编程。 (三)实验内容及步骤
1.首先选择一个定时器编程、调试1500HZ的定时周期并通过端口驱动蜂鸣器发声:
2.编制一个1秒钟定时程序;
3.将两者综合起来,实现持续一秒钟的发声持续,1秒钟后停止发声。 (四)实验电路
? 单片机的P1.1与与蜂鸣器电路连接(参见图2);
MCS-51 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 BUZZ JK62 103 BUZZ 10K B5区 VCC 8550 保护电阻47欧 图2:实验电路 (五)程序清单及流程图(主程序和中断服务子程序流程图)
编程提示:将发声部分操作编写为子程序(BUZZ),在BUZZ子程序中,判断TRi=1?,如果TRi=1则驱动蜂鸣器发声,如果TRi=0则不发声,直接返回(参见流程图)。
参考流程图
N BUZZ TRi=1? Y 驱动蜂鸣器发声 RET
程序清单:
ORG 8000H LJMP START ORG 801BH LJMP INT_T1 ORG 8100H
START: MOV SP,#60H
MOV TMOD,#11H ;驱动 MOV TL0,#4CH MOV TH0,#0FDH
MOV TL1,#0FCH MOV TH1,#4BH MOV R1,#20
SETB TR0
SETB TR1 SETB ET1 SETB EA
LOOP: JNB TR0,DOWN JNB TF0,$
MOV TL0,#4CH MOV TH0,#0FDH CPL P1.1
DOWN:LJMP LOOP
;中断
INT_T1:
PUSH PSW
MOV TL1,#0FCH MOV TH1,#4BH DJNZ R1,EXIT CLR TR0 SETB P1.1 EXIT: POP PSW RETI END 流程图:
开始 两个定时器初始配置 开启定时器 是 TR0 = 0? 否 TF0 = 0? 否 开启定时器
进入中断 保护现场,配置定时器 否 20次到了 是 停止定时器,引脚置高 是 恢复现场 中断返回 (五)实验体会
本次实验学会了51单片机定时器的使用,分别用两个定时器来控制发声频率和发声时间,使用了中断方式和查询方式编程。编程的过程中,了解到了程序结构的重要性,不能让程序死在某些地方,这样会有很大的隐藏危险。