STC管腳上電如何輸出低電平

2021-07-08 20:02:05 字數 1647 閱讀 4464

最近在做乙個專案,其中電路板部分功能原理是,stc mcu直接連線uln2003,再驅動uln2003控制繼電器。本來一切正常的,後面在細調的時候發現有乙個問題,就是在電路板上電瞬間或mcu復位瞬間,所有的繼電器都會閉合一下,這個誤動作是很有問題的,必須避免。該現象的原因我很清楚,即stc mcu上電預設所有管腳都會輸出高電平,而我在初始化程式中,將繼電器對應的控制io初始化為低電平,但這之間還是存在一小段時間,管腳輸出的是高電平。

通過參看stc器件的使用手冊,上面提供了一種方法可以使管腳上電輸出低電平,在此一併說下:即在需要上電保持低電平的管腳上,加乙個較小阻值的下拉電阻(如1k/2k/3k)。因為stc mcu上電時,所有的管腳的屬性都會預設恢復為普通gpio,該模式下的弱上拉電阻不足以在接了較小的下拉電阻時,將管腳電平拉高,從而避免了上電時輸出高電平。而在之後的程式初始化中,再設定對應管腳電平,並設定管腳模式為推挽輸出,推挽輸出模式下的電流 可以即便在較小的下拉電阻時,仍將管腳電平拉至高電平。從原理上來說,這樣是沒錯的,但唯一的問題是 這意味著要重新製板。所以我實驗了很多種其它方法,以期在不改動現有硬體電路的前提下,實現mcu的管腳上電輸出低電平。當然,最後我成功了 ;)   在介紹具體的做法之前先介紹兩個事實:

第一、stc mcu或者說51微控制器,在上電時,都會先執行乙個名為startup.a51的檔案裡的匯程式設計序的,在該段匯程式設計序中,mcu會進行最初的初始化,包括一些堆疊引數設定,工作區選定,資料初始化等。而我們平時所寫的程式,是在該段匯程式設計序執行完了之後,才會跳過來的,所以從系統上電到執行初始化應用程式之間是有一定的時間間隔的。

第二,stc mcu的管腳有四種模式:1,準雙向口,傳統8051的i/o模式,灌電流可達20ma,拉電流270ua,即可以接受較大的輸入電流,和輸出較小的電流;2、推挽輸出,具有較大的拉電流,可達20ma,和準雙向口的區別就是具有較大輸出電流;3、高阻輸入,該模式下,管腳既不能輸出電流,也不能接受輸入電流;4,開漏模式,和準雙向口的區別就是不能輸出拉電流,即對外不能輸出高電平。而我解決 mcu上電輸出高電平,就需要設定管腳模式為高阻或開漏。

stc mcu管腳模式以及設定方法

另還要注意的第一點是:該段管腳屬性初始化程式應該載入startup1段中,並且在該匯程式設計序檔案的開頭部分宣告這些暫存器:

eg.p2m1 data   095h

p2m0 data   096h

p4m1 data   0b3h

p4m0 data   0b4h

第二點是,在使用keil建立工程時,應該選擇不使用預設的startup.a51,並從keil的安裝目錄下,找到這個startup.a51(這個相信不難了),把它放到自己的應用程式目錄下,然後新增到keil中,再進行此項修改,如下圖所示:

最後,沒改動任何硬體線路,即實現了mcu上電或復位後,既定管腳輸出低電平,防止控制的后級誤動作。

STC12C5A60S2筆記1(管腳定義)

stc12c5a60s2管腳定義 管腳1 標準io口p1.0 adc0 模數轉換通道0 clkout2 波特率發生器的時鐘輸出 管腳2 標準io口p1.1 adc1 模數轉換通道1 管腳3 標準io口p1.2 adc2 模數轉換通道2 eci pca計數器的外部脈衝輸入 管腳4 標準io口p1.3 ...

FPGA 上 DDR3 管腳如何分配

不論是哪一款 ddr dq 在組內都是可以互換的,因為資料的具體內容只要讀入和讀出一致即可 1 確定占用的 bank 在 pin planer 介面,首先右鍵開啟 show banks,確定好 ddr3 要占用的 banks,使用1.5v供電,記住 bank位置 每組ddr3 只能使用同乙個 col...

STC微控制器上電程式不執行原因及解決辦法

最近使用stc8f2k16s2單片做了乙個小東西,由於是在已有的產品上移植的電路和程式,所以沒有做太多測試,直接打板貼片。板子回來後,外接5v電源上電測試,除錯程式沒有問題,沒有問題,打包發貨。兩天之後,打 打過來問題出來了,系統上電10次能有5 6次,指示燈不亮,按鍵不好使,板子功能失效。經過半天...