STC 51モノリシック遅延関数
#define STC_Y1 97560UL // 89C/LEXX、90C/LEXX
#define STC_Y3 14050UL // 10F/Lxx、11F/Lxx 、12C/LExx、15F104E/L104E(A )、15F204E/L204EA(A )
#define STC_Y5 13043UL // 15F/L/Wxx(Y3 )
#define Fosc 12000000UL //
#define Core STC_Y5 //
/**
* : t
* :0~65535
*/
void delay_ms(unsigned int t)
{
unsigned int i;
do{
i = (unsigned int)(Fosc / Core);
while(--i);
}while(--t);
}
最大値を取って遅延誤差を見ればいいのに、t=65000、誤差は数十usで、一般的な遅延精度より高い.
最初のマクロ定義については、magic numberのように見えますが、実はdebugがアセンブリコードを得て、関数を呼び出して関数に戻って実行するすべての命令を得て、各カーネルの命令速度に応じて少し修正すればいいのです.これらの数は一定の範囲で修正することができます.
Fosc/Coreは浮動小数点数で、最後に整理をしましたが、この操作はコンパイルの時期に解決され、性能に影響を与えませんでした.
投稿時にSTCからY 6コアが出ていました.しかし、STCの新しい映画を手にしていないので、これからもないと思います.手元のSTC 15シリーズはまだあまり游んでいません.それにmega 8/16がたくさんあります.また、msp 430、stm 8/32がいくつかあります.次はこれらを遊ぶつもりです.