单片机实验3中断定时器计数器实验.docx

上传人:b****5 文档编号:6928350 上传时间:2023-01-12 格式:DOCX 页数:11 大小:42.88KB
下载 相关 举报
单片机实验3中断定时器计数器实验.docx_第1页
第1页 / 共11页
单片机实验3中断定时器计数器实验.docx_第2页
第2页 / 共11页
单片机实验3中断定时器计数器实验.docx_第3页
第3页 / 共11页
单片机实验3中断定时器计数器实验.docx_第4页
第4页 / 共11页
单片机实验3中断定时器计数器实验.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

单片机实验3中断定时器计数器实验.docx

《单片机实验3中断定时器计数器实验.docx》由会员分享,可在线阅读,更多相关《单片机实验3中断定时器计数器实验.docx(11页珍藏版)》请在冰豆网上搜索。

单片机实验3中断定时器计数器实验.docx

单片机实验3中断定时器计数器实验

 

西南科技大学

实验报告

 

课程名称:

单片机原理及应用A

实验名称:

中断、定时器/计数器实验

姓名:

学号:

班级:

生医1401

指导教师:

雷华军

 

西南科技大学信息工程学院制

实验题目

数码管动态扫描显示驱动、键盘动态扫描驱动

一、实验目的

1、熟练稳固单片机开发环境KEIL界面的相关操作和PROTUES仿真软件的操作,会使用HEX文件进展单片机的仿真。

2、了解定时器的原理和四种工作方式的使用方法,学习定时器的相关应用,包括产生信号和计数,利用定时器进展延时等。

3、进一步掌握熟练单个数码管以及多位数码管的显示原理,学会将0~1000的数字进展显示。

4、掌握利用单片机产生矩形方脉冲的相关原理。

二、实验原理

1、定时器构造和原理

图①

上图①为定时器T0、T1的构造,其中振荡器经12分频后作为定时器的时钟脉冲,T为外部计数脉冲输入端,通过开关K1选择。

反相器,或门,与门共同构成启/停控制信号。

TH和TL为加1计数器,TF为中断标志。

每接收到一个脉冲,加1计数器自动加1,当计数器中的数被加为0时产生溢出标志,TF将被置1。

计数器工作方式的选择和功能的实现需要配置相应的存放器TMOD和TCON。

2、定时器工作方式 

定时器共有四种工作方式分别为方式0——方式3。

 

方式0:

13位计数器,最大计数值为213个脉冲。

 

方式1:

16位计数器,最大计数值为216个脉冲。

 

方式2:

8位自动重装计数器。

该方式下,TL进展计数工作,TH用于存放计数初值,当产生溢出中断请求时会自动将TH中的初值重新装入TL,以使计数器继续工作。

 

方式3:

仅限于T0计数器,在方式3下,T0计数器被分成两个独立的8为计数器TL0和TH0。

3、定时器间隔1ms产生一个脉冲

利用单片机1P3.0口进展脉冲的输出,通过定时器进展端口定时控制,实现每1ms上下电平变换。

就可以实现一个占空比为50%的矩形脉冲输出。

对于定时器的定时功能实现,需要进展定时器模式选择,定时器初值设定。

4、利用中断进展脉冲的计数

将单片机1P3.0口输出的脉冲连接到单片机2的中断INT0口P3.2,通过脉冲的上下电平变换触发中断0,进展脉冲个数的计数。

三、实验步骤

〔一〕实验详细步骤

1、启动KEIL建立一个空白工程,然后命名文件。

 

2、新建源程序文件,输入程序代码并保存,然后进展综合编译。

假设在编译过程中发现错误,那么找出并更正错误,直至编译成功为止。

 

3、通过设置生成HEX文件,保存。

 

4、启动Protues建立一个空白工程,然后命名文件

5、进展电路的原理图连接并输入HEX文件进展仿真。

〔二〕实验仿真原理图

 

图②图③

如图②为单片机1的脉冲产生系统,通过定时的定时控制,让P3.0口输出脉宽为1ms的方脉冲,

对于定时器程序的初始化。

TMOD=(TMOD&0XF0)|0X00;//定时器模式0的选择

s=8192-11059.2/12;TH0=s/32;TL0=s%32;//定时器的初值的设定

如图③为单片机2的电路连接原理,单片机②通过承受单片机1的方脉冲信号触发中断进展计数,没来一个脉冲记一次数,再通过数码管显示出来。

四、实验结果及分析

图④

通过按下按键开场进展脉冲的产生和计数,如图④左边为单片机1产生脉冲并通过数码管显示脉冲产生数,右边为单片机2承受脉冲同时也通过数码管显示脉冲承受数字。

当按下按键时开场产生并传送脉冲,通过一个VSMcountertimer进展计数验证的准确与否。

按下按键后发现两个多位数码管同时显示并跳转同样的数字,并且计数器也显示同样的数字。

如图⑤所示。

 

图⑤

最后通过示波器验证观察所产生的脉冲是否正确,通过调节示波器上的时间和幅度旋钮可以观察到矩形方波的产生。

