<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 利用單片機定時(shí)中斷實(shí)現軟定時(shí)器

利用單片機定時(shí)中斷實(shí)現軟定時(shí)器

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò ) 收藏
以下是代碼實(shí)現已經(jīng)測試并用到項目上課放心使用
Author : 吾本杞人
#include "reg52.h"
#include "Intrins.h"
#include "TypeDef.h"
#include "CPUPin_Def.h"
#include "VarDef.h"
#define TIME_BASE_2MS 2
#define TIME_BASE_500MS 250
#define TIME_BASE_10MS 5
#define F_OSC 110592 //定義這個(gè)是默認按照11.0592MHZ的晶振算的TH0 TL0的值 方式1 16位定時(shí)器
//注意這種寫(xiě)法只能晶振翻倍的時(shí)候改這個(gè)宏才有用,
//因為51單片機硬件不支持浮點(diǎn)運算 12/11.0592 = 1 向下取整了 跟11.0592的晶振值是一樣的
// 如果支持浮點(diǎn)運算會(huì )有芯片內部專(zhuān)門(mén)的的硬件浮點(diǎn)運算指令 這種寫(xiě)法也不行 必須強轉類(lèi)型
//如 ( double)12/(double)11.0592 要把類(lèi)型強轉成浮點(diǎn)數才行。
//目前有 硬件支持浮點(diǎn) 有軟件浮點(diǎn) 就是說(shuō)軟件也可以實(shí)現浮點(diǎn)數運算。比如編譯器看到特殊的代碼會(huì )把轉到
//一個(gè)特殊的函數去處理。 51 STM32 單片機目前好像都不支持硬件浮點(diǎn)數
void Timer0() interrupt 1 using 1
{
//采用靜態(tài)變量這里只會(huì )執行一次,不管多少次中斷因為是靜態(tài)變量
//但不能寫(xiě)成
//如果實(shí)際換成了是12MHZ晶振 就改成 F_OSC / 120000 因為T(mén)H0 TL0 是按照11.0592算的值
static uchar TimeBase2ms = TIME_BASE_2MS * (F_OSC / 110592);
//如果11.0592的晶振 就1 如果是12.00MHZ 那這個(gè)值算出來(lái)說(shuō)就是1.085xxxx 晶振跑的快了這個(gè)值要大點(diǎn)
//就是直接改F_OSC 這個(gè)宏就行了。不用改其他的
static uchar idata TimeBase500ms = TIME_BASE_500MS * (F_OSC / 110592);
static uchar TimeBase10ms = TIME_BASE_10MS *(F_OSC / 110592);
static unsigned char CountSignalDelay = 0;
//以上只會(huì )執行一次 static 定義聲明初始化
uchar i;
TH0=0xfc ; // 總定時(shí)1000微秒, 進(jìn)入中斷需要12個(gè)周期, 所以實(shí)際定時(shí)1000 - 12 * 12 / F
TL0=0x72 ;
//這里 用工具算出來(lái)應該是FC 66 FC72-FC66 = 12
//讓裝載的數字少用12個(gè)周期 進(jìn)入中斷因為進(jìn)入中斷需要12周期加上去正好1ms
_push_( SCONF ) ;
if( --TimeBase2ms == 0 ){
TimeBase2ms = TIME_BASE_2MS * (F_OSC / 110592);
//0--3 是2毫秒為時(shí)基的定時(shí)器
for( i = 0; i < 4; i++ )
{
if( TimerNo[ i ] != 0 ){
if( --( TimerNo[ i ] ) == 0 ){//時(shí)間到
fTimer |= 0x01 << i; //置為時(shí)間到
}
}
}
if( --TimeBase10ms == 0 )
{
TimeBase10ms = TIME_BASE_10MS * ( F_OSC / 110592 );
ScanCopierSignal() ;//10毫秒掉一次函數
}
if( --TimeBase500ms == 0 )
{
TimeBase500ms = TIME_BASE_500MS * ( F_OSC / 110592 );
//處理以500ms為時(shí)基的定時(shí)器
for( i = 4; i < 8; i++ )
{
if( TimerNo[ i ] != 0 ){
if( -- ( TimerNo[ i ] ) == 0 ) {
fTimer |= 0x01 << i;
}
}
_pop_(SCONF);
}


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>