定时计数器的基本应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二定时/计数器的基本应用

课程:单片机技术及C51程序设计

1、实验目的

掌握定时/计数器T0,T1的方式选择和编程方法;

了解中断服务程序的设计方法。

2、实验电路

图2-1 实验2电路图

3、实验内容

利用定时器T0工作在方式3,用TL0计数器对应的8位定时器实现一个发光管以1s闪烁,用TH0计数器对应的8位定时器实现另一个发光管以

0.5s 闪烁。

4、程序框图

考程序流程图如图2-2所示。

5、源程序

源程序:

/************************

程序预处理部分

************************/

#include //52系列单片机头文件

#define uchar unsigned char

#define uint unsigned int

/************************

变量定义部分

************************/

sbit LED1=P1^0;

sbit LED2=P1^1;

uint num1,num2;

/************************

主程序部分

************************/

void main()

{

TMOD=0x03; //设置定时器0为工作方式3(0000 0011)TH0=6; //装初值

TL0=6;

EA=1; //开总中断

ET0=1; //开定时器0中断

ET1=1; //开定时器1中断

TR0=1; //启动定时器0

TR1=1; //启动定时器0的高8位计数器

while(1) //程序停止在这里等待中断发生

{

if(num1>=3686) //如果到了3686次。说明1秒时间到

{

num1=0; //然后把num1清0重新再计3686次

LED1=~LED1; //让发光管状态取反

}

if(num2>=1843) //如果到了1843次。说明半秒时间到

{

num2=0; //然后把num2清0重新再计1843次

LED2=~LED2; //让发光管状态取反

}

}

}

void TL0_time() interrupt 1

{

TL0=6; //重装初值

num1++;

}

void TH0_time() interrupt 3

{

TL0=6; //重装初值

num2++;

}

6、思考题:

(1)如果只用一个八位的定时器实现上述功能,请编程实现

(2)采用查询方式编程实现本实验

7、试验小结:

实验时首先用到Proyeus7这个软件,对这个软件的界面还不熟悉,在放置电源的时候找不到电源这个原器件。保存好电路图文件后用Keil uvision3软件进行程序设计。首先新建工程选择89c51,然后再新建文件进行程序编写,编写完成后程序是没有生效的,必须将文件保存到对应的工程下。然后再在电路的c51原件上置入程序。然后进行仿真,观察LED 灯的闪烁情况,根据要求调整程序中的参数。

相关文档
最新文档