亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3452|回復: 5
打印 上一主題 下一主題
收起左側

仿照Arduino的millis構造非阻塞時間輪片的C51單片機程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:137736 發表于 2022-10-31 16:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Arduino的millis函數使用起來很方便。用普中開發板寫的程序,仿照Arduino,實現非阻塞、時間輪片多任務。
/*模仿Arduino的millis構造非阻塞時間輪片程序*/
#include <STC90C5xAD.H>
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
u32 millis = 0;                                 //ms定時計數,長57天
const u16 timeLong1 = 1000;
const u16 timeLong2 = 2000;
u32 previousMillis1 = 0;
u32 previousMillis2 = 0;
u32 previousMillis3 = 0;
void InitTimer0(void);
void main (void)
{
        InitTimer0();
        while(1)
        {
                if (millis - previousMillis1 >= timeLong1)         //現在時間-以前時間
                {
                        previousMillis1 = millis;                                  //現在時間賦值以前時間變量
                        LED1 =~LED1;
                }

                if (millis - previousMillis2 >= timeLong2)
                {
                        previousMillis2 = millis;
                        LED2 =~LED2;
                }
           if (millis - previousMillis3 >= timeLong1)
                {
                        previousMillis3 = millis;
                        LED3 =~LED3;
                }


        }


}

void InitTimer0(void)         //22.1M晶振定時器0的1ms初始化
{
        TMOD = 0x01;
    TH0 = 0x0F8;
    TL0 = 0x0CD;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}


void Timer0Int(void) interrupt 1         //定時器中斷,millis計數加1
{
        TH0 = 0x0F8;
    TL0 = 0x0CD;
        millis++;
        if(millis>0xfffffffa)
        {
         millis = 0;
         previousMillis1 = 0;
         previousMillis2 = 0;
        }

}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:857072 發表于 2022-10-31 21:10 來自觸屏版 | 只看該作者
留個記號
回復

使用道具 舉報

板凳
ID:77589 發表于 2022-11-8 10:47 | 只看該作者
思路,可以有
回復

使用道具 舉報

地板
ID:454811 發表于 2022-11-12 14:01 | 只看該作者
millis>0xfffffffa的時候是不是會有誤差,如果此時的差值不到timeLong1/timeLong2不就要重新計時了嗎
回復

使用道具 舉報

5#
ID:137736 發表于 2022-11-30 10:16 | 只看該作者
dongyt 發表于 2022-11-12 14:01
millis>0xfffffffa的時候是不是會有誤差,如果此時的差值不到timeLong1/timeLong2不就要重新計時了嗎

有誤差,這用于不要精確延時的地方,是用來調度函數運行的。
回復

使用道具 舉報

6#
ID:161164 發表于 2022-11-30 11:25 | 只看該作者
用在8位1T單片機時會有問題
因為8位單片機算Long/int時是分很多步來算
有機會算到一半時進中斷
引致計算錯誤
我的貼子有討論過這問題
http://www.denmoz.com/bbs/dpj-213547-1.html

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表