好文档 - 专业文书写作范文服务资料分享网站

avr单片机8位定时器LED精确1秒闪烁程序

天下 分享 时间: 加入收藏 我要投稿 点赞

avr单片机8位定时器LED精确1秒闪烁

程序

/*

程序名 (program name): 定时器程序 (LED精确一秒闪烁)

芯片名(chip name): 艾特梅尔公司 MEGA16A 芯片; 概述:

利用8位定时器0 完成精确定时,其中,定时器0溢出 重设初始值和溢出位清零很重要,

一旦定时器溢出,溢出标志位不会自动清零,注意!此时需要向定时器0溢出标志位位TOV0

写"1",它就会自动清零;TOV0在TIFR寄存器的末位,溢出位不能位寻址(不能位操作);

完成(finish time) : 2014年2月28日13:50:14 噢 ,,,'主码' 时间了,,, */

#include ; #include ;

//中断头文件..

typedef unsigned char uint8; typedef unsigned int uint16; io()

//初始化所有IO口函数; {

DDRA=0Xff; PORTA=0Xff;

DDRB=0XFF; PORTB=0X00;

DDRC=0XFF; PORTC=0X00;

DDRD=0XFF; PORTD=0XFF; }

mcu() // {

TCNT0=0x6A;//定时器初始值寄存器,设置 初始值 (此寄存器的值自增到255再加一就是0了);

TCCR0=0x02;//定时器0分频设置寄存器 定时器8分频.

//定时器公式:

256 - (12兆(机器频率) ÷ 分频) X (溢出时间) =初始值; }

int main(void) {

uint16 i=0,j=0;

io(); //初始化所有io口; mcu(); //设置定时器分频和初始值; PORTB=0X04; //LED共阳极使能; while(1) {

if((TIFR&0X01)==1) //如果定时器溢出;

{

j++;

TCNT0=0x6a;

//重设初始值,溢出时间是0.0001秒;

TIFR|=0X01;

//!!!!!!!!!这个很重要,一定要将溢出位置一,它就会自己清零; }

if(j ==9932)//溢出一次用时100微妙,变量j加一,加一万次用时1秒,逻辑分析仪捕捉到 {

//PA口跳变时间有一点误差,稍作调整,, j=0;

PORTA^=0XFF; } } }

avr单片机8位定时器LED精确1秒闪烁程序

avr单片机8位定时器LED精确1秒闪烁程序/*程序名(programname):定时器程序(LED精确一秒闪烁)芯片名(chipname):艾特梅尔公司MEGA16A芯片;概述:利用8位定时器0完成精确定时,其中,定时
推荐度:
点击下载文档文档为doc格式
6b4h911rui3fmdy9ul8q7b8vd5385a00xzt
领取福利

微信扫码领取福利

微信扫码分享