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

QQ登錄

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

搜索
查看: 2565|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教大家,51單片機(jī)10us中斷一次,能來(lái)得及執(zhí)行其它程序嗎

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:282726 發(fā)表于 2024-3-27 10:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
C51單片機(jī),晶振用12M

void init()     //初始化函數(shù)
{
        TMOD=0X01;  //工作模式選擇
        TH0=(65535-10)/256;   //高位裝載初始值
        TL0=(65535-10)%256;   //低位裝載初始值
        EA=1;                 //開(kāi)總中斷
        ET0=1;                //開(kāi)定時(shí)器0中斷
        TR0=1;                                 //啟動(dòng)定時(shí)器0


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

使用道具 舉報(bào)

沙發(fā)
ID:282726 發(fā)表于 2024-3-27 10:28 | 只看該作者
我做了個(gè)PWM控制LED的亮度,想讓燈慢慢亮下來(lái)
回復(fù)

使用道具 舉報(bào)

板凳
ID:1109793 發(fā)表于 2024-3-27 10:29 | 只看該作者
12M,12T,10US?應(yīng)該干不了啥了吧,主頻提到22M,改為1T,興許還能干點(diǎn)
回復(fù)

使用道具 舉報(bào)

地板
ID:1109793 發(fā)表于 2024-3-27 10:45 | 只看該作者
rebios 發(fā)表于 2024-3-27 10:28
我做了個(gè)PWM控制LED的亮度,想讓燈慢慢亮下來(lái)

硬件PWM還是軟件的?頻率不需要那么高啊
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2024-3-27 11:09 | 只看該作者
PWM占空比0-100,100-200us中斷就行,10us中斷基本玩不轉(zhuǎn)。
回復(fù)

使用道具 舉報(bào)

6#
ID:1110945 發(fā)表于 2024-3-27 12:33 | 只看該作者
那就要看你的程序怎么寫(xiě)了,你想玩PWM放著高級(jí)定時(shí)器不用非要用T0完成
PWM的任務(wù)。T0只能軟件模擬,這樣要花費(fèi)很多的CPU的時(shí)間,而且最窄
脈沖做不到1個(gè)時(shí)鐘。
如果用高級(jí)定時(shí)器來(lái)做那就不同了,10uS就是120個(gè)時(shí)鐘,CPU只需要在“更新”
中斷里寫(xiě)一下下個(gè)周期的脈寬值就好了,120個(gè)時(shí)鐘里面還有大部分的時(shí)間CPU
還可以做其它的任務(wù)。
回復(fù)

使用道具 舉報(bào)

7#
ID:401564 發(fā)表于 2024-3-27 12:43 | 只看該作者
10uS一次中斷,如果中斷執(zhí)行時(shí)間再有個(gè)10uS的話,效率就慢一半了,影響很大的,它不是說(shuō)做不了什么事,而是慢,而且是慢到“一卡一卡”的那種情況
比如你按鍵按一下就開(kāi)燈,10uS中斷可能就是按下按鍵之后,好幾秒才能開(kāi)燈的那種
如果是要用到PWM,可以用片上的PWM
實(shí)在沒(méi)有或者是非得用定時(shí)器不可的話,可以把燈的頻率調(diào)到200HZ,感覺(jué)上有一點(diǎn)點(diǎn)閃頻,但也能接受
定時(shí)器PWM只做10級(jí)的占空比調(diào)節(jié),那就可以了
回復(fù)

使用道具 舉報(bào)

8#
ID:402383 發(fā)表于 2024-3-27 13:46 | 只看該作者
Y_G_G 發(fā)表于 2024-3-27 12:43
10uS一次中斷,如果中斷執(zhí)行時(shí)間再有個(gè)10uS的話,效率就慢一半了,影響很大的,它不是說(shuō)做不了什么事,而是 ...

我最近一次項(xiàng)目也遇到過(guò)這個(gè)情況:電機(jī)驅(qū)動(dòng)芯片建議10K以上的PWM頻率,10KHZ對(duì)應(yīng)是100us的PWM周期,然后在調(diào)試電機(jī)功能時(shí)發(fā)現(xiàn)調(diào)速有卡頓。后面排查問(wèn)題就定位到是主程序跟中斷服務(wù)程序有沖突導(dǎo)致的異常。

當(dāng)初做MCU選型的時(shí)候沒(méi)考慮到這一點(diǎn),所以沒(méi)選帶有PWM功能的型號(hào),嗐。
吃一塹長(zhǎng)一智,下一批次就準(zhǔn)備用STC8H系列來(lái)調(diào)試。
回復(fù)

使用道具 舉報(bào)

9#
ID:1034262 發(fā)表于 2024-3-27 21:59 | 只看該作者
可以執(zhí)行幾個(gè)us的程序。
回復(fù)

使用道具 舉報(bào)

10#
ID:235438 發(fā)表于 2024-3-27 23:08 | 只看該作者
10u的話,完全沒(méi)有問(wèn)題,不過(guò)你要是玩pwm,10u周期,100可調(diào),這1ms了,相當(dāng)于1k的頻率.這種pwm使用有限吧,最好用硬件pwm,現(xiàn)在基本都有,寄存器一設(shè)置,自動(dòng)發(fā)指定頻率,指定占空比,方便的一批
回復(fù)

使用道具 舉報(bào)

11#
ID:1088185 發(fā)表于 2024-3-28 00:04 | 只看該作者
10us 中斷間隔是否可行,取決于你的中斷程序,你不貼中斷程式只貼初始化的代碼是啥意思?
回復(fù)

使用道具 舉報(bào)

12#
ID:420836 發(fā)表于 2024-3-28 06:26 | 只看該作者
這取決于其他任務(wù)是否嚴(yán)重依賴(lài)于時(shí)間。
回復(fù)

使用道具 舉報(bào)

13#
ID:282726 發(fā)表于 2024-3-29 09:58 | 只看該作者
謝謝樓上各位的回復(fù)
采用的是STC15W104,沒(méi)有硬件PWM,用軟件來(lái)模擬,我試了,燈可以慢慢亮下來(lái)或暗下來(lái)

void  Time0() interrupt 1 //中斷函數(shù)
{
        TH0=(65536-10)/256;   //裝載初值
        TL0=(65536-10)%256;   //裝載初值
        num++;                //10us中斷一次 num 加1
        if(num==100)          //判斷num 值  是否等于100 如果等于100 說(shuō)明1ms時(shí)間到 也就相當(dāng)于定時(shí)為1KHZ頻率
        {
                num=0;            //將num值清零
        }
        pwm_print();           //調(diào)用PWM函數(shù)
        pwm_print1();           //調(diào)用PWM函數(shù)
}
回復(fù)

使用道具 舉報(bào)

14#
ID:282726 發(fā)表于 2024-3-29 10:10 | 只看該作者
祥子陳 發(fā)表于 2024-3-27 23:08
10u的話,完全沒(méi)有問(wèn)題,不過(guò)你要是玩pwm,10u周期,100可調(diào),這1ms了,相當(dāng)于1k的頻率.這種pwm使用有限吧,最好用 ...

謝謝
程序就是這樣設(shè)計(jì)的,10us周期,100可調(diào),工作頻率1K,依靠延時(shí)程序,燈能一級(jí)一級(jí)亮下來(lái)。
但是有個(gè)問(wèn)題,LED的亮度是非線性,一開(kāi)始亮度變化特別大,后來(lái)就基本感覺(jué)不出來(lái)了。
回復(fù)

使用道具 舉報(bào)

15#
ID:282726 發(fā)表于 2024-3-29 10:16 | 只看該作者
感謝各位,程序就是拷貝自本壇的。
程序可以正常運(yùn)行,后來(lái)我嫌100級(jí)調(diào)光,檔位還是太少,改成1000級(jí)調(diào)光,芯片用STC15W104,控制BP2838 LED電源。晶體還是12M默認(rèn)。仍能正常工作,程序改成下面這樣。
我現(xiàn)在魚(yú)缸就正在用這個(gè)燈照明,每天從不亮到最亮,將近要一個(gè)小時(shí),模擬自然光。

void  Time0() interrupt 1 //中斷函數(shù)
{
        TH0=(65536-1)/256;   //裝載初值
        TL0=(65536-1)%256;   //裝載初值
        num++;                //1us中斷一次 num 加1
        if(num==1000)          //1KHZ頻率
        {
                num=0;            //將num值清零
        }
        pwm_print();           //調(diào)用PWM函數(shù)
        pwm_print1();           //調(diào)用PWM函數(shù)
}
回復(fù)

使用道具 舉報(bào)

16#
ID:525244 發(fā)表于 2024-3-29 10:36 來(lái)自手機(jī) | 只看該作者
燈慢慢亮下來(lái)?眼睛看?需要那么快的頻率?1毫秒調(diào)一次,眼睛能分辨出來(lái)?你知道變得很快和看出來(lái)變不一樣。能看出來(lái)就行,那么快有啥用?
回復(fù)

使用道具 舉報(bào)

17#
ID:1088185 發(fā)表于 2024-3-29 20:41 | 只看該作者
以你貼出來(lái)的中斷程序,估計(jì)CPU是12T, 加上這種寫(xiě)法10us肯定是不夠的,不用想了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表