单片机实验3 中断.定时器计数器实验 - 范文中心

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

10/12

西南科技大学

实验报告

课程名称: 单片机原理及应用A

实验名称: 中断、定时器/计数器实验

姓 名:

学 号:

班 级: 生医1401

指导教师: 雷华军

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

实验题目

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

一、 实验目的

作,会使用HEX文件进行单片机的仿真。 计数,利用定时器进行延时等。 1、熟练巩固单片机开发环境KEIL界面的相关操作和PROTUES仿真软件的操 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。 2

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

利用单片机1 P3.0口进行脉冲的输出,通过定时器进行端口定时控制,实现每1ms高低电平变换。就可以实现一个占空比为50%的矩形脉冲输出。对于定时器的定时功能实现,需要进行定时器模式选择,定时器初值设定。

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

将单片机1 P3.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的方脉冲信号触发中断进行计数,没来一个脉冲记一次数,再通过数码管显示出来。

3

四、 实验结果及分析

图④

通过按下按键开始进行脉冲的产生和计数,如图④左边为单片机1产生脉冲并通过数码管显示脉冲产生数,右边为单片机2接受脉冲同时也通过数码管显示脉冲接受数字。当按下按键时开始产生并传送脉冲,通过一个VSM counter timer进行计数验证的准确与否。

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

图⑤

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

4

图⑥

问题一:运行电路时,数码管乱码

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

问题二:定时器的时间设置问题

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

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

五、 体会

通过本次的实验,在前三个实验的基础上让我复习了知识点,也让我在次掌握了新的知识。在完成这次实验后,让我更加熟悉数码管的显示功能代码的实现。并且还学会了定时器中断的运用,学会了用更加精确的方式去进行定时延时操作。我觉得这次的课程实验让我知道,一次次的失败,并不会让我放弃去追求,相反它会引领着我去发现问题,从而解决问题,完成更深入的探索。也让我明白理论知识的重要性,并且与实际相结合,多动手,在实践中成长。所以我会很重视每一次的实验。我坚信:每次实验都会给我自身很大帮助。慢慢的积累点滴的知识,到最后就会多的。

六、 附录

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

#include

