单片机定时器的使用
哈尔滨理工大学荣成学院 单片机原理及应用单片机原理及应用 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 在在 KeilKeil 环境下建立源程序并保存为环境下建立源程序并保存为 .ASM.ASM 文件,生成文件,生成.HEX.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 #include #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=0 x3c; TL0=0 xb0; } void main() { TMOD=0 x01; TH0=0 x3c; TL0=0 xb0; ET0=1; EA=1; TR0=1; P1=0 xfe; while(1); } 将将.HEX.HEX 文件导入仿真图,运行并观察结果;文件导入仿真图,运行并观察结果; 利用利用 KeilKeil 软件将程序下载至实验箱,进行硬件仿真,观察实验结果。软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析五、实验数据分析、误差分析、现象分析 现象:实现流水灯,时间间隔 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 为要求定 吋的时间。