PIC微控制器延時問題
阿新 • • 發佈:2019-01-03
#include<p18f45k22.h>
//時間函式的測試 非定時器的使用 軟體模擬 除錯debug的使用
//在watch當中可以新增特殊功能暫存器和變數等
#define uint unsigned int
#define uchar unsigned char
void delayChar(uchar n);//uchar的取值在0~256之間 否則溢位
void delayInt(uint n);//使用時儘量在對時間要求不精確時使用
void main(void){
ANSELA=0;
TRISAbits.RA0=0;
PORTAbits.RA0=1;
delayChar(5);
PORTAbits.RA0=0;
delayInt(1000);
PORTAbits.RA0=0;
}
void delayChar(uchar n){//晶振取4Mhz情況下誤差在0.1ms左右 n的取值在0~255;
uchar i,j;
for(i=n;i>0;i--)
for(j=123;j>0;j--);
}
void delayInt(uint n){//晶振取4Mhz情況下誤差隨數值增大而增大在1ms~7ms之間 值為1000時為1s;
uint i,j;
for(i=n;i>0;i--)
for(j=54;j>0;j--);
//時間函式的測試 非定時器的使用 軟體模擬 除錯debug的使用
//在watch當中可以新增特殊功能暫存器和變數等
#define uint unsigned int
#define uchar unsigned char
void delayChar(uchar n);//uchar的取值在0~256之間 否則溢位
void delayInt(uint n);//使用時儘量在對時間要求不精確時使用
void main(void){
ANSELA=0;
TRISAbits.RA0=0;
PORTAbits.RA0=1;
delayChar(5);
PORTAbits.RA0=0;
delayInt(1000);
PORTAbits.RA0=0;
}
void delayChar(uchar n){//晶振取4Mhz情況下誤差在0.1ms左右 n的取值在0~255;
uchar i,j;
for(i=n;i>0;i--)
for(j=123;j>0;j--);
}
void delayInt(uint n){//晶振取4Mhz情況下誤差隨數值增大而增大在1ms~7ms之間 值為1000時為1s;
uint i,j;
for(i=n;i>0;i--)
for(j=54;j>0;j--);
}
以上程式通過使用mplab中的stopwatch測試得到;語句必須嚴格按照如上所寫,否則延時時間將會改變,想簡化語句,必須重新計算時間;