下面是小编为大家整理的进一步了解外中断边沿触发与电平触发(完整),供大家参考。
(1)中断实验 一、 实验目的和要求
目的:熟练使用 Keil,Proteus 软件对程序进行调试,掌握单片机中断方式的输入/输出, 熟悉 MCS-51 单片机外部中断初始化编程方法及中断程序的调试方法。
要求:掌握查询方式和中断方式的输入/输出程序设计及调试。通过实验熟悉中断处理的过 程以及 MCS-51 单片机转向中断子程序的方法,进一步了解外中断的边沿触发与电平触发 的区别及应用。
二、 实验内容和原理(包括程序和硬件原理图)
1、中断 程序:
ORG
0000H
LJMP
MAIN
ORG
0003H
LJMP
INTT0
MAIN:
MOV
SP, #40H
SETB
IT0
SETB
EX0
SETB
EA
MOV
A,
#0FEH
LP:
MOV
P1,A
RL
A
LCALL
DLY
SJMP
LP
INTT0:
PUSH
P1
PUSH
PSW
SETB
RS0
MOV
P1, #0FEH
LCALL DLY
POP
PSW
POP
P1
RETI
DLY:
MOV
R6, #0FH
DLY1:
MOV
R5, #0FFH
DLY2:
MOV
R4, #0FFH
DLY3:
DJNZ
R4, DLY3
DJNZ R5, DLY2
DJNZ
R6, DLY1
RET
END 所用原件列表:
单片机 AT89C51 开关 SW-SPDP 发光二极管 LED-BIBY 电阻 RES
实验原理图:
三、 主要仪器设备 Keil5、proteus8.4软件 四、 实验步骤 1、在 Keil uVision2 软件中输入程序并保存程序。
2、编译程序,修改编辑错误,并生成.HEX 文件。
3、使用 Protues 将图 4.1 绘制出来,加载.HEX 文件。
4.、在 Keil,Protues 软件中做相应的设置,使得可以进行两个软件的联机调试。(*)
5. 中断程序单独调试
1)
先调试 INT1 是否能正常中断,此时可将断点设在 0003H 处,从 0000H 单元开 始执行,搬动开关 SW1,产生中断信号,看程序是否能跳到 0003H 处,若不能 则中断有问题,检查中断初始化程序。
2)
若正确,将断点设在 RETI 处,设置 PC=0300H, (设置方式:在左侧的“regs” 窗口区中找到 PC 对应的值 0x0000,用鼠标左键慢双击 0x0000 即可修改该数 值)),设置 PC=0300H 程序从 0300H 开始执行到 RETI 处,打开 proteus 软件, 观察灯的亮灭状态是否与开关状态符合。
6. 中断程序调试正常以后,选择单片机复位 PC=0000H,用全速执行程序并检查结果。
执行的结果应为每改变一次开关(SW2~SW5)的状态,再按脉冲按钮 SW1 发一次中 断( INT1 产生一次负跳变),则 LED 的状态随开关的状态而改变(亮或灭)。
五、 实验结果 1、 输入程序,并编译生成 hex 文件
2、 使用 Proteus绘制图形并加载 hex 文件
3、 运行图形结果为 中断开关每闭合一次,led灯会重新顺序执行
(2)定时器实验 一、 实验目的和要求
目的:学习掌握 MCS-51 单片机定时/计数器的基本用法,以及定时软件的设计方法。
要求:通过实验进一步了解时间常数的计算方法,掌握定时器加软件计数实现长时间定时的处理方法,熟悉定时器的查询和中断两种方式的应用。
二、 实验内容和原理(包括程序和硬件原理图)
程序:
1、 定时器查询方式定时:
ORG
0000H
MOV
TMOD, #01H
;设置 T0 工作方式
MOV
TL0, #0B0H MOV
TH0, #3CH
MOV
R0, #10
;R0 计数初值
SETB
P1.7
SETB TR0
WAIT:
JNB
TF0, WAIT
;TF0=0,则 100ms 未到等待
CLR
TF0
MOV
TL0, #0B0H
;重赋初值
MOV
TH0, #3CH
DJNZ
R0, WAIT
;1s 未到,则等待
MOV
R0, #0AH
CPL
P1.7
;1s 到改变 LED 状态
LJMP
WAIT 2、 采用定时器中断方式定时:
ORG
0000H
LJMP
MAIN
ORG
000BH
LJMP
TINT0
ORG
0100H
MAIN:
MOV
TMOD, #01H
;方式 1 定时
MOV
TL0, #0B0H
;定时器初值
MOV
TH0, #3CH
MOV
R0, #0AH
;R0 计数初值为 10
SETB
TR0
;启动定时器
SETB
ET0
;允许 T0 中断
SETB
EA
;CPU 开中断
SJMP
$
TINT0:
MOV
TL0,#0B0H
;重赋初值
MOV
TH0,#3CH
DJNZ
R0, DON
;1s 钟未到转返回 CPL P1.7 ;1s 钟到改变 LED 状态
MOV
R0, #0AH
;重赋计数初值
DON:
RETI
END
所用元件列表:
单片机 AT89C51 发光二极管 LED-BIBY 电阻 RES
实验原理图:
三、 主要仪器设备 Keil5、proteus8.4软件 四、 实验步骤 1、
设晶振频率 fosc=6MHZ,则机器周期=2μ s,16 位定时器(方式 1 定时)的最长定时 时间为:(2 16-0)×2=131.072ms。本实验要求定时 1s, 只靠定时器定时是不能实现的,可采用定时器加计数器 的方法实现,如 T0 定时 100ms,再加一个 10 次的计数 器,则 100ms×10=1000ms=1s,即可实现 1s 定时。
T0 定时 100ms 初值的计算如下:
(2 16-X)2×10-6=100×10-3
X=15536D=3CB0H 2、 建立设置工程、保存工程文件和源文件; 3、 编译、链接;
4、 PROTEUS 原理图绘制;
5、 进行 KEIL 与 PROTUES 联机仿真。
采用单步、断点、全速等方法调试程序,排除错误后,按全速执行在 proteus 中观测 LED 灯的闪烁。
五、 实验结果 1、 在原理图中加入 hex 文件
2、 运行结果为:
P1.7所在的 led 灯每隔一秒闪烁一次
实验总结
通过这次实验使我对定时器的工作原理有了更加深入的理解,熟悉了 MCS-51 单片机外部中断初始化编程方法及中断程序的调试方法如何。以及在定时器实验中,掌握了 MCS-51 单片机定时/计数器的基本用法,以及定时软件的设计方法。