如图⑥所示

 

图⑥

问题一:

运行电路时,数码管乱码 

解决的方法:

检查电路,发现程序中扫描信号端口错误,将扫描信号的端口顺序调换,重新运行。

 

问题二:

定时器的时间设置问题 

解决的方法:

检查程序,发现是是定时器的初始化设置问题,在改动后,重新编译后在次运行电路,电路正常显示,符合要求。

通过本次实验,通过实验我切身实际的进展代码的编写以及电路的仿真连接从中发现问题,解决问题,再而收获知识,获取经历。

五、体会

通过本次的实验,在前三个实验的根底上让我复习了知识点,也让我在次掌握了新的知识。

在完成这次实验后,让我更加熟悉数码管的显示功能代码的实现。

并且还学会了定时器中断的运用,学会了用更加准确的方式去进展定时延时操作。

我觉得这次的课程实验让我知道,一次次的失败,并不会让我放弃去追求,相反它会引领着我去发现问题,从而解决问题,完成更深入的探索。

也让我明白理论知识的重要性,并且与实际相结合,多动手,在实践中成长。

所以我会很重视每一次的实验。

我坚信:

每次实验都会给我自身很大帮助。

慢慢的积累点滴的知识,到最后就会多的。

六、附录

1、单片机1脉冲产生代码

#include

unsignedcharcodeET[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedintAT,s;

unsignedinta,b,c,d;

voiddelay(intcounter)

{

inti,j;

for(i=0;i<10;i++)

for(j=0;j

}

voidanjian(void)interrupt0//按键进展控制开场产生脉冲

{

P30=1;

TR0=~TR0;

}

voidTimer(void)interrupt1//中断函数

{

unsignedintcount;

s=8192-11059.2/12;

TH0=s/32;

TL0=s%32;

if(++count>10)

{

count=0;

P30=~P30;//上下电平取反

if(P30==0)

{AT++;}

if(AT>9999)

{

AT=0;

}

}

}

voidmain()

{

TMOD=(TMOD&0XF0)|0X00;//模式0选择

s=8192-11059.2/12;

TH0=s/32;

TL0=s%32;//初值设定

TR0=0;

ET0=1;

IT0=1;

EX0=1;

EA=1;//定时器的初始化

while

(1)

{

if(AT<10)

{

a=AT;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

}

elseif(AT<100)

{

a=AT%10;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

delay

(2);

b=AT/10;

P2=0xff;//消除鬼影

P1=0xfb;

P2=ET[b];

delay

(2);

}

elseif(AT<1000)

{

a=AT%100%10;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

delay

(2);

b=AT%100/10;

P2=0xff;//消除鬼影

P1=0xfb;

P2=ET[b];

delay

(2);

c=AT/100;

P2=0xff;//消除鬼影

P1=0xfd;

P2=ET[c];

delay

(2);

}

elseif(AT<10000)

{

a=AT%1000%100%10;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

delay

(2);

b=AT%1000%100/10;

P2=0xff;//消除鬼影

P1=0xfb;

P2=ET[b];

delay

(2);

c=AT%1000/100;

P2=0xff;//消除鬼影

P1=0xfd;

P2=ET[c];

delay

(2);

d=AT/1000;

P2=0xff;//消除鬼影

P1=0xfe;

P2=ET[d];

delay

(2);

}//数码管进展数字显示局部

}

}

2、单片机2承受脉冲代码

#include

unsignedcharcodeET[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedintAT;

unsignedinta,b,c,d;

voiddelay(intcounter)

{

inti,j;

for(i=0;i<10;i++)

for(j=0;j

}

voidanjian(void)interrupt0//中断函数,触发一次计数一次

{

AT++;

}

voidmain()

{

IT0=1;

EX0=1;

EA=1;//中断0初始化

while

(1)

{

if(AT<10)

{

a=AT;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

}

elseif(AT<100)

{

a=AT%10;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

delay

(2);

b=AT/10;

P2=0xff;//消除鬼影

P1=0xfb;

P2=ET[b];

delay

(2);

}

elseif(AT<1000)

{

a=AT%100%10;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

delay

(2);

b=AT%100/10;

P2=0xff;//消除鬼影

P1=0xfb;

P2=ET[b];

delay

(2);

c=AT/100;

P2=0xff;//消除鬼影

P1=0xfd;

P2=ET[c];

delay

(2);

}

elseif(AT<10000)

{

a=AT%1000%100%10;

P2=0xff;//消除鬼影

P1=0xf7;

P2=ET[a];

delay

(2);

b=AT%1000%100/10;

P2=0xff;//消除鬼影

P1=0xfb;

P2=ET[b];

delay

(2);

c=AT%1000/100;

P2=0xff;//消除鬼影

P1=0xfd;

P2=ET[c];

delay

(2);

d=AT/1000;

P2=0xff;//消除鬼影

P1=0xfe;

P2=ET[d];

delay

(2);

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1