历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | ATmega32单片机定时器程序

2019-11-28 来源:51hei

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;


}


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

推荐阅读

史海拾趣

ELNA(依娜)公司的发展小趣事

进入电子领域后,ELNA迅速在电子元件领域取得了突破。公司凭借其在材料科学和制造工艺方面的专长,成功开发出了一系列高性能的电子元件产品。这些产品广泛应用于通信、计算机、消费电子等领域,为ELNA赢得了广泛的客户群。

为了保持技术领先,ELNA不断投入研发资源,加强技术创新。公司积极引进国际先进的生产设备和检测手段,提升产品品质和可靠性。同时,ELNA还加强了与国内外科研机构和高校的合作,共同推动电子元件技术的发展。

Fairchild (ON Semiconductor)公司的发展小趣事

Fairchild Semiconductor在创立之初就致力于半导体技术的研发与创新。公司推出了多种具有革命性意义的半导体产品,如逻辑门、功率MOSFET、模拟集成电路等,这些产品不仅在当时市场上取得了巨大的成功,更为Fairchild在半导体行业中确立了领导地位。

DSP Group Inc公司的发展小趣事

在智能语音领域,DSP Group凭借其深厚的技术积累和创新能力,取得了显著的突破。公司推出了一系列智能语音处理技术和产品,如SmartVoice系列语音处理芯片和算法套件等。这些技术和产品不仅为用户提供了更加自然、智能的语音交互体验,还为智能家居、汽车电子等领域的发展提供了有力支持。

Greenwich Instruments Ltd公司的发展小趣事

随着全球对环境保护和可持续发展的重视,Greenconn Corp积极响应号召,将绿色理念融入产品设计和生产全过程。公司致力于开发环保型连接器产品,采用可回收材料、减少能源消耗和废弃物排放等措施,努力实现生产过程的绿色化。同时,Greenconn Corp还积极参与行业内的绿色标准制定和认证工作,为推动整个电子行业的绿色发展贡献了自己的力量。

Custom Connector Corporation公司的发展小趣事

CCC深知产品质量对于企业生存和发展的重要性。因此,公司始终将质量管理放在首位,建立了严格的质量检测体系和售后服务体系。从原材料采购到产品生产、再到售后服务,CCC都严格按照质量标准进行操作,确保每一件产品都符合客户的要求。这种对质量的执着追求让CCC赢得了客户的信赖和口碑相传。

FUJITSU(富士通)公司的发展小趣事

随着电子行业的不断发展,CCC始终将技术创新作为公司发展的核心驱动力。公司投入大量研发资金,引进先进技术和设备,不断提升产品的性能和品质。同时,CCC还积极与高校、科研机构合作,共同研发具有自主知识产权的新产品。这些创新成果不仅为CCC赢得了市场的认可,也推动了整个电子连接器行业的技术进步。

问答坊 | AI 解惑

ALTERA CPLD器件的配置与下载

一、 配置方式   ALTERA CPLD器件的配置方式主要分为两大类:主动配置方式和被动方式。主动配置方式由CPLD器件引导配置操作过程,它控制着外部存储器和初始化过程;而被动配置方式由外部计算机或控制器控制配置过程。根据数据线的多少又可以将CP ...…

查看全部问答>

原创:吉林大学电子学院考题: 2008-11-26

吉林大学电子学院考题: 2008-11-26 物理学院及材料学院本科生 一. 填空题  (每空一分,共21分) 1.构成静态工作点Q的4个要素是:(        ),(  ),(  ),( ). 2 ...…

查看全部问答>

安规与EMC之相互关联问题

这个东东很值的看看,好久没时间上来,给大家分享这个!希望对你的工作学习有用…

查看全部问答>

KEIL软件初步学习,有例程

这个压缩包里有一篇PDF文档是周立功公司给初学者学习C51时的指导文档,关于KEIL 软件的使用,比较基础,在这个文档中讲了一个关于点亮LED小灯的程序,我把它作了扩展。   点亮LED我用了三种方式,都作了详细的说明,程序可读性比较好。虽 ...…

查看全部问答>

蓝牙视频传输任务外包

希望制作一个模块,一端将摄像头与蓝牙连接,另一端将蓝牙跟arm相连,通过arm将视频进行处理。希望承接这个项目的人曾做过相关项目。项目费用暂定2500吧(可另议)谢谢!…

查看全部问答>

关于信号量的问题

小弟有个测试程序,是用信号量来激活进程的,如下: SEM_ID  binarySem; int semCount; void semGive() {      int count;      for(count=0;count…

查看全部问答>

ADS下如何声明一个空的结构体?

typedef struct{}raw_spinlock_t; 以上是在ADS下头文件中申明一个空结构体. 编译的时候出错: Error : C2491E: \'struct\'has no members 这个程序是从linux下移植过来的. 在linxu下编译并无错误. 请问ADS下如何声明一个空的结构体?…

查看全部问答>

怎样发现SCSI卡的设备名

在用户态想操作SCSI卡,可是SCSI的驱动调用的是Windows的miniport接口,没有发现设备名,在用户态使用CreateFile的话,须知道设备名,怎么才能找到啊?…

查看全部问答>

CE工程文件,代码文件如何利用版本管理器管理

请问大家,在定制CE的时候,工文件如何添加到版本管理器中?BSP的代码又如何添加呢? 这里如何添加指的是添加那些文件。…

查看全部问答>