四. 实验步骤
1. 使用导线把A2 区的P13 与B5 区的 BUZZ 接线柱相连。 2. 先编写一个延时程序(120~200us)。
3. 再编写一个循环程序,改变P1.3 脚的电平,然后延时。这样,这个循环就使P1.3 口输出一个频率为2.5KHz-4KHz 的方波。在DP-51PROC 单片机综合仿真实验 仪上运行该程序时,B5 区的蜂鸣器将发出嘹亮的响声
4. 按以下例程输入,然后运行,蜂鸣器发出“生日快乐”的音乐。
五. 实验参考程序 ORG 8000H JMP MAIN ORG 800BH JMP INTT0 ORG 8100H MAIN:
MOV SP,#60H
MOV TMOD,#01H ;初始化定时器及器中断 SETB ET0 ;开定时器0 中断
SETB EA
SETB TR0 ;启动定时器0 START0: SETB P1.3
MOV 30H,#00H NEXT:
MOV A,30H
MOV DPTR,#TABLE ;从TABLE 中读取数据――声响时间 MOVC A,@A+DPTR MOV R2,A JZ ENDD ANL A,#0FH MOV R5,A MOV A,R2 SWAP A
ANL A,#0FH JNZ SING CLR TR0 JMP D1 SING: DEC A
MOV 22H,A RL A
MOV DPTR,#TABLE1 ;从TALBE1 中读取数据――声调 MOVC A,@A+DPTR MOV TH0,A
MOV 21H,A MOV A,22H RL A INC A
MOVC A,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0 D1:
CALL DELAY ;声音延时 INC 30H JMP NEXT ENDD: CLR TR0 JMP START0
INTT0: ;定时器0 中断服务程序 PUSH PSW
PUSH ACC MOV TL0,20H MOV TH0,21H CPL P1.3 POP ACC POP PSW RETI
DELAY: ;R5的值就是声响持续时间 MOV R7,#02 DELAY0:
MOV R4,#187 DELAY1:
MOV R3,#248 DJNZ R3,$
DJNZ R4,DELAY1 DJNZ R7,DELAY0 DJNZ R5,DELAY RET TABLE:
DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00H TABLE1:
DW 64260,64400,64524,64580,64684,64777,64820,64898 DW 64968,65030,65058,65110,65157,65178,65217; END
六. 实验思考题
(1) 请用户思考一下,如何通过程序来编写出音乐。
实验六 P1口实验
一.实验目的
1.学习P1口的使用方法。 2.学习延时子程序的编写和使用。
3.学习单片机实验系统的使用方法和程序的调试方法 二.实验设备及器材配置
1.单片机实验开发系统。 2.计算机。 3.导线。 三.实验内容
分别完成单片机P1口做输出口、既做输入又做输出口的实验任务。
1.P1口做输出口,接八只发光二极管,编写程序,使其循环点亮。
2.P1口低四位接四只发光二极管L1-L4, P1口高四位接开关K1-K4,编写程序,将开关的状态在发光二极管上显示出来。 四.实验原理说明
P1口为准双向口,P1口的每一位都能独立地定义为输出线或输入线,作为输入的口线,必须向锁存器相应位写入“1”,该位才能作为输入。8031中所有口锁存器在复位时均置为“1”,如果后来往口锁存器写入过“0”,再作为输入时,需要向口锁存器对应位写入“1”。
延时程序的编写可以用两种方法,一种是用定时器来实现,一种使用指令循环来实现。在系统时间允许的情况下可以采用后一种方法。
如果系统晶振为6.144MHz,则一个机器周期为12/6.144μs即1/0.512μs。 现要编写一个延时0.1s的程序,可以大致写出如下:
MOV R7, #200
DE1: MOV R6, #X DE2: DJNZ R6, DE2
DJNZ R7, DE1
上面 MOV、DJNZ指令均为两个机器周期,所以执行一条指令需要1/0.256us, 现求出X值:
(X?1?0.256?1?0.256?1?0.256)?200?1?0.256?0.1?106
指令3 指令2 指令4 指令1 计算出X=126,代入上式可知实际延时约为0.100004s。 五.连线方法及实验电路
题目1:8031的P1.0—P1.7分别接发光二极管L1—L8,硬件原理图如图1-1所示。 题目2:P1口的P1.0—P1.3接L1-L4,
P1口的P1.4—P1.7接K1-K4,硬件原理图如图1-2所示。
+5V+5V100100100100100100100100100100100100LEDLEDLEDLEDLEDLEDLEDLED+5VK474LS06K3GNDK2K1LEDLEDLEDLED74LS06L8L7L6L5L4L3L2L1K4K3K2K1L4L3L2L1P1.7P1.6P1.5P1.4P1.38031P1.2P1.1P1.0P1.7P1.6P1.5P1.4P1.38031P1.2P1.1P1.0图1-1 题目1硬件原理图 图1-2 题目2硬件原理图
六.思考题及实验报告要求
1.思考题
(1).试说明51系列单片机4个I/O口在使用上的分工和操作上的特点。 (2).修改程序,使发光二极管闪亮移位方向改变。 2.实验报告要求
(1).给出自行设计的程序清单、程序流程图。
(2). 总结实验过程中调试所遇到的问题和解决方法,写出编程调试的经验和体会。
实验一、Keil软件认识实验
一、实验目的:
1、掌握运用Keil软件进行汇编语言程序的汇编、连接、调试的方法; 2、掌握仿真实验板的应用方法; 3、学习MCS-51汇编语言程序的编写. 二、实验内容:
1、学习Keil uVision2和仿真实验板ledkey的使用方法,编写并运行流水灯实验,详细内容请见《51单片机数字实验室的应用》一文.
2、试编写程序,把片内RAM的30H~7FH单元清零.运用Keil uVision2调试程序,采用单步调试的方法(快捷键F11),观察Regs窗口中各寄存器值的变化情况.
参考程序: ORG 0000H
CLEAR: MOV R0,#30H ;30H送R0寄存器 MOV R6,#4FH ;4FH送R6寄存器(计数) CLR1: MOV A,#00H ;00送累加器A MOV @R0,A ;00送到30H-7FH单元 INC R0 ;R0加1
DJNZ R6,CLR1 ;不到4F个字节再清 WAIT: LJMP WAIT END
3、试编写程序:用数据传送指令将片内RAM的50H~5FH单元中的内容置成00H~0FH,然后将其中的内容传送到片外RAM的1000H~100FH单元中,最后再将片外RAM的1000H~100FH单元中的内容传回片内RAM的60H~6FH单元中.运用Keil uVision2调试程序,采用单步调试的方法(快捷键F11),观察Regs窗口中各寄存器值的变化情况.
参考程序: ORG 0000H MAIN:MOV R0,#50H MOV R7,#10H MOV A,#00H A1:MOV @R0,A INC A INC R0 DJNZ R7,A1
MOV R0,#50H MOV DPTR,#1000H MOV R7,#10H A2:MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR