AVR16单片机--定时器实验

AVR16单片机--定时器实验,第1张

一、实验目的

1. 理解单片机定时器的工作原理。

2. 掌握定时器溢出中断实现定时的编程方法。

二、实验内容

1. 验证课堂例题

编译下载运行课堂例题——“T/C0溢出中断”(T0秒表),查看运行结果。理解程序的编程思想和程序执行过程。

2. 设计程序

参考上述例题的电路和编程思路,自行设计电路,包括六位数码管、2个按键,完成数码管显示和按键控制数码管数字累加速度。

具体要求如下:

(1)定时器溢出时间为20ms;

(2)上电复位后,数码管显示“000000”并保持,直到有按键按下;

(3)数码管后两位循环显示0-99;

(4)按下K1键后,数字以每0.5s加1的速度递增;按下K2键后,数字以每1s加1的速度递增。

在设计报告中,需进行总体设计思路描述,给出所涉及到的主程序、中断程序、关键功能子函数的流程图和设计代码。描述程序调试结果及出现的问题。

三、实验结果

1. 在下方贴出使用Proteus绘制的电路原理图。

 

2. 描述所设计程序的总体设计思路(包括根据任务划分的程序顶层结构、各任务的设计思路、各任务间的数据传递,如何解决关键问题等)

程序顶层结构:程序顶层包含各类头文件,定义相应变量,声明各个函数。

各任务的设计思路:首先编写延迟函数,初始化函数,然后编写数码管刷新函数,定时中断函数,按键检测函数key。

各任务间的数据传递;定时中断函数将定时时长传递给数码管显示函数,显示各时刻的定时值。

关键问题:不改变初值情况下改变定时时长

解决办法:定义一个全局变量count,按键按下改变count的值,以此来改变计时时长。

3.根据所设计的程序顶层结构,对主函数、中断函数(如果没有使用中断可不写)、关键功能子函数的设计思路进行简单描述,并给出各函数的流程图(用Visio画)

主函数:IO初始化,中断初始化,循环按键检测函数以及数码管显示函数。

 定时计数器中断函数:TCNT0=21,按键按下后开始计数,计数在数码管后两位显示,在0-99之间循环计数。

 按键检测函数:判断PIND端口的返回值来确定是否有按键按下,按键按下就开启中断,通过改变count的值来改变计数器计数时间。

 4. 给出(3)中相关函数的实现代码(在ICCAVR中进行编程,以截屏贴图方式放入实验报告中,注意规范性,必须加注释)

//文件包含
#include 
#include 

//宏定义
#define uchar unsigned char 
#define uint unsigned int 

 
//全局变量定义
uchar const DuanXuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //共阴级数码管显示0-9
uchar const WeiXuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};    //调用第0-5位数码管亮
uchar LEDBuf[6]={0,0,0,0,0,0};     //存放数码管显示数据,0-9数字格式
uchar sencond_cnt=0;               //用于1s计数
uint count=0;                  

//函数声明
void delay(uint ms);               //延时函数
void LEDshow(uchar LEDBuf[6]);     //数码管显示函数
void IO_Init();                    //IO初始化函数
void Timer0_Init();                //T/C0初始化函数

//主函数
void main();

//中断函数
void Timer0_TOV_ISR();        //T/C0溢出中断服务函数


//通用功能子函数
//**************************************************************************************
//函数名:延时函数
//输入参数:ms
void delay(uint ms)         //延时函数
{
   uint p,q;
   
   for(p=0;p

4.给出程序调试结果(如程序调试成功,实现所要求功能,需要同时提交ICCAVR文件和Proteus文件;如不能调试成功,请说明错误现象并分析原因)

能完成以下要求:

(1)定时器溢出时间为20ms;

(2)上电复位后,数码管显示“000000”并保持,直到有按键按下;

(3)数码管后两位循环显示0-99;

(4)按下K1键后,数字以每0.5s加1的速度递增;按下K2键后,数字以每1s加1的速度递增。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/797802.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-06
下一篇2022-05-06

发表评论

登录后才能评论

评论列表(0条)