A. 請按照如下下降沿/上升沿觸發時序圖寫一段c語言程序
電子的課程我幾乎全忘了,我翻了翻書,我當初學51單片機串口通信,用的是匯編。
我當初用C語言寫51單片機代碼的時候,編譯變成機器代碼,但是keil編輯器可以把機器代碼轉成助記符,就是匯編。我看了之後發現一條C語言代碼會翻譯成多條匯編,如果是循環,翻譯成匯編就會更復雜,所以用C語言寫51單片機代碼,代碼運行時間會更長,時間不能自己掌握,因為我不知道翻譯成多少條匯編了。所以51單片機還是要用匯編寫比較好。
我也不知道為什麼你會直接用C語言寫時序圖,我只是覺得用匯編會簡單點。
B. 51單片機中,測兩個上升沿(外部信號)之間的時間差c程序應該則樣寫。
看您的問題好像是硬體已經設計好了,而且待測I/O不是接在塵喚同一個口上而且不是外部中斷口?那就只能用查詢方式了,不斷的查詢口狀態,只要有變化(上升穗罩沿是0變1,反之下降沿)就打開定時器,再次變化關閉定時器,讀數據就行了,這樣應該會有誤差,但是比較小而且固定,看你的需要自己處理。 比如你要查詢P10和P11兩個腳上的上升沿時間差,假設P10先來,且猜兄鬧正常情況下都是低電平。
void main()
{
unsigned int a;
init();//各種初始化,自己寫。P10 P11要SBIT下。
while(!P10);//低電平的時候死循環,變高就說明上升沿來到,接著往下運行
startTimer0();//打開定時器,初始化和子函數自己寫。
while(!P11);//如法炮製
stopTimer0();//停止定時器。
a=getTimer0();//讀數,自己寫。
.......//其他代碼。
}
我就是這么寫寫,給你提供參考,具體我肯定沒試過,而且這程序也不是特別實用。有錯誤自己改一下吧。這東西你要想學好就自己想。
C. 如何寫一個單片機輸入上升沿和下降沿的脈沖輸出信號的c語言程序
這個簡單,從低到高就是上升輸出,重高到低就是下降輸出
#include<reg51.h>
sbit pluse=P1^0;
main()
{
int i;
while(1)
{
pluse=0; //此時為下降輸出
i=100;
while(i--);
pluse=1; //此時為上升輸出
i=100;
while(i--);
}
}
D. 上升沿和下降沿結合c語言怎麼編寫程序呀!隨便舉個例子就可以的!
設置一個變數為標志
比如flag=0
當flag=1的時候就是上升沿了
E. C語言做上升沿怎麼做
這有何難:
int f(int t) { return t>0?1:0; }
就形成一個階梯函數,0時刻開始為1,之前為0;
int p(int t) { return t==0?1:0; }
就形成一個脈沖函數,0時刻為1,其他時刻為0;
F. c語言怎麼編寫單片機的中斷
標准c語言沒有中斷調用機制,但是不同編譯器都有相應的中斷處理方式,可以使用戶實現中斷功能。
解決方案:
1、採取輪詢的方式解決,就是每10毫秒檢查一下是否有鍵盤請求,總的來說,這樣基本上可以解決問題,而且簡單易行,但每10毫秒都要檢查,系統消耗太大。
2、採取中斷的方式:
(1)用高級語言調用中斷來處理問題。中斷是cpu響應一個中斷外圍設備8259A的一個過程,當鍵盤敲擊,cpu保存斷點暫停執行並且跳到相應的中斷處理程序繼續執行,結束後根據斷點再跳回來。通過這種方式可以輕松+愉快地解決這個問題。但是需要用到高級語言調用匯編,根據編譯器的不同而有所差別。
(2)自己模擬中斷。可以另外建立一個線程專門響應鍵盤的敲擊,如果有敲擊則打斷主線程。這樣做實現起來很復雜,而且涉及到不少復雜的關鍵技術,比如信號量之類的東西。
3、強大的vc
vc採取了消息映射的機制來處理外部設備的請求,比如時鍾中斷、鍵盤中斷等等。通過此可以灰常灰常容易的處理外部中斷。
G. 單片機中一個I/O信號的上升沿或下降沿在單片機中C語言怎麼寫,不用中斷
不用中斷只能用查詢了。
你只能寫一個while循環,然後時刻判斷IO電平。
上一次循環是低電平,下次變成高電平了,就可以判斷來了一個上升沿。
注意信號上升時間和你的單片機時鍾周期的關系,也就是說,信號上升沿要小於你查詢兩次所用的時間。如果信號你不能改變,那麼你就需要紀錄多次查詢的結果,這樣能識別比較慢的沿。
H. 單片機C語言怎麼判斷上升沿觸發
用一個外部中斷,把B=B+1寫在中斷處理函數中就行了。
I. 求51單片機的上升沿和下降沿C語言檢測程序列子,埠就是普通IO口。
這里只講原理,不關注速度。實際設計工作中,已經有很多單片機能夠識別io埠上升沿和下降沿中斷,且方式不止一種。
sbit io_inp=P2^1;輸入端
bit old_bit;輸入端電平記憶
unsigned char low_high;上升下降沿標志,0=無變化,1=上升沿,2、下降沿
void io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void main(void)
{
old_bit=io_inp=P2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此應用
}
}