哈尔滨理工大学荣成学院
单片机原理及应用Protues 仿真实验
班级:电气18
学号:
姓名:
日期: 2020.06.03
实验五单片机定时器的使用
一、实验名称:单片机定时器的使用
二、实验目的
1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法;
2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法;
3.掌握在Proteus环境下建立文件原理图的方法;
4.实现Proteus与Keil联调软件仿真。
三、使用仪器设备编号、部件及备件
1.实验室电脑;
2.单片机实验箱。
四、实验过程及数据、现象记录
在Proteus 环境下建立如下仿真原理图,并保存为文件;
原理图中常用库元件的名称:
无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON
发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW
在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下:
ORG 0000H LJMP MAIN
ORG H ;定时器T0的入口地址LJMP TIMER0
MAIN: MOV TMOD,#01H MOV R0,#05H
MOV TH0,# H ;定时器的初值MOV TL0,# H
SETB ;开定时器T0的中断SETB ;开CPU的中断SETB ;启动定时器T0 MOV A,#01H LOOP: MOV P1,A RL A
CJNE R0,#0,$ MOV R0,#05H SJMP LOOP TIMER0: DEC R0 MOV TH0,# H ; MOV TL0,# H ; RETI
END
将以上程序补充完整,流水时间间隔为250ms。
#include<reg51.h>
#include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar i=0;
void int_timer0()interrupt 1
{ i++;
if(i==5)
{ i=0;
P1=_crol_(P1,1);
} TH0=0x3c; TL0=0xb0;
}
void main()
{ TMOD=0x01;
TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1;
P1=0xfe; while(1);
}
将.HEX文件导入仿真图,运行并观察结果;
利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。
五、实验数据分析、误差分析、现象分析
现象:实现流水灯,时间间隔250ms,由定时器实现定时250ms。
六、回答思考题
1.定时器由几种工作模式,各种模式的最大定时时间是多少?
答:模式0:8192
模式1:65536
模式2:256(自动重装载模式,波特率发生器必须是这个模式)
模式3:256(该模式用处不大,将定时器分成两个8位定时器)
2.各种模式下初值怎么计算?
答:定时工作方式时,计数脉冲由内部供给,对机器周期进行计数,计数脉冲频率fcont=fosc*1/12、计数周期T=1/fcont=12/fosc定时工作方式的计数初值X等于:X=M-计数值=M-t/T=M-(fosc*t)/12式中:fosc为振荡器的振荡频率,t为要求定
吋的时间。