一、实验目的
1、掌握定时器/计数器计数功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。 二、设计要求
1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。
2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态,在P 1.0口线上接示波器观察波形。 三、电路原理图
六、实验总结
通过本实验弄清楚了定时/计数器计数功能的初始化设定(TMOD,初值的计算,被计数信号的输入点等等),掌握了查询和中断工作方式的应用。 七、思考题
1、利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对 P1.0口线上波形进行计数,满50个,则取反P1.1口线状态,在P 1.1口线上接示波器观察波形。
答:程序见程序清单。
四、实验程序流程框图和程序清单。
1、定时器/计数器以查询方式工作,对外部连续周期性脉冲信号进行计数,每计满100个脉冲,则取反P1.0口线状态。 汇编程序:
ORG 0000H 开始START: LJMP MAIN ORG 0100H
TMOD初始化MAIN: MOV IE, #00H
MOV TMOD, #60H MOV TH1, #9CH MOV TL1, #9CH SETB TR1
LOOP: JNB TF1, LOOP
CLR TF1 CPL P1.0
AJMP LOOP END C语言程序:
#include
void main()
{
EA=0; ET1=0;
TMOD=0x60;
TH1=0x9C; TL1=0x9C; while(1) {
TR1=1;
while(!TF1); TF1=0; Y=!Y; } }
计数初值初始化中断初始化启动定时器N计数溢出Y清计数溢出标志P1.0口线取反 2、定时器/计数器以中断方式工作,对外部连续周期性脉冲信号进行计数,每计满200个脉冲,则取反P1.0口线状态。 汇编程序:
ORG 0000H START: LJMP MAIN ORG 001BH LJMP TTC1 ORG 0100H
MAIN: MOV TMOD, #60H MOV TH1, #38H MOV TL1, #38H SETB EA SETB ET1 SETB TR1 HERE: LJMP HERE ORG 0200H TTC1: CPL P1.0 RETI END
C语言程序:
#include
EA=1; ET1=1; TMOD=0x60; TH1=0x38; TL1=0x38; TR1=1;
while(1); }
void TTC1() interrupt 3 {
Y=!Y; }
开始TMOD初始化计数初值初始化中断初始化启动计数器等待中断开始输出取反中断返回 3、利用定时器0,在P1.0口线上产生周期为200微秒的连续方波,利用定时器1,对 P1.0口线上波形进行计数,满50个,则取反P1.1口线状态。 汇编程序:
ORG 0000H
START: LJMP MAIN ORG 001BH LJMP TTC1 ORG 0100H
MAIN: MOV TMOD, #62H MOV TH1, #0CEH MOV TL1, #0CEH
MOV TH0, #9CH
MOV TL0, #9CH MOV IE, #88H SETB TR0 SETB TR1
LOOP1: JNB TF0, LOOP1 CPL P1.0 CLR TF0
LJMP LOOP1 TTC1: CPL P1.1 RETI END
C语言程序:
#include
void main()
{
TMOD=0x62; TH0 =0x9C; TL0 =0x9C;
TH1 =0xCE; TL1 =0xCE; EA =1; ET1 =1; ET0 =0; TCON=0x50;
while(1) {
while(!TF0); TF0=0; Y0=!Y0; } }
void TTC1()interrupt 3 {
Y1=!Y1; }
开始TMOD初始化计数初值初始化中断初始化启动定时器0启动计数器1N定时时间到Y 清计数溢出标志P1.0口线取反开始输出取反中断返回五、实验结果(波形图)。
单片机实验之定时器计数器应用实验二



