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

標題: 請教大家,51單片機10us中斷一次,能來得及執行其它程序嗎 [打印本頁]

作者: rebios    時間: 2024-3-27 10:01
標題: 請教大家,51單片機10us中斷一次,能來得及執行其它程序嗎
C51單片機,晶振用12M

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



作者: rebios    時間: 2024-3-27 10:28
我做了個PWM控制LED的亮度,想讓燈慢慢亮下來
作者: xiaobendan001    時間: 2024-3-27 10:29
12M,12T,10US?應該干不了啥了吧,主頻提到22M,改為1T,興許還能干點
作者: xiaobendan001    時間: 2024-3-27 10:45
rebios 發表于 2024-3-27 10:28
我做了個PWM控制LED的亮度,想讓燈慢慢亮下來

硬件PWM還是軟件的?頻率不需要那么高啊
作者: wulin    時間: 2024-3-27 11:09
PWM占空比0-100,100-200us中斷就行,10us中斷基本玩不轉。
作者: 明日之星8    時間: 2024-3-27 12:33
那就要看你的程序怎么寫了,你想玩PWM放著高級定時器不用非要用T0完成
PWM的任務。T0只能軟件模擬,這樣要花費很多的CPU的時間,而且最窄
脈沖做不到1個時鐘。
如果用高級定時器來做那就不同了,10uS就是120個時鐘,CPU只需要在“更新”
中斷里寫一下下個周期的脈寬值就好了,120個時鐘里面還有大部分的時間CPU
還可以做其它的任務。
作者: Y_G_G    時間: 2024-3-27 12:43
10uS一次中斷,如果中斷執行時間再有個10uS的話,效率就慢一半了,影響很大的,它不是說做不了什么事,而是慢,而且是慢到“一卡一卡”的那種情況
比如你按鍵按一下就開燈,10uS中斷可能就是按下按鍵之后,好幾秒才能開燈的那種
如果是要用到PWM,可以用片上的PWM
實在沒有或者是非得用定時器不可的話,可以把燈的頻率調到200HZ,感覺上有一點點閃頻,但也能接受
定時器PWM只做10級的占空比調節,那就可以了
作者: fosu頑童    時間: 2024-3-27 13:46
Y_G_G 發表于 2024-3-27 12:43
10uS一次中斷,如果中斷執行時間再有個10uS的話,效率就慢一半了,影響很大的,它不是說做不了什么事,而是 ...

我最近一次項目也遇到過這個情況:電機驅動芯片建議10K以上的PWM頻率,10KHZ對應是100us的PWM周期,然后在調試電機功能時發現調速有卡頓。后面排查問題就定位到是主程序跟中斷服務程序有沖突導致的異常。

當初做MCU選型的時候沒考慮到這一點,所以沒選帶有PWM功能的型號,嗐。
吃一塹長一智,下一批次就準備用STC8H系列來調試。
作者: coody_sz    時間: 2024-3-27 21:59
可以執行幾個us的程序。
作者: 祥子陳    時間: 2024-3-27 23:08
10u的話,完全沒有問題,不過你要是玩pwm,10u周期,100可調,這1ms了,相當于1k的頻率.這種pwm使用有限吧,最好用硬件pwm,現在基本都有,寄存器一設置,自動發指定頻率,指定占空比,方便的一批
作者: 1600277881    時間: 2024-3-28 00:04
10us 中斷間隔是否可行,取決于你的中斷程序,你不貼中斷程式只貼初始化的代碼是啥意思?

作者: TTQ001    時間: 2024-3-28 06:26
這取決于其他任務是否嚴重依賴于時間。
作者: rebios    時間: 2024-3-29 09:58
謝謝樓上各位的回復
采用的是STC15W104,沒有硬件PWM,用軟件來模擬,我試了,燈可以慢慢亮下來或暗下來

void  Time0() interrupt 1 //中斷函數
{
        TH0=(65536-10)/256;   //裝載初值
        TL0=(65536-10)%256;   //裝載初值
        num++;                //10us中斷一次 num 加1
        if(num==100)          //判斷num 值  是否等于100 如果等于100 說明1ms時間到 也就相當于定時為1KHZ頻率
        {
                num=0;            //將num值清零
        }
        pwm_print();           //調用PWM函數
        pwm_print1();           //調用PWM函數
}
作者: rebios    時間: 2024-3-29 10:10
祥子陳 發表于 2024-3-27 23:08
10u的話,完全沒有問題,不過你要是玩pwm,10u周期,100可調,這1ms了,相當于1k的頻率.這種pwm使用有限吧,最好用 ...

謝謝
程序就是這樣設計的,10us周期,100可調,工作頻率1K,依靠延時程序,燈能一級一級亮下來。
但是有個問題,LED的亮度是非線性,一開始亮度變化特別大,后來就基本感覺不出來了。
作者: rebios    時間: 2024-3-29 10:16
感謝各位,程序就是拷貝自本壇的。
程序可以正常運行,后來我嫌100級調光,檔位還是太少,改成1000級調光,芯片用STC15W104,控制BP2838 LED電源。晶體還是12M默認。仍能正常工作,程序改成下面這樣。
我現在魚缸就正在用這個燈照明,每天從不亮到最亮,將近要一個小時,模擬自然光。

void  Time0() interrupt 1 //中斷函數
{
        TH0=(65536-1)/256;   //裝載初值
        TL0=(65536-1)%256;   //裝載初值
        num++;                //1us中斷一次 num 加1
        if(num==1000)          //1KHZ頻率
        {
                num=0;            //將num值清零
        }
        pwm_print();           //調用PWM函數
        pwm_print1();           //調用PWM函數
}
作者: zgrfox110    時間: 2024-3-29 10:36
燈慢慢亮下來?眼睛看?需要那么快的頻率?1毫秒調一次,眼睛能分辨出來?你知道變得很快和看出來變不一樣。能看出來就行,那么快有啥用?
作者: 1600277881    時間: 2024-3-29 20:41
以你貼出來的中斷程序,估計CPU是12T, 加上這種寫法10us肯定是不夠的,不用想了





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品一区二区三区四区 | 亚洲精品视频在线 | 干干干操操操 | 日本在线综合 | av大全在线| 国产精品日日做人人爱 | 欧美久久国产 | 欧美日韩一区二区三区在线观看 | 精品视频一区二区 | 国产亚洲精品精品国产亚洲综合 | www.久久国产精品 | 国产精品美女久久久久aⅴ国产馆 | 97精品一区二区 | 精品亚洲一区二区三区 | 国产精品久久久亚洲 | 中文字幕在线观看日韩 | 91精品一区二区三区久久久久 | 东方伊人免费在线观看 | 久久久久综合 | 国产成人在线免费 | 久久久精 | 黄网免费| 亚洲毛片在线 | 国产午夜视频 | 国产精品视频入口 | 亚洲日韩中文字幕 | 国产精品一区一区三区 | 中文字幕在线网 | 男女污网站 | 欧美 日韩 国产 成人 在线 | 国产一区二区三区四区五区加勒比 | 台湾a级理论片在线观看 | 亚洲精品久久区二区三区蜜桃臀 | 在线观看国产wwwa级羞羞视频 | 91国产精品| 蜜桃毛片 | 久久久久久久综合 | 国产精品a久久久久 | 色爱区综合 | 欧美一区日韩一区 | 精品久久久久久久人人人人传媒 |