⑴ 51單片機c語言里 _nop_ 函數怎麼用
在單片機c語言中直接調用庫函數即可,具體如下:
#include<intrins.h> // 聲明了void_nop_(void);
_nop_(); // 產生一條NOP指令。
該函數的作用:對於延時很短的,要求在us級的,採用「_nop_」函數,這個函數相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。
⑵ 求寫一段簡單的51單片機C語言代碼
單片機檢測高電平。1、可以用外部中斷,外接激光感測器最好用普通光耦隔離一下,順便改成低電平觸發單片機中斷。然後用位移指令移動跑馬燈,然後計數值加1.
2、可以用循環檢測,也建議用光耦隔離先,在MAIN裡面不斷檢測P00,發現變化後,再次檢測以便確認,確認後同樣位移一下跑馬燈,然後計數加1。
⑶ 51單片機c語言 _nop_()是一個空指令短時間延時的空幾個機器周期
這個_nop_()等效與匯編裡面的,NOP指令,也就是空一個機器周期,如果是傳統51單片機的話,等於空12個時鍾周期【即一個機器周期】,操作方法如下:
1、首先,可以利用keil來進行模擬實驗,觀察軟體所顯示的數值,然後再進行相關的運算,即可得出結果。
⑷ 51單片機 c語言里 _nop_ 函數怎麼用 具體一點 求高手指教
在單片機c語言中直接調用庫函數即可,具體如下:
#include<intrins.h> // 聲明了void_nop_(void);
_nop_(); // 產生一條NOP指令。
該函數的作用:對於延時很短的,要求在us級的,採用「_nop_」函數,這個函數相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。
⑸ 51單片機的c語言程序
請你參考:
#include<reg51.h>
unsignedchari;
voidDelayms(unsignedintx)
{
unsignedchart;
while(x--)
for(t=0;t<120;t++);
}
voidmain()
{
IT1=1;
IE|=0x84;
P2=0xFE;
i=1;
while(1);
}
voidEX1_INT()interrupt2
{
ET0=0;
Delayms(10);
P2=~(1<<i);
i=++i%8;
ET0=1;
}
⑹ 請高手具體解釋一下以下51單片機C語言程序:
void timer() interrupt 1 using 2//定時器0中斷函數,interrupt 1是T0的中斷入口
{
Flag_Delay5ms=0;//將 延時5ms 標志位 置為 0,表示5ms結束
TH0=-5000/256;//為T0高8位賦初值,相當於TH0=(65536-5000)/256;可以推出晶振為12MHz
TL0=-5000%256;//為T0低8位賦初值,同上
}
/*延時5ms函數,主要利用定時器0實現*/
void Delay5ms(void)
{
TR0=1;//T0計時開始
ET0=1;//允許T0中斷
while(Flag_Delay5ms);//若 延時5ms 標志位 為1,即5ms未結束,則繼續等待
ET0=0;//5ms結束,禁止T0中斷
TR0=0;//停止T0計時
Flag_Delay5ms=1;//重新將 延時5ms 標志位 置為 1,為下次延時做准備
}
該程序不合理的地方,在等待、及 禁止 T0中斷時,停止T0計時前,T0依然在計時,換句話說,下次再啟動的初值,已經不是原來設置好的初值了。所以延時誤差依然存在。
⑺ 51單片機C語言編程
假設數碼管接P1,第三個鍵是P3.2。
那麼程序如下:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x40,0x00};
sbit key3=P3^2;
bit flag;
main()
{
uchar i,j,dat;
P2=0xff;
flag=0;
while(1)
{
dat=P2|0x01;
switch(~dat)
{
case 0x02:i=1;break;
case 0x04:i=0;break;
case 0x08:i=2;break;
case 0x10:i=3;break;
case 0x20:i=4;break;
case 0x40:i=5;break;
case 0x80:i=6;break;
default:i=9;break;
}
if(key3==0)
{
while(key3==0);
flag=!flag;
j=i;
}
if(flag)i=10;
else i=j;
P1=table[i];
}
}
⑻ 51單片機C語言
先定義一個unsigned int 型的變數temp,
然後angle[0]乘以10000,結果給temp,
然後將temp分離,逐個給table的元素。
具體實現代碼如下:
unsigned int temp;
temp = (unsigned int)(angle[0]*10000);
table[0] = temp/10000;
table[1] = '.';
table[2] = temp%10000/1000;
table[3] = temp%1000/100;
table[4] = temp%100/10;
table[5] = temp/10;
如果你是用來在1602顯示的話,還有轉換成ASCII碼,在每個數組元素後面+'0'即可。
⑼ c51單片機中,每條c語言需要的時間是多少
應該是指令周期,根據指令的不同,一般一個指令需要1-4個機器周期來完成(比如乘法或除法就需要48個時鍾周期來完成),一般的51單片機都是12分頻,也就是說1個機器周期分為12個時鍾周期。請你好好理解時鍾周期--機器周期--指令周期三者之間的關系。
目前STC有不少型號的單片機有單時鍾周期指令,一個時鍾周期即為一個機器周期,不進行12分頻,就是在1個時鍾周期內可以執行一條指令,但只是部分指令可以單時鍾周期執行,大多指令需要1-6個時鍾周期來完成,相比較而言,已經比普通的12分頻單片機速度快多了。
⑽ 51單片機c語言編程是否用到指令系統
單純的c語言編程時用不到系統指令的,但是c和匯編的混合編程時用的到指令系統的,然後就是你要對系統的存儲有深刻的認識比如塊存儲,存儲結構等之類的,因為c會用到很多內存操作的,這樣可以提高代碼運行質量