ATmega32单片机定时器程序

发布者:masphia最新更新时间:2019-11-28 来源: 51hei关键字:ATmega32  单片机  定时器 手机看文章 扫描二维码
随时随地手机看文章

ATmega32的有三个定时器,T0和T2是8位的,T1是16位的,各自提供了很多功能

都是以前用studio写的,那时还没用iar

*****************************************************************

//定时器0溢出中断

//CPU:mega32

//编译器:winavr


#include

#include

int main(void)

{

DDRC |= (1 << 7);//PC7置为输出


TIMSK |= 1<TCCR0 |= (1 << CS02) |(0 << CS01) | (1 << CS00);//1024分频

sei();//使能全局中断


while(1);

}

SIGNAL(SIG_OVERFLOW0)//TIMER0 溢出中断服务程序

{

PORTC ^= 1<<7;//PC7取反

}

******************************************************************


*****************************************************************

//定时器0普通匹配模式中断

//CPU:mega32

//编译器:winavr

#include

#include

int main(void)

{

DDRC |= (1 << 7);//PC7置为输出


TIMSK |= 1<OCR0 = 0X10;//匹配值

TCCR0 |= (1 << CS02) |(0 << CS01) | (1 << CS00);//1024分频

sei();//使能全局中断


while(1);

}

SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中断服务程序

{

TCNT0 = 0;//计数值清0

PORTC ^= 1<<7;//PC7取反

}

******************************************************************


*****************************************************************

//定时器0匹配时清零模式(CTC)中断

//CPU:mega32

//编译器:winavr


#include

#include

int main(void)

{

DDRC |= (1 << 7);//PC7置为输出

DDRB |= (1 << 3);//PC7置为输出

TIMSK |= 1<OCR0 = 0X10;//匹配值

TCCR0 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,1024分频

sei();//使能全局中断


while(1);

}

SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中断服务程序

{

PORTC ^= 1<<7;//PC7取反

}

******************************************************************


*****************************************************************

//定时器0输出正弦波

//CPU:mega32

//编译器:winavr


#include

#include

const char sindata[128] = {128,134,140,147,153,159,165,171,177,182,188,

193,199,204,209,213, 218,222,226,230,234,237,240,243,245,248,250,251,253,254,

254,255, 255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222, 218,

213,209,204,199,193,188,182,177,171,165,159,153,147,140,134, 128,122,116,109,

103,97,91,85,79,74,68,63,57,52,47,43, 38,34,30,26,22,19,16,13,11,8,6,5,3,2,2,1,

1,1,2,2,3,5,6,8,11,13,16,19,22,26,30,34, 38,43,47,52,57,63,68,74,79,85,91,97,

103,109,116,122};

unsigned char x=0;

int main(void)

{

DDRB |= (1 << 3);//PB3  (OC0)  置为输出

TIMSK |= 1<TCCR0 |= (1 << WGM01) | (1 << WGM00) | (1 << COM01) | (0 << COM00) |(0 << CS02) | (0 << CS01) | (1 << CS00);//CTC模式,“高低”占空比,不分频

sei();//使能全局中断


while(1);

}

SIGNAL(SIG_OUTPUT_COMPARE0)//TIMER0 匹配中断服务程序

{

OCR0 = sindata[x];

if( ++x > 127 ) x=0;

}


******************************************************************


*****************************************************************

//定时器1捕捉中断

//CPU:mega32

//编译器:winavr

#include

#include

int main(void)

