目的:利用“模块化单片机教学实验平台”,加深对单片机的中断系统的理解。
任务:利用单片机的中断系统完成程序设计。
使用AT89S52单片机的定时器/计数器T0控制实验箱母板上的LED1每隔1秒点亮一次(即亮1秒,灭1秒,如此反复)。LED1的阴极与AT89S52单片机的P1.5引脚连接。(AT89S52单片机的T1中断入口也为001BH。)
- 实验过程和结果
①关掉实验箱电源。将CPU 板插接在JK1、JK2 上,注意CPU 板的插接方向。按照前面连接关系表将硬件连接好。
②将AT89S52 芯片插在CPU 板的CPU 插座上(不要插反)。母板上电。
③运行Keil 开发环境,按照“模块化单片机教学实验平台配套的实验指导书1.2.3 节”介绍的方法建立工程exp8.uV2,CPU 为AT89S52,不包含启动文件STARTUP.A51。
④把示例源程序exp8.asm 加入到工程exp8.uV2,并设置工程exp8.uV2 属性,将其晶振频率设置为11.0592MHz,选择输出可执行文件。
⑤构造(Build)工程exp8.uV2。
⑥通过PROGISP 烧写软件,利用ISP 下载线(见“模块化单片机教学实验平台配套的实验指导书1.3 节”)把HEX 文件下载到单片机中。
⑦下载成功后,观察母板上的LED1。
硬件连线:
CPU板 | 母板 |
P2:P1.5 | J48:LED1 |
扩展实验:使用AT89S52 单片机的定时器/计数器控制实验箱母板上的LED1 亮2 秒,灭1 秒,亮2 秒,灭1 秒,如此反复。LED1 的阴极与AT89S52 单片机的P1.5引脚连接。
实验时使用进位标志位C为标志变量,导致程序错误。实验中使用特殊功能寄存器要考虑到是否会影响到程序的执行,最好避免使用特殊功能寄存器,以免产生意料外的情况。
(1)基本实验
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP ON
MAIN:
SETB ET1 ;打开中断分开关
SETB EA ;打开中断总开关
MOV R0,#0 ;初始化r0
MOV TMOD,#10H ;设置计时器模式
MOV TL1,#0B0H ;初始值低八位
MOV TH1,#03CH ;初始值低八位
MOV A,#60D ;设置初始A
SETB TR1 ;开始计时
LJMP $ ;
ON:
CJNE R0,#0,OF ;以R0判断灯是否点亮
DEC A ;A减一
CJNE A,#00H,J ;判断是否相同 不相同转移(结束)
CLR P1.5 ;点亮灯
MOV R0,#1 ;R0置位1
MOV TL1,#0B0H ;初始化计时器
MOV TH1,#03CH ;
MOV A,#60D ;设置时间
J:
RETI
OF:
DEC A
CJNE A,#00H,K
SETB P1.5 ;关闭灯
MOV R0,#0
MOV TL1,#0B0H
MOV TH1,#03CH
MOV A,#60D
K:
RETI
END
(2)扩展实验
ORG 0000H
LJMP MAIN ;除修改时间外与上个实验程序无异
ORG 001BH
LJMP ON
MAIN:
SETB ET1
SETB EA
MOV R0,#0
MOV TMOD,#10H
MOV TL1,#0B0H
MOV TH1,#03CH
MOV A,#20D ;修改所设计延迟从3S->1s
SETB TR1
LJMP $
ON:
CJNE R0,#0,OF
DEC A
CJNE A,#00H,J
CLR P1.5
MOV R0,#1
MOV TL1,#0B0H
MOV TH1,#03CH
MOV A,#40D ;修改所设计延迟从3S->2s
J:
RETI
OF:
DEC A
CJNE A,#00H,K
SETB P1.5
MOV R0,#0
MOV TL1,#0B0H
MOV TH1,#03CH
MOV A,#20D ;修改所设计延迟从3S->1s
K:
RETI
END