㈠ 單片機Io口檢測到高電平最短時間是多少
正常情況是5us。
51單片機檢測輸入的高電平方法:引腳設置為輸入狀態,輸出一個1就行。這是單片機的設計者、生產廠家所規定的。在這個前提下,外界,只有輸入低電平,才會改變引腳的狀態;輸入高電平,是沒有反應的。如果,外設一定要送來高電平,那就必須加上一個反相器,再連接到單片機的引腳即可。切忌要將單片機的檢測埠設置為輸入,否則可能影響被檢測模塊埠的電壓(如:被拉低電平至0v,或被拉高),注意單片機一般是TTL電平模式的,因此高電平的最低應該是2V,低電平的最高是0.8V。
還需注意:
1、51單片機的IO口檢測高低電平是需要首先讓該埠置為1的。此時這個引腳才被設置為輸入。
2、如果是avr單片機,可以通過設置DDRx的值來設置輸入輸出。
3、切忌要將單片機的檢測埠設置為輸入,否則可能影響被檢測模塊埠的電壓(如:被拉低電平至0v,或被拉高)
4、注意單片機一般是TTL電平模式的,因此高電平的最低應該是2V,低電平的最高應該是0.8V。
㈡ 單片機IO口輸入電平問題
第一點,按鍵不要和數碼管使用同一個I/O腳,互相影響。按鍵要單獨用一個I/O腳。
第二點,非要這么做(因I/O腳不夠用),關鍵問題是那個按鍵接在什麼位置了,如下圖的接法才行。如果是接在LED和電阻之間了就是你這種結果。
第三點,把那個電阻的阻值加大為300~500毆。
㈢ 51單片機引腳檢測高電平輸入的問題
在網上看到這樣的一句話 「51單片機的I/O 口檢測高低電平是需要首先讓該埠置為1的。此時這個引腳才被設置為輸入」,
--正確。
也就是說如果上面的設計可以做到的話,那麼就需要一開始的時候給高電平嗎?
--必須先給埠置一。
--你的電路,是做不到的。
--你的電路,按鍵、不按鍵,送到引腳的信號,都是高電平。
--你的電路,設計的不對,不符合單片機的特點。
--按鍵,另一端,應該接地。
㈣ 怎樣用單片機的IO口檢測市電的高低電平
首先,要知道單片機是多大的晶振,然後指令周器是等於多少個機器周期。個樣才能算出一條指令的執行時間。首先,用C寫的,到底他編譯出來的匯編語句是什麼也要搞清楚。
當掃描用戶程序結束後,可編程邏輯控制器就進入輸出刷新階段。在此期間,CPU按照I/O映象區內對應的狀態和數據刷新所有的輸出鎖存電路,再經輸出電路驅動相應的外設。這時,才是可編程邏輯控制器的真正輸出。
㈤ 51單片機 我要檢查IO外接輸入的電平狀態,
方法:
把引腳設置為輸入狀態,輸出一個1就行。這是單片機的設計者、生產廠家所規定的。
在這個前提下,外界,只有輸入低電平,才會改變引腳的狀態;輸入高電平,是沒有反應的。如果,外設一定要送來高電平,那就必須加上一個反相器,再連接到單片機的引腳即可。
其中的 P0口 為匯流排式設計 電路形式 為 集電極開路 也就是說它的內部開關只能將 P0的IO連接到GND上 而不能連接到 VCC上 當向P0 寫「0」時 IO口將連接到 GND 而向P0寫「1」時 IO將變成高阻狀態 也就是相當於斷開 什麼都沒連接 *此時若需要輸出 則必須增加外部上拉電阻 來實現高電平的 *此時若需要實現輸入(IO讀取) 則直接讀取P0即可得到外部輸入的電平狀態。
至於 P1 2 3 其內部有上拉電阻 但一般情況下 都要在外部也配上上拉電阻 以實現穩定的 高電平輸出。
綜上所述 實際上 默認狀態輸出高 可以認為是輸出狀態 但P0是由外部上拉電阻實現的 「輸出」 p123 是由內部上拉 和外部上拉同時實現的輸出 也就是說 P123 內部來看是真正的輸出 而P0內部的狀態是高阻。
至於為何要高阻 是因為 P0 用於匯流排的數據交換 高阻結構 是匯流排埠必須的一種狀態。
㈥ 單片機IO口高低電平輸入
高
看單片機的DATASHEET 裡面有一個表,有列出來上電後,各個IO,寄存器的初始狀態,一般IO都是輸入的高阻態,就是相對於輸入來說,是個很大的電阻,
一般用單片機,單片機上電後,要馬上初始化單片機的所有的IO,中斷,計數器,寄存器,WATCHDOG,等等,,
㈦ 51單片機I/O口作為輸入時初始被置為1,這樣怎麼檢測輸入高電平
因為IO口作為輸入時初始被置1, 這樣就可以被外部器件拉低, 檢測IO口的電平高低就可以知道有沒有被外部器件拉低了
如果IO口置0的話, 那麼外部器件無論是高電平還是低電平, IO口都是0, 就沒法檢測了
㈧ 能否使用51單片機檢測I/O口上是否有高電平輸入,如果有就執行中斷,這樣應該怎樣寫程序啊
程序1;檢測io腳電平
如果有 進入程序2
如果沒有 進入程序3
就這樣寫就行了
㈨ 用單片機怎麼測輸入相應IO口的電平呀輸入電壓直接接在IO口上嗎對輸入的這個電壓有什麼要求啊
可以直接接(如果串一個100歐到1k的電阻更好),一般需要把埠電平設置為高就可以了。(建議對應埠接10K的上拉電阻)
㈩ 如何給單片機IO口輸入高電平
if(countsingle=1) //錯
if(countsingle==1) //應該是「雙等號」。
後面還有一個錯的地方。
----------------------------------
試試下面這個:
main()
{
while(1) {
if(countsingle == 1) { //當計數輸入為高電平時
relay1 = 1; //產生信號讓繼電器1吸合
relay3 = 1; //產生信號讓繼電器3吸合
relay4 = 1; //產生信號讓繼電器4吸合
delay(5000);
}
if(passsingle == 1) { //High Voltage pass信號為高電平時
relay2 = 1; //產生信號讓繼電器2吸合
relay3 = 0; //產生信號讓繼電器3釋放
relay4 = 0; //產生信號讓繼電器4釋放
delay(5000);
testsingle = 1; //產生信號讓外部繼電器導通再次給出測試信號
}
}
}