?? delay.c
字號:
#ifndef _DELAY_C_
#define _DELAY_C_
#endif
#include <include.h>
//#define ATmega8
#define ATmega64
// 執行11條指令的時間是0.994us,單條指令的時間是0.0904us
// 軟件仿真是0.99us
#ifdef ATmega64
#define DelayUs() asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
#endif
// 執行8條指令的時間是1us,單條指令的時間是0.125us
//#ifdef ATmega8
// #define DelayUs() asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
//#endif
//5 us延時函數 軟件仿真為5.06us
void Delay5us(void)
{
DelayUs();
DelayUs();
DelayUs();
DelayUs();
//DelayUs();
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
//10 us延時函數 軟件仿真為10.04us
void Delay10us(void)
{
DelayUs();
DelayUs();
DelayUs();
DelayUs();
DelayUs();
DelayUs();
DelayUs();
DelayUs();
DelayUs();
//DelayUs();
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
//1ms延時函數 軟件仿真為1.00089ms
void DelayMs(void)
{
unsigned int i = 0;
for (i = 0; i < (unsigned int)(11059*143/1000-2); i++) // (XTAL << 7 + 15) >> 10 - 26
{
;
}
}
////////////////////////////////////////////////////
// 1ms------1.00676ms
// 3ms------3.00944ms
// 5ms------5.01212ms
// 7ms------7.01479ms
// 10ms-----10.01881ms
// 50ms-----50.07234ms
// 100ms----100.13925ms
// 200ms----200.27308ms
// 300ms----300.40690ms
// 400ms----400.54516ms
// 500ms----500.67455ms
void DelayNms(unsigned int n) //N ms延時函數
{
unsigned int i = 0;
for (i = 0; i < n; i++)
{
DelayMs();
}
}
////////////////////////////////////////////////////
// 1s------1.00135353s
// 2s------2.00270191s
void DelayNs(unsigned char n) //N s延時函數
{
unsigned char i = 0;
for(i = 0; i < n; i++)
{
WDR();
DelayNms(1000);
}
}
/*****************************************************************************************
** End Of File
******************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -