高级会员
 
主题
帖子
积分921
阅读权限30
注册时间2010-1-29
最后登录1970-1-1
在线时间 小时
|

楼主 |
发表于 2014-5-29 13:26
|
显示全部楼层
本帖最后由 mfkyygt 于 2014-5-29 13:27 编辑
//=============================
//项目名称:LED闪两下停一下演示
//主控芯片: T13
//晶振频率: 内部9.6000Mhz
//Design by MFK
//Start 2014-05-29
//Modify 2014-05-29
//=============================
#include <iot13v.h>
#include <AVRdef.h>
volatile unsigned int m,n,j,k;
volatile unsigned char L_on;
//---- 定时器T0初始化 ----
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 10mSec
// actual value: 9.920mSec (0.8%)
void timer0_init(void)
{
CLI(); //关中断
TCCR0B = 0x00; //停止计时
OCR0A = 0x5D;
OCR0B = 0x5D;
TCNT0 = 0xA3; //定时器初值
TCCR0A = 0x00;
TCCR0B = 0x05; //打开定时器
MCUCR = 0x00;
TIMSK0 = 0x02; //设置T0溢出中断
GIMSK = 0x00;
SEI(); //开中断
}
//---- 定时器溢出中断 ----
//定时器T0每隔10ms产生一次中断
//通过计数器判断,每隔500ms闪一次
//设计闪两次,停1秒,循环1分钟
//m:50ms计数器
//n:1秒或2秒计数器
//j:0.5s*120=60s,1分钟计数器
//PB1: 控制LED亮灭
//PB2: 控制振动输出
//------------------------
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0xA3; //重载定时器初值
CLR(PORTB,PB2); //启动振动,低电平有效,可根据实际修改
if (m<20)
{m++;}
else //50ms到
{
m =0;
if (j<120)
{
if (n<2)
{
if (L_on==0) //闪两下,灭一下
{SET(PORTB,PB1);}
else
{COM(PORTB,PB1);}
n++;
}
else
{
if (L_on==0)
{
L_on =1;
}
else
{
L_on =0;
CLR(PORTB,PB1);
}
n =0;
}
j++;
}
//----
else //1分钟到
{
j=0;
COM(PORTB,PB2); //停止振动输出,可根据实际调整
}
}
}
//---- 主程序 ----
void main(void)
{
PORTB =0xFF; //PB初始端口置高
DDRB =0xFF; //PB端口设为输出
m =0;
n =0;
j =0;
L_on =0;
timer0_init(); //定时器初始化
while (1) //等待中断
{;}
}
|
|