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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*/
#include ; #include ;
//中断头文件.. typedef unsigned char uint8; typedef unsigned int uint16; io()
//初始化所有 IO 口函数; {
DDRA=0Xff; PORTA=0Xff;
DDRB=0XFF; PORTB=0X00;
一旦定时器溢出,溢出标志位不会自动清零,注意!此 时需要向定时器 0 溢出标志位位 TOV0 写"1",它就会自动清零;TOV0 在 TIFR 寄存器 的末位,溢出位不能位寻址(不能位操作);
完成(finish time) : 2014 年 2 月 28 日 13:50:14 噢 ,,,'主码' 时间了,,,
DDRC=0XFF; PORTC=0X00;
DDRD=0XFF; PORTD=0XFF;
}
mcu() // {
TCNT0=0x6A;//定时器初始值寄存器,设置 初始值 (此寄存器的值自增到 255 再加一就是 0 了);
TCCR0Βιβλιοθήκη Baidu0x02;//定时器 0 分频设置寄存器 定时器 8 分频.
//定时器公式: 256 - (12 兆(机器频率) ÷ 分频) X (溢出 时间) =初始值; } int main(void) {
TIFR|=0X01; //!!!!!!!!!这个很重要,一定要将溢出位置一,它就 会自己清零; } if(j ==9932)//溢出一次用时 100 微妙,变量 j 加一, 加一万次用时 1 秒,逻辑分析仪捕捉到 { //PA 口跳变时间有一点误差,稍作调整,, j=0;
PORTA^=0XFF; }
uint16 i=0,j=0; io(); //初始化所有 io 口; mcu(); //设置定时器分频和初始值; PORTB=0X04; //LED 共阳极使能; while(1) {
if((TIFR&0X01)==1) //如果定时器溢出;
{ j++;
TCNT0=0x6a; //重设初始值,溢出时间是 0.0001 秒;
avr 单片机 8 位定时器 LED 精确 1 秒闪烁 程序
/*
程序名 (program name): 定时器程序 (LED 精确一 秒闪烁)
芯片名(chip name): 艾特梅尔公司 MEGA16A 芯片; 概述: 利用 8 位定时器 0 完成精确定时,其中,定时器 0 溢 出 重设初始值和溢出位清零很重要,
}
}
相关文档
最新文档