STC系列单片机软件延时,ms级较精确
生活随笔
收集整理的這篇文章主要介紹了
STC系列单片机软件延时,ms级较精确
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include <reg51.H>#define STC_Y1 97560U // 89C/LEXX、90C/LEXX
#define STC_Y3 14050U // 10F/Lxx、11F/Lxx 、12C/LExx、15F104E/L104E(A版)、15F204E/L204EA(A版)
#define STC_Y5 13043U // 15F/L/Wxx(Y3內(nèi)核個別型號除外)#define Fosc 12000000UL // 此處修改為實際所用晶振的頻率(Hz)
#define Core STC_Y5 // 此處修改為對應的芯片內(nèi)核版本/*** 功能:延時t毫秒* 入?yún)?#xff1a;1~65535*/
void delay_ms(unsigned int t)
{unsigned int i;do{i = Fosc / Core;while(--i);}while(--t);
}void main()
{delay_ms(1);
}
取個最大值看看延時誤差就行了,t = 65000 ,誤差才幾十us,較一般的延時準確度已經(jīng)很高了。
至于最開始的宏定義,看似magic number,其實就是debug得到匯編代碼,得到調(diào)用函數(shù)到返回函數(shù)執(zhí)行的所有指令,然后根據(jù)各個內(nèi)核的指令速度稍作修改就可以了。這幾個數(shù)可以在一定范圍內(nèi)修改,因為
Fosc/Core是個浮點數(shù),最后做了一下取整,好在這一套操作是在編譯時期就解決了,對性能沒有影響。
發(fā)文的時候STC已經(jīng)出了Y6內(nèi)核(STC8)。不過手上沒有STC的新片,之后的坑就留給大家自己填了。手頭這些STC15系列的還沒怎么玩。況且還有一堆mega8/16 另外有幾片msp430,stm8/32,下一步打算玩玩這些。
總結(jié)
以上是生活随笔為你收集整理的STC系列单片机软件延时,ms级较精确的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAD教程:CAD软件中如何拆分表格?
- 下一篇: 橙色简约大气岗位竞聘个人简历PPT模板