{

TIMSK |= 1<TCCR1A |= (0<TCCR1B |= (0<sei();//使能全局中断


while(1);

}

SIGNAL(SIG_INPUT_CAPTURE1)//TIMER1 捕捉中断服务程序

{

//……

}

******************************************************************

*****************************************************************

//定时器1溢出中断

//CPU:mega32

//编译器:winavr

#include

#include

int main(void)

{

DDRC |= (1 << 7);//PC7置为输出


TIMSK |= 1<TCCR1A |= (0<TCCR1B |= (0<sei();//使能全局中断


while(1);

}

SIGNAL(SIG_OVERFLOW1)//TIMER1 溢出中断服务程序

{

TCNT1H = 0X99;//先写高位,后写低位

TCNT1L = 0X88;

PORTC ^= 1<<7;//PC7取反

}


******************************************************************

*****************************************************************

//定时器测频率  

//定时器1计数,定时器2定时

//CPU:mega32

//编译器:winavr


#include

#include

#define F 1000000

int main(void)

{

DDRC |= (1 << 7);//PC7置为输出

TIMSK |= 1<OCR2 = 0.1  *F/1024;//定时0.1s

TCCR2 |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (1 << CS01) | (1 << CS00);//CTC模式,1024分频

sei();//使能全局中断

TCCR1A |= (0<TCCR1B |= (0<

while(1);

}

SIGNAL(SIG_OUTPUT_COMPARE2)//TIMER2 匹配中断服务程序

{

PORTC ^= 1<<7;//PC7取反

TCNT1H = 0;

TCNT1L = 0;

}


******************************************************************


*****************************************************************

//定时器测1捕捉中断

//可以测周期用 

//CPU:mega32

//编译器:winavr

#include

#include

int main(void)

{

TIMSK |= 1<TCCR1A |= (0<TCCR1B |= (0<sei();//使能全局中断


while(1);

}

SIGNAL(SIG_INPUT_CAPTURE1)//TIMER1 捕捉中断服务程序

{

TCNT1H = 0;

TCNT1L = 0;


}


******************************************************************

关键字:ATmega32  单片机  定时器 引用地址:ATmega32单片机定时器程序

上一篇:ATmega32单片机最简单的程序—闪烁灯
下一篇:avr单片机mega32基于状态机的按键设计

推荐阅读最新更新时间:2024-11-07 10:42

stm32f407之基本定时器TIM6&TIM7(操作寄存器)
基本定时器TIM6和TIM7包括一个由可编程分频器驱动的16位自动重载计数器。它可以用作普通的定时器,也可以用来驱动DAC。这两个定时器是完全独立的,不共享任何资源。更多时候是与DAC平配合使用。 作为定时器的配置步骤: 1. 设置中断优先级分组(如果之前没有设置),这个最好一个程序里只在开头设置一次。 2. 使能相关时钟。 3. 设置分频。 4. 清空计数器的值。 5. 设置自动重装寄存器的值。 6. 是否允许中断。 7. 如果允许中断,设置中断优先级,使能中断。 8. 使能计数器。 程序: /**************************
[单片机]
基于STM32F100VBT6的32位MCU开发板设计与实现
RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80 年代的MIPS主机(即RISC 机),RISC机中采用的微处理器统称RISC处理器。这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。STM32F100VBT6采用ARM Cortex-M3 32位RISC内核,工作频率24MHz,集成了高速嵌入式存储器(闪存高达128kB、SRAM高达8kB)以及各种增强外设和连接到两条APB总线的I/O。所有器件
[单片机]
基于STM32F100VBT6的32位<font color='red'>MCU</font>开发板设计与实现
51单片机——SPI、DS1302时钟 C语言入门编程
SPI: 写时序: 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302, 数据输入从低位(位0)开始。(先写低位) 读时序: 在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。(先读低位,读取后将IO设置为0,否则读出的数据会出错) DS1302: DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM指示决定采用24或12小
[单片机]
51<font color='red'>单片机</font>——SPI、DS1302时钟 C语言入门编程
德州仪器支持广泛开发商社群的 CC430 MCU 平台
日前,德州仪器 (TI) 宣布推出支持广泛开发商社群、可提供完整可扩展软硬件的 CC430F513x 微处理器 (MCU),进一步推动了单芯片射频 (RF) 解决方案的发展。该 CC430F513x MCU 将业界领先的超低功耗 MSP430™ MCU 与 1GHz 以下的高性能 CC1101 RF 收发器进行了完美结合,并采用 7 毫米 x 7 毫米小型封装,不但可实现高达 20 MIPS 的性能,而且还可支持如集成型 AES 硬件模块等安全选项。此外,TI 还推出 CC430F61xx 系列器件,进一步壮大了其 LCD 产品阵营,其可为开发人员提供能够满足不同设计需求的更多选项。 CC430 MCU 支持多种协议
[单片机]
单片机学习笔记,三个步骤教你学
作为一名电子技术从业人员,你学过单片机吗?你会运用单片机吗?我想你一定学过,但不一定会运用。因为学习单片机比学习其他学科需要付出更多的努力和代价,不仅要学习理论知识还要练习实际操作,而且主要是在实际操作中才能真正学到单片机技术。 因主修专业的不同以及电子基础的深浅不同,对于不同的人可能采用不同的学习方法,根据笔者的亲身学习经验,提出笔者的学习方法和步骤。 基础理论知识学习 基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。 否则,你的单
[单片机]
飞思卡尔推出业界最强大的汽车动力总成系统微控制器
2011年10月12日 - 德国巴登(2011汽车电子系统展览会) – 汽车厂商继续通过新的汽车设计将业界标准提升至新高度,通过交付具有更高燃油经济性和更低排放的汽车满足消费者的期望和政府的法规要求。高性能微控制器(MCU)在环保汽车设计领域扮演着重要角色,飞思卡尔半导体(NYSE:FSL)日前宣布推出强大的多核心汽车MCU系列中的第一款产品,帮助汽车设计者更加轻松地提高引擎效率并降低排放污染。   飞思卡尔新推出的多核心Qorivva 32位MPC5676R MCU在Power Architecture® 技术的基础上构建,与上一代单核心MPC5566 MCU相比,性能提高了四倍、内存空间提高了一倍、并提供了更多功能。MPC56
[电源管理]
基于CW7900的跟踪式集成稳压电源电路图
CW7900是固定负压输出的单片机集成稳压器,其最大输出电流为1.5A。输出电压5~24V。电路具有过流,过热和调整管安全工作区保护电路,如图为 CW7900 构成的跟踪式集成稳压电源电路图:
[单片机]
基于CW7900的跟踪式集成稳压电源电路图
【GD32 MCU 入门教程】GD32 MCU FPU 使用方法
1.Keil 环境下使用 FPU 的方法 GD现有的M4内核MCU 均支持FPU,以下例子以Keil 为环境参考,进行代码修改和设置界面的配置(同理IAR的设置也是类似)。 1.在选项中找到上述的页面,选择使用use single precision。以下使用的是KEIL5的编译器,其他版本的也是类似。 2.使用F3系列,需要加入两条语句 在gd32f3xx.h中加入#define __FPU_PRESENT 1 在system_gd32f30x.c中的SystemInit()中加入 / FPU set ti ngs / //如果库中没有这条语句,就需要加上 #if (__FPU_PRESENT == 1) && (_
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】GD32 <font color='red'>MCU</font> FPU 使用方法
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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