定时器延时算法设计
2015-08-20 11:19
148 查看
1.江苏宏云JMT系列芯片
注意注释中有部分写的不太对,
2.初始化定时器,产生1mS自加中断
//56M时钟
u16,16位自加最多可以计时1~65536/2计时不会出错
u8,8位自加最多可以计时1~256/2计时不会出错
注意注释中有部分写的不太对,
2.初始化定时器,产生1mS自加中断
//56M时钟
u16,16位自加最多可以计时1~65536/2计时不会出错
/* ;功能:在56M时钟下产生1mS中断 */ voidtimer1Init() { TMOD|=0x10;//16bit定时,不使能GATE门 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; } /* ;功能:timer1中断,1mS计数timer_mS_count自加一次 */ voidISR_timer1DelyCnt()interrupt3 { TR1=0; pinLed1_PA1=~pinLed1_PA1; timer_mS_count++;//1mS中断 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; TR1=1; } /* ;功能:设置需要延时的时间,单位由timer_mS_count自加中断间隔决定,mS ;入参:需要的mS计时数 ;返回值:用于作为函数checkDelay()的入参检测对应的时间是否到达 */ //下面两个函数配合使用达到延时作用 u16setDelay(u16mySet_mS_Timer) { return(timer_mS_count+mySet_mS_Timer-1); } /* ;功能:用来检测是否到达所配置的时间点 ;入参:函数setDelay()设置的mS对应的返回值 ;返回值:0表示时间未到 ;1表示时间到达 */ u8checkDelay(u16mySetTimer)//返回非零表示计时结束 { return(((mySetTimer-timer_mS_count)&0x8000)>>8);//当(t-timer_mS_count)为正则&之后为0,当变为负数后因为是无符号整数,产生无穷大,那么非零 } /* ;功能:组合函数时间精确计时,单线程模式计时 ;入参:计时时长,单位:mS */ voiddelay_ms(u16mydealyTimer)//延时多少mS { u16timerRelCount; timerRelCount=setDelay(mydealyTimer);//设置mS对应的计数值 while(!checkDelay(timerRelCount));//检测计数值一直到时间到达为止 }
u8,8位自加最多可以计时1~256/2计时不会出错
u8mySet_mS_Timer;
/*
;功能:在56M时钟下产生1mS中断
*/
voidtimer1Init()
{
TMOD|=0x10;//16bit定时,不使能GATE门
TL1=0x40;//56M下配置0x2540即1mS
TH1=0x25;
}
/*
;功能:timer1中断,1mS计数timer_mS_count自加一次
*/
voidISR_timer1DelyCnt()interrupt3
{
TR1=0;
pinLed1_PA1=~pinLed1_PA1;
timer_mS_count++;//1mS中断,u8
TL1=0x40;//56M下配置0x2540即1mS
TH1=0x25;
TR1=1;
}
/*
;功能:设置需要延时的时间,单位由timer_mS_count自加中断间隔决定,mS
;入参:需要的mS计时数
;返回值:用于作为函数checkDelay()的入参检测对应的时间是否到达
*/
//下面两个函数配合使用达到延时作用
u8setDelay(u8mySet_mS_Timer)
{
return(timer_mS_count+mySet_mS_Timer-1);
}
/*
;功能:用来检测是否到达所配置的时间点
;入参:函数setDelay()设置的mS对应的返回值
;返回值:0表示时间未到
;1表示时间到达
*/
u8checkDelay(u8mySetTimer)//返回非零表示计时结束
{
return((mySetTimer-timer_mS_count)&0x80);//当(t-timer_mS_count)为正则&之后为0,当变为负数后因为是无符号整数,产生无穷大,那么非零
}
/*
;功能:组合函数时间精确计时,单线程模式计时
;入参:计时时长,单位:mS
*/
voiddelay_ms(u8mydealyTimer)//延时多少mS
{
u16timerRelCount;
timerRelCount=setDelay(mydealyTimer);//设置mS对应的计数值
while(!checkDelay(timerRelCount));//检测计数值一直到时间到达为止
}
相关文章推荐
- PHP isset()与empty()的使用区别详解
- 汉诺塔实现
- 数据结构与算法分析——最大的子序列和问题
- 筛法求素数
- 操作MySQL数据库相关代码
- 利用Arcengine的GP工具实现缓冲区分析功能
- Javascript(一)-11-(JS语句-其他语句)
- Dialog的各种使用方式
- cocos2d-html5
- C-2 方法重载,比较大小
- 操作MySQL数据库相关代码
- Neutron Metering as a Service
- C#操作Active Directory(AD)详解
- 快学Scala习题解答—第四章 映射和元组
- POJ 2352 树状数组(线段树)
- ASP.NET巧妙利用repeater控件和checkBox控件实现批量操作
- volatile关键字的作用
- HTTP协议 (一) HTTP协议详解
- hdu1002(简单大数加法)
- Javascript(一)-10-(JS语句-循环语句)