编程点滴:8位AVR定时器溢出中断测试程序

发布者:Blissful5最新更新时间:2016-10-21 来源: eefocus关键字:8位AVR  定时器溢出  中断测试 手机看文章 扫描二维码
随时随地手机看文章
本程序利用timer0控制LED以500ms为间隔亮灭。

文件组成:测试程序,定时器设置程序及头文件



/* *****************************************
* File name: main.c
* Function: 8位定时器溢出中断方式测试程序
* Description: 定时器控制LED以500ms间隔闪烁
* Author & Date: Joshua Chan, 2012/03/24
* *****************************************/
#include
#include
#include
#include
#include
#include "timer_8bit_test1.h"

/* 利用timer0溢出中断控制LED每500ms间隔亮灭 */
void main(void)
{
set_pb0_output();
timer0_ovf_init();
_SEI(); /* 全局中断使能 */
while (1)
_WDR();
}




/* *****************************************
* File name: timer_8bit_test1.h
* Function: 8位定时器溢出中断方式测试程序
* Description: 定时器控制LED以500ms间隔闪烁
* Author & Date: Joshua Chan, 2012/03/24
* *****************************************/
#ifndef _TIMER_8BIT_TEST1_H
#define _TIMER_8BIT_TEST1_H

/* 配置8位定时器timer0溢出中断使能 */
extern void timer0_ovf_init(void);

/* 配置LED管脚为输出 */
extern void set_pb0_output(void);

/* LED亮 */
extern void set_pb0_low(void);

/* LED灭 */
extern void set_pb0_high(void);

/* 检测LED状态 */
extern unsigned char pb0_is_high(void);

#endif



/* *****************************************
 * File name: timer_8bit_test1.c
 * Function:  8位定时器溢出中断方式测试程序
 * Description: 定时器控制LED以500ms间隔闪烁
 * Author & Date: Joshua Chan, 2012/03/24
 * *****************************************/
#include 
#include 
#include 
#include 
#include 
#include "timer_8bit_test1.h"

/* 配置8位定时器timer0溢出中断使能 */
void timer0_ovf_init(void)
{
    TCCR0 |= 0x07;              /* 预分频 1024 */
    TIMSK |= 0x01;              /* 溢出中断使能 */
    TCNT0 = 0x64; /* 中断发生间隔 ((0xFF-0x64)+1)*1024*(1/16.0MHz)*1000 = 10ms */
}

/* 配置LED管脚为输出 */
void set_pb0_output(void)
{
    DDRB |= 0x01;
}

/* LED亮 */
void set_pb0_low(void)
{
    PORTB &= ~(0x01);
}

/* LED灭 */
void set_pb0_high(void)
{
    PORTB |= 0x01;
}

/* 检测LED状态 */
unsigned char pb0_is_high(void)
{
    return (PORTB & 0x01);
}

/* 定义timer0溢出中断处理函数 */
#pragma vector = TIMER0_OVF_vect
__interrupt void timer0_isr(void)
{
    static volatile unsigned char count = 50;

    TCNT0 = 0x64;  /* 溢出中断处理函数中需对TCNT0值从新设置 */
    if (!(--count)) {
        count = 50;
        if (pb0_is_high())
            set_pb0_low();
        else
            set_pb0_high();
    }
}
 
关键字:8位AVR  定时器溢出  中断测试 引用地址:编程点滴:8位AVR定时器溢出中断测试程序

上一篇:编程点滴:8位AVR定时器比较匹配中断测试程序
下一篇:编程点滴:AVR外部中断测试程序

推荐阅读最新更新时间:2024-03-16 15:16

基于AVR的串口与PC机通信代码(uart8位数据)
/************************************ AVR时钟:8.00MHz *波特率9600(51)8位数据,1位停止,当波特率设置为19200时,UBRR=25,4800=103 *注:波特率设置9600最佳,别的数据不稳定,不同波特率对应的UBRR值参考手册 *PC机向开发板发送一个字符,开发板将其大写字母回写给PC机 ***********************************/ #include iom16v.h #include macros.h void USART_Init( unsigned int baud ) { /* 设置波特率,baud的值查数据手
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved