<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è) > 嵌入式系統 > 設計應用 > STC11F04單片機定時(shí)器模擬多任務(wù)程序

STC11F04單片機定時(shí)器模擬多任務(wù)程序

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
用STC單片機的定時(shí)器精確定時(shí),做1秒、1分、1小時(shí)的定時(shí)任務(wù)。

由于本人用的是11.0592的晶體,所以時(shí)間上不是很精確。如果對定時(shí)有精確要求的,請用32.768M的晶振。

本文引用地址:http://dyxdggzs.com/article/201611/318661.htm

串口輸出采用 printf函數輸出。

#include"reg51.h"

#include "stdio.h"
#include"intrins.h" //_nop_()

unsigned int tick;

int hh,mm,ss; //時(shí):分:秒
char putchar (unsigned char i)
{
ES = 0; //關(guān)串口中斷
TI = 0; //清零串口發(fā)送完成中斷請求標志
SBUF = i;
while(TI ==0); //等待發(fā)送完成
TI = 0; //清零串口發(fā)送完成中斷請求標志
ES = 1; //允許串口中斷
return SBUF;
}

void Task_1s()
{
printf("S=[%d:%d:%d]rn",hh,mm,ss);
}

void Task_1m()
{
printf("M=[%d:%d:%d]rn",hh,mm,ss);
}

void Task_1h()
{
printf("H=[%d:%d:%d]rn",hh,mm,ss);
}

//0.1ms = 100us
void Timer0(void) interrupt 1 using 1//定時(shí)器0中斷外理
{
TR0=0;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;

tick++; //計數值+1
if(tick>999) //加到10次即1秒
{
tick=0;
ss++;
if(ss>59){
mm++;
ss=0;
if(mm>59){
hh++;
mm=0;
if(hh>11){
hh=0;
}
Task_1h();//1小時(shí)定時(shí)任務(wù)
}
Task_1m(); //1分鐘定時(shí)任務(wù)
}
Task_1s();//1s定時(shí)任務(wù)
}
TR0=1;
}

void main()
{
SCON=0x50;//0101,0000 8位可變波特率,無(wú)奇偶校驗位
TMOD=0X21;
TH1=TL1=-(11059200L/12/32/9600);
TR1=1;
tick=0;
hh=0;
mm=0;
ss=0;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TR0=1;
ET0=1;
ES=1; //允許串口中斷
EA=1; //開(kāi)總中斷
printf("SystemStart...rn");

while(1)
{
_nop_();
}
}

程序運行后結果如圖:


代碼詳解:

(1)串口波特率計算

TH1=TL1=-(11059200L/12/32/9600);

由于采用11.0592晶振,所以這里是11059200L

由于采用9600波特率和計算機通信,所以采用9600

(2)串口輸出為什么可以用“printf"函數?

例如: printf("S=[%d:%d:%d]rn",hh,mm,ss); 可以很方便的輸出要的數據

原因是要自己實(shí)現printf的底層通信代碼,即在你的代碼里加入


這個(gè)函數的原型定義在:#include "stdio.h" 里,感興趣的朋友,還可以把其他函數也實(shí)現。這樣C51編程就可以和計算機上的C語(yǔ)言編程類(lèi)似了。

(3)定時(shí)器初值說(shuō)明:

TH0=(65536-2000)/256; 高8位
TL0=(65536-2000)%256; 低8位

(4) 定時(shí)任務(wù)


任務(wù)的調用在定時(shí)器中斷里,詳細見(jiàn)定時(shí)器中斷。

void Timer0(void) interrupt 1 using 1//定時(shí)器0中斷外理

希望對大家有用!錯誤在所難免,諸位看官自己調試把



評論


技術(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>