![]() |
發布時間: 2022-12-6 17:35
正文摘要:如下程序,在STC8H1K17 -TSSOP-20上運行正常,移植到STC8H1K28-LQFP-28上任何按鍵就不能控制端口輸出高低電平了。根據端口設置我也重新定義和配置了。查了規格書也沒有查出來什么問題,特此請教各位大師!望不吝賜教 ... |
yzwzfyz 發表于 2022-12-8 08:55 感謝大師的鼓勵,一定會好好看規格書并學以致用!謝謝! |
你不菜,只是未找到學習的方法。 學單片機,最重要的是讀通CPU手冊。 你想啊,你要做A,如果對A不了解,如果做得精,做得好。 記住永遠的法則:要控制什么,就必須先了解什么!!! 所以,只有讀通手冊,才能精通單片機!! 當你了解了CPU之后,寫程序的目的,措施就明確了,對他人的經典的程序也就能理解了,寫程序也就不難了。 勸君,花個把月,讀通CPU。不會的可以與我討論。我就喜歡讀各式各樣的器件手冊。只要是PCB板上有的東東,手冊都找來讀。 |
Y_G_G 發表于 2022-12-7 17:10 是的,后來我就嘗試著在其它端口去測試看看代碼能不能正常允許然后再去找問題點,結果發現是忘記加定時函數了。謝謝解答! |
yzwzfyz 發表于 2022-12-7 15:31 嗯,還是怪自己學藝不精,太菜了。還沒有搞懂這其中的原理,后來我又仔細的看了一遍原先的STC8H1K17的代碼已經規格書,發現既然把定時函數忘記了。謝謝解答! |
我經常犯這種錯誤:一段代碼運行多次之后,只要結果是符合我的要求了,我就認為我這段代碼沒有問題了 但是,當我把這段代碼用到別的地方了,才發現:我之前的代碼根本是錯誤的,能正常運行可能是誤打誤撞的 你這代碼本就不多,自己用排除法就行 1:把按鍵什么的代碼都不要了,只要幾行代碼,端口初始化,再把一個端口拉高,燒錄看一下,問題就能找到了 如果端口沒有高電平,那么,不是端口配置不正確就是硬件的問題 如果端口一切正常,那就去檢查一下按鍵部分的代碼 |
再讀一讀IO的手冊部分。對照一下,程序是如何處理IO口的。 |
mcuhui 發表于 2022-12-7 11:04 給你寫一個適合STC8系列的長短按程序示例,基本通用于STC所有1T單片機。
|
wulin 發表于 2022-12-7 10:54 我也發現了這個問題,把void去掉就不會有編譯警告。但是還是不能控制高低電平輸出。知道自己幾斤幾兩的水平,但是沒辦法就這點能力,大師見笑啦 |
mcuhui 發表于 2022-12-7 09:08 沙發已經指出錯誤,而且這個錯誤會導致按鍵程序不能正常運行。去掉void關鍵詞試試。 while(1) { key_pos(); } 樓主這段原代碼寫的實在有點...... |
188610329 發表于 2022-12-7 08:59 還請大師賜教,就是菜鳥一個不懂啊。看著HEX文件是有生成的。所以不知道為何會有這個警告,也不知這個警告該如何解決? |
張天師 發表于 2022-12-7 08:52 大師,改過試過呢,P2M0 = 0xb8;這就是P2.0口配置為雙向IO口 |
mcuhui 發表于 2022-12-7 08:08 你理解一下這個警告的意思,想一想,出了這個警告之后,編譯通過沒通過,有區別么? |
P2M0 = 0xb8; //修改P27;P20端口為推挽輸出 把SW--P2.0改為弱上拉準雙向口!!! |
我懷疑沒配置好, 你貼出電路圖,比較相對應的IO管腳上,功能是否一樣? 畢竟一個20PIN ,一個28PIN |
coody_sz 發表于 2022-12-6 21:58 只是有警告但是還是能通過的。 |
while(1) { void key_pos(); } 這樣寫編譯能通過嗎? |