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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2636|回復(fù): 5
收起左側(cè)

仿照Arduino的millis構(gòu)造非阻塞時(shí)間輪片的C51單片機(jī)程序

  [復(fù)制鏈接]
ID:137736 發(fā)表于 2022-10-31 16:17 | 顯示全部樓層 |閱讀模式
Arduino的millis函數(shù)使用起來(lái)很方便。用普中開(kāi)發(fā)板寫(xiě)的程序,仿照Arduino,實(shí)現(xiàn)非阻塞、時(shí)間輪片多任務(wù)。
/*模仿Arduino的millis構(gòu)造非阻塞時(shí)間輪片程序*/
#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í)計(jì)數(shù),長(zhǎng)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)在時(shí)間-以前時(shí)間
                {
                        previousMillis1 = millis;                                  //現(xiàn)在時(shí)間賦值以前時(shí)間變量
                        LED1 =~LED1;
                }

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


        }


}

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


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

}

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:857072 發(fā)表于 2022-10-31 21:10 來(lái)自觸屏版 | 顯示全部樓層
留個(gè)記號(hào)
回復(fù)

使用道具 舉報(bào)

ID:77589 發(fā)表于 2022-11-8 10:47 | 顯示全部樓層
思路,可以有
回復(fù)

使用道具 舉報(bào)

ID:454811 發(fā)表于 2022-11-12 14:01 | 顯示全部樓層
millis>0xfffffffa的時(shí)候是不是會(huì)有誤差,如果此時(shí)的差值不到timeLong1/timeLong2不就要重新計(jì)時(shí)了嗎
回復(fù)

使用道具 舉報(bào)

ID:137736 發(fā)表于 2022-11-30 10:16 | 顯示全部樓層
dongyt 發(fā)表于 2022-11-12 14:01
millis>0xfffffffa的時(shí)候是不是會(huì)有誤差,如果此時(shí)的差值不到timeLong1/timeLong2不就要重新計(jì)時(shí)了嗎

有誤差,這用于不要精確延時(shí)的地方,是用來(lái)調(diào)度函數(shù)運(yùn)行的。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-11-30 11:25 | 顯示全部樓層
用在8位1T單片機(jī)時(shí)會(huì)有問(wèn)題
因?yàn)?位單片機(jī)算Long/int時(shí)是分很多步來(lái)算
有機(jī)會(huì)算到一半時(shí)進(jìn)中斷
引致計(jì)算錯(cuò)誤
我的貼子有討論過(guò)這問(wèn)題
http://m.zg4o1577.cn/bbs/dpj-213547-1.html

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线不卡 | 亚洲激情在线视频 | 一级黄色免费 | 黄色片网站在线观看 | 精品乱子伦一区二区三区 | 天天干夜夜欢 | 四虎影院最新网址 | 欧美成人一区二区三区 | 黄色网址 | 欧美精品国产 | 一区二区三区视频 | 91一区二区三区 | 日本少妇一区二区 | 黄色片91 | 久久免费国产 | 日日干视频 | 九九免费视频 | 天天干天天草 | 日本在线视频一区二区 | 99国产精品99久久久久久粉嫩 | 欧美一级色| 久久国产精 | 日本福利在线 | 97精品在线观看 | 日本中文在线观看 | 成人激情视频 | 国产一级片免费看 | 亚洲小说欧美激情另类 | 国产欧美日韩 | 欧洲精品一区 | 亚洲亚洲人成综合网络 | 天天射天天爽 | 亚洲国产欧美日韩在线 | 日韩免费在线 | 精品免费国产 | 中文字幕在线观看网站 | 欧美亚洲在线观看 | 97精品超碰一区二区三区 | 狠狠躁夜夜躁人爽 | av免费资源 | 天美传媒在线观看 |