unsigned char code ET[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned int AT,s;

unsigned int a,b,c,d;

void delay(int counter)

{

int i,j;

for(i = 0;i

for(j =0;j

}

void anjian(void) interrupt 0 //按键进行控制开始产生脉冲

5

图⑥

问题一:运行电路时,数码管乱码

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

问题二:定时器的时间设置问题

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

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

五、 体会

通过本次的实验,在前三个实验的基础上让我复习了知识点,也让我在次掌握了新的知识。在完成这次实验后,让我更加熟悉数码管的显示功能代码的实现。并且还学会了定时器中断的运用,学会了用更加精确的方式去进行定时延时操作。我觉得这次的课程实验让我知道,一次次的失败,并不会让我放弃去追求,相反它会引领着我去发现问题,从而解决问题,完成更深入的探索。也让我明白理论知识的重要性,并且与实际相结合,多动手,在实践中成长。所以我会很重视每一次的实验。我坚信:每次实验都会给我自身很大帮助。慢慢的积累点滴的知识,到最后就会多的。

六、 附录

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

#include

unsigned char code ET[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned int AT,s;

unsigned int a,b,c,d;

void delay(int counter)

{

int i,j;

for(i = 0;i

for(j =0;j

}

void anjian(void) interrupt 0 //按键进行控制开始产生脉冲

5

{

P30=1;

TR0 =~TR0;

}

void Timer(void) interrupt 1 //中断函数

{

unsigned int count;

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;

}

}

}

void main ()

{

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

{

a=AT;

P2 = 0xff; //消除鬼影

P1 = 0xf7;

P2 = ET[a];

}

else if(AT

{

6

a=AT%10;

P2 = 0xff; //消除鬼影

P1 = 0xf7;

P2 = ET[a];

delay(2);

b=AT/10;

P2 = 0xff; //消除鬼影

P1 = 0xfb;

P2 = ET[b];

delay(2);

}

else if(AT

{

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);

}

else if(AT

{

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);

7

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

unsigned char code ET[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned int AT;

unsigned int a,b,c,d;

void delay(int counter)

{

int i,j;

for(i = 0;i

for(j =0;j

}

void anjian(void) interrupt 0 //中断函数,触发一次计数一次

{

AT++;

}

void main ()

{

IT0 = 1;

EX0 = 1;

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

while (1)

{

if(AT

{

a=AT;

P2 = 0xff; //消除鬼影

P1 = 0xf7;

P2 = ET[a];

}

8

else if(AT

P2 = 0xff; //消除鬼影 P1 = 0xf7;

P2 = ET[a];

delay(2);

b=AT/10;

P2 = 0xff; //消除鬼影 P1 = 0xfb;

P2 = ET[b];

delay(2);

}

else if(AT

{

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);

}

else if(AT

{

a=AT%1000%100%10; P2 = 0xff; //消除鬼影 P1 = 0xf7;

P2 = ET[a];

delay(2);

b=AT%1000%100/10;

P2 = 0xff; //消除鬼影 P1 = 0xfb;

9


相关内容

  • 单片机知识总结
    单片机知识总结 第1章 单片机概述 1. 单片机定义: 将处理器.存储器及各种输入输出接口集成在一个芯片上,就称之为单片微型处理器,简称单片机. 2.At89c51单片机引脚: 共有40引脚,按其功能可分为如下3类: (1)电源及时钟引脚( ...
  • 直流电机控制
    微机应用课程设计报告 题 目: 基于单片机的直流电动机控制器设计 专 业: 班 级: 姓 名: 学 号: 地 点: 时 间:指导老师: 摘要 电动机作为最主要的机电能量转换装置,其应用范围已遍及国民经济的各个领域和人们的日常生活.无论是在工 ...
  • 步进电机课程设计
    单片机综合设计实验 题目: 步进电动机综合控制 学 院 计算机科学与信息工程学院 专业年级 实验组员 指导教师 日 期 2013 级自动化三班 职称 2013--12-30 目录 摘要............................ ...
  • 直流电机速度控制_
    组员: 班级:研1308 授课教师:徐洪泽 计算机控制系统实践--直流电机速度控制 电子信息工程学院 2013-11-24 日期: 目录 1. 2. 整体设计 . ...................................... ...
  • 单片机 四路抢答器
    课程设计说明书 (2009/2010学年第二学期) 课程名称 :题 目 :专业班级 :学生姓名 :学 号 :指导教师 :设计周数 :设计成绩 : 单片机应用课程设计 四路抢答器 电气2班 韩昱 苗敬利 两周(10.6.28-10.07.09 ...
  • 89c51抢答器制作
    郑州科技学院 本科课程设计论文 题 目 专 业 姓 名 学 号 指导老师 郑州科技学院信息工程学院 二〇一四年 摘要 ............................................................. ...
  • 交通灯课程设计内容
    硬件大型实验周设计说明书11.1引言设计背景 自从 1886 两个德国人发明了第一辆汽车交通灯改变了交通路况,交通问题也渐渐被人们所重视.从英国伦敦街头的第一个以燃煤气为光源的红,蓝两色的机械 扳手式信号灯,到现在以电为光源的红黄绿三色交通 ...
  • 嵌入式系统论文
    多路温度检测系统设计 摘要:设计了一种多路温度检测系统,以ADC0809和AT89S52为核心,该系统主 要有三个部分:数据采集,AD 转换,数码管显示.选用模拟信号源代替温度传 感器为输入元件,利用ADC0809转换信号,送到显示器(8个 ...
  • 采用单片机设计频率计_毕业设计论文
    毕业设计论文 采用单片计设计频率计 系 专业 班级指导教师 职称 讲师 设计时间 目录 摘 要 ........................................................................ ...
  • 单片机实用技术
    单片机实用技术 作者:shenxq301 1 首先介绍经济使用的单片机AVR 使用学习板快速入门,尤其实用于在校学生和刚刚工作的工程技术人员. AVR mega16学习板 单价:240 元 该学习板可以从正规途径买到正版,当然也可从旧货市场 ...