久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉到指定樓層
樓主
ID:137736 發(fā)表于 2022-10-31 16:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Arduino的millis函數(shù)使用起來很方便。用普中開發(fā)板寫的程序,仿照Arduino,實現(xiàn)非阻塞、時間輪片多任務。
/*模仿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定時計數(shù),長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)         //現(xiàn)在時間-以前時間
                {
                        previousMillis1 = millis;                                  //現(xiàn)在時間賦值以前時間變量
                        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計數(shù)加1
{
        TH0 = 0x0F8;
    TL0 = 0x0CD;
        millis++;
        if(millis>0xfffffffa)
        {
         millis = 0;
         previousMillis1 = 0;
         previousMillis2 = 0;
        }

}

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:857072 發(fā)表于 2022-10-31 21:10 來自手機 | 只看該作者
留個記號
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成都精品91一区二区三 | 欧美一级久久 | 99在线国产 | 欧美午夜精品 | 亚洲欧美中文日韩在线v日本 | 久久久久久久国产精品影院 | 亚洲色图图片 | 亚洲精品一区二区三区 | 欧美久久一区二区三区 | 国产日韩一区二区三区 | 国产成人精品久久二区二区91 | 欧美九九 | 中文成人在线 | 狠狠干av | 久久亚洲一区二区三区四区 | 久久久激情视频 | 中文字幕第5页 | 午夜免费视频 | 中文字幕蜜臀av | 久精品久久| 国产欧美日韩一区二区三区在线观看 | 亚洲人成人一区二区在线观看 | 久久免费高清视频 | 国内自拍偷拍视频 | 国产一级在线 | 午夜影视免费片在线观看 | 久久成人国产 | 欧美日韩中文在线 | 色黄视频在线 | 久久久久黄 | 91大神在线资源观看无广告 | 欧美视频免费在线 | 午夜精品久久久久久久久久久久久 | 成人黄色电影在线观看 | 黄免费看| 粉嫩一区二区三区四区公司1 | 欧美一级三级 | 男女激情网| 大乳boobs巨大吃奶挤奶 | 国产女人与拘做视频免费 | 亚洲电影一区二区三区 |