《微机原理与应用》实验报告
姓名:
学号:
年级:2016 级
专业:电气工程及其自动化
2018 年春季学期
实验一
1. 功能要求
本实验在 P1 端口接 8 个 LED,并编程依次循环点亮。要求用软件延时程序控
制 LED 的亮灭时间,并能精确地计算和用软件测量延时时间。
2. 硬件原理
3. 软件程序流程
4. 程序清单
ORG 0000H
LJMP MAIN
ORG 0120H
MOV R0,#00000001B
MAIN:
LOOP1: MOV P1,R0
MOV R2,#0FFH
LOOP3: MOV R3,#0FFH
LOOP4: NOP
NOP
DJNZ R3,LOOP4
DJNZ R2,LOOP3
MOV A,R0
RL A
MOV R0,A
LJMP LOOP1
END
5. 实验的问题及讨论
1.#0FFH 赋给 R2 R3,是用来控制延时的时间的
2.t=【255*255*(1+1+2)+255*2+1】*10^(-6)=0.26s
3.这段程序对应的机器码是:
MAIN:
ORG 0000H
020120
ORG 0120H
7801
8890
7AFF
7BFF
00
00
DBFC
DAF8
E8
23
F8
020122
END
6. 实验心得及建议
1.Proteus 仿真软件中 P0 口出不来正确现象,但是 P1 口可以
2.写程序时要思路清晰,注意程序用的是哪个 I/O 口,硬件应该接相应的口。
实验二
1.功能要求
P0 口接 8 个灯,INT0 引脚接一下开关 KO。
K0 用于引发外部中断,在外部中断子程序中,对 K0 按下的次数进行计数,
然后以 BCD 码形式,通过 P0 口的 8 个灯输出计数结果。
2.硬件原理
3.软件程序流程
4.程序清单
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0P
ORG 0100H
MOV P1,#00000000B
MAIN:
INT0P:
MOV A,#00H
SETB IT0
SETB EX0
SETB EA
SJMP $
ORG 0120H
INC A
ADD A,#00H
DA A
MOV P1,A
RETI
END
5.实验的问题及讨论
1. 指令 DA 前一定要用 ADD 或 ADDC 指令
2. 当 99+1 时,二极管显示会自动清零,因为 100 的 BCD 码为 1 0000 0000,
所以二极管都灭了。
6. 实验心得及建议
写程序的时候忘记写 MAIN 函数的储存地址了,这样程序按照顺序存储结构,
会接着存到后面中断矢量里,这样容易出错,写程序,一定要记得安排存储
的地址。
实验三
1. 功能要求
实验采用 4 位一体的数码管,用 P1 口通过驱动芯片控制段码输出信号线,P0
口通过驱动芯片控制位选线,自主选择驱动芯片,设计实现电路,并实现以
下功能:
(1) 当开关 K0 接低电平时,第一位依次显示 0~F,然后第二位、第三位、
第四位,再循环回第一位。
(2) 当开关 K0 接高电平时,四位动态显示“HELP”。
2. 硬件原理
3. 软件程序流程
4.程序清单
ORG 0000H
LJMP MAIN
ORG 0100H
MOV R4,#00H
MOV R5,#00000001B
JB P3.2,H1
MAIN:
P0.2 接 3,P0.3 接 4*/
/*P0.0 接 1 位,P0.1 接 2,
LOW1:
H1:
LOW2:
LOOP1:
*/
H:
LOW3:
MOV P0,#00000001B
LCALL LOW2
MOV P0,#00000010B
LCALL LOW2
MOV P0,#00000100B
LCALL LOW2
MOV P0,#00001000B
LCALL LOW2
LJMP MAIN
LJMP H
ORG 0150H
MOV A,#00H
MOV DPTR,#TABLE
MOV R0,A
MOVC A,@A+DPTR
MOV P1,A
INC R0
MOV A,R0
MOV R4,A
MOV R5,P0
JB P3.2,H1
LCALL DELAY1
CJNE R0,#16,LOOP1
RET
ORG 0200H
MOV P0,#00000001B
MOV P1,#89H
LCALL DELAY2
MOV P0,#00000010B
MOV P1,#86H
LCALL DELAY2
MOV P0,#00000100B
MOV P1,#0C7H
LCALL DELAY2
MOV P0,#00001000B
MOV P1,#8CH
LCALL DELAY2
JNB P3.2,LOW3
LJMP H
ORG 0245H
MOV P0,R5
MOV A,R4
/* SUBB A,#01H
*/
/*低电平位选*/
/* 低电平段选*/
/*R4 存第几个数,R5 存第几位
/*高电平*/
/*高电平回低电平*/
L3:
L1:
DELAY1:
DL1:
DL2:
LCALL LOOP1
MOV A,R5
RL A
MOV R5,A
SUBB A,#00010000B
JZ L1
MOV P0,R5
LCALL LOW2
SJMP L3
LJMP LOW1
ORG 0275H
MOV R7,#02H
MOV R1,#0FFH
MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,DL2
DJNZ R7,DL1
RET
ORG 0290H
DELAY2: MOV R3,#0FFH
D2L:
NOP
NOP
DJNZ R3,D2L
RET
DB
/*低电平延时*/
/*高电平延时*/
TABLE:
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8E
H
/*制表*/
END
4. 实验的问题及讨论
仿真时发现 P0 接口显示灰色,外接了上拉电阻后 P0 口能正常工作了。虽然
实验时单片机内接了上拉电阻,但是仿真时需要自己外接。
5. 实验心得及建议
1. 修改程序要逻辑清楚,不然越改越乱
2. 延时程序有好几种方式,不要拘于一种方式
3. 学会用制表
4. 调试时单步调试更容易发现错误
实验四
1. 功能要求
1. 用 T0 定时器实现 1S 定时,控制一个 LED 亮 1 秒,灭 1 秒,并不断循环。
2. 实现一个 4 位秒表: