实验三-定时器、计数器应用实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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