实验三-定时器、计数器应用实验二

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

实验三-定时器、计数器应用实验二

定时器/计数器应用实验二

设计性试验

2012年11月21日星期三第三四节课

一、实验目的

1、掌握定时器/计数器计数功能的使用方法。

2、掌握定时器/计数器的中断、查询使用方法。

3、掌握Proteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二、设计要求

1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。

2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。

三、电路原理图

开始

系统初始化装计数初值并

启动定时器

定时?

时间到 输出取反

结束

清除溢出标志N

Y 四、实验程序流程框图和程序清单及实验结果 /*********

设计要求:(1)单片机的定时器/计数器以查询方式工作,设定计数功能,

对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0

口线状态,在P1.0口线上接示波器观察波形 编写:吕小洋

时间:2012年11月16日18:09:40 ***************/

ORG

0000H

START: LJMP MAIN

ORG

0100H MAIN: MOV SP, #2FH CLR EA ;关总中断

CLR ET1

;禁止定时器1中断

MOV TMOD, #01100000B ;设置计数器1为工作方式2 MOV TH1, #9CH ;设置计数初值 MOV

TL1, #9CH

SETB TR1

;启动计数器

LOOP: JNB TF1, LOOP ;查询计数是否溢出 CPL P1.0 ;输出取反

CLR

TF1

;清除计数溢出标志 LJMP LOOP

;重复取反

END

//C语言编程//

#include "reg52.h"

sbit P1_0=P1^0;

void main()

{

TMOD=0x50; /*T/C1工作在定时器方式1*/ TR1=1; /*启动T/C1*/

for(;;)

{

TH1=(65536-100)/256; /*装载计数初值*/

TL1=(65536-100)%256;

do /*查询等待TF1置位*/

{ }

while(!TF1);

P1_0=!P1_0; /*定时时间到P1.0取反*/

TF1=0; /*溢出标志清零*/

}

}

启动定时器

等待中断输出取反

中断返回

开始开始中断初始化TMOD初始化计数初值初始化结束

/*********

设计要求:(2)单片机的定时器/计数器以中断方式工作,设定计数功能,

对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0

口线状态

在P1.0口线上接示波器观察波形

编写:吕小洋

时间:2012年11月16日18:48:04 ***************/

ORG

0000H

START: LJMP MAIN ORG

001BH

LJMP TTC1

ORG

0100H MAIN: MOV SP,

#2FH SETB EA ;开总中断 SETB ET1

;定时器1允许中断

MOV TMOD, #60H ;设置T1为工作方式2 MOV TH1, #38H ;设置计数初值 MOV

TL1, #38H

SETB TR1

;启动定时器 HERE: LJMP HERE

;等待中断

/****中断服务程序****/

ORG

0200H TTC1: CPL P1.0

;输出取反

RETI

;中断返回

END

//C语言编程//

#include"reg52.h"

sbit P1_0=P1^0;

void main()

{

EA=1; /*开总中断*/

ET1=1; /*开T/C1中断*/

TMOD=0x50; /*T/C1工作在定时器方式1*/ TH1=(65536-200)/256; /*装载计数初值*/

TL1=(65536-200)%256;

TR1=1; /*启动T/C1*/

while(1);

}

void timer1() interrupt 3 /*T/C1中断服务程序入口*/ {

P1_0=!P1_0; /*定时时间到P1.0取反*/

TH1=(65536-200)/256; /*装载计数初值*/

TL1=(65536-200)%256;

}

开始

中断初始化TMOD初始化、定时 计数

初始化、启动T0 T1定时

?时间到 输出取反清除溢出标志N Y

输出取反中断返回开始结束

五、实验总结

通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器/计数器以查询、中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数。同时掌握了单片机系统的硬件和软件设计方法。 六、思考题

1、利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对 P1.0口线上波形进行计数,满50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。

/*********

设计要求:利用定时器0,在P1.0口线上产生周期为200us 的连续方波

利用定时器1,对P1.0口线上波形进行计数,满50个则取反平P1.1口线状态,在P1.1口线上接示波器观察波形 编写:吕小洋

时间:2012年11月16日20:07:08

***************/ ORG 0000H START:LJMP MAIN

ORG 001BH

LJMP TTC1

ORG 0100H

MAIN:MOV SP, #2FH

MOV IE, #88H

MOV TMOD, #62H ;设置T1为计数功能(方式2) T0为定时(方式2)

MOV TL0, #9CH

MOV TH0, #9CH ;设置定时100us 初值

MOV TL1, #0CEH

MOV TH1, #0CEH ;设置计数50个初值 SETB TR0 ;启动定时器 SETB TR1 ;启动计数器 LOOP:JNB TF0, LOOP ;查询定时时间是否已到 CPL P1.0 ;输出取反 CLR TF0 ;清除计数溢出标志 LJMP LOOP

TTC1:CPL P1.1 ;输出取反

RETI END

相关文档
最新文档