久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4400|回復: 17
收起左側

STC15單片機的IO口疑問?

[復制鏈接]
ID:847776 發表于 2021-7-6 15:27 | 顯示全部樓層 |閱讀模式
看STC15單片機的規格書IO口相關介紹,STC15的P1口都可以配置成ADC口,也可以配置成普通IO口,配置ADC用P1ASF寄存器來配置;如圖1;
配置成普通IO口時有4種工作模式,用P1M1和P1M0寄存器來配置,如圖2;

P1口作為普通IO口

P1口作為普通IO口

想問下:
①  作為普通IO口時,如果我想要檢測外部輸入的高電平,我應該配置成哪種模式?是高阻輸入模式嗎?還是說必須電路上加反相器才能實現?

② 如果我要配置P1口的P1.1/P1.2/P1.3為ADC口,應該有如下一段代碼:


#define P11ASF 0x02       //ADC通道P1.1口
#define P12ASF 0x04       //ADC通道P1.2口

#define P13ASF 0x08       //ADC通道P1.2口
P1ASF = P1ASF|P11ASF|P12ASF|P13ASF;   //設置P1.1、P1.2、P1.3口為AD轉換口

此時我要將P1口的P1.5/P1.6/P1.7配置成高阻輸入,應該有如下一段代碼:
P1M1 = 0xE0;
P1M0 = 0x00;


請問此時P1.1/P1.2/P1.3還是ADC口嗎?

STC15的IO-1.png
回復

使用道具 舉報

ID:716656 發表于 2021-7-6 15:44 | 顯示全部樓層
問題一:設置成高阻模式,可以檢測外部電平變化,程序里寫成以while循環檢測。你說的反相器是對接外部中斷引腳時,當變化成高電平,經反相器是變低,觸發外部中斷。 問題二:我沒接觸過,應該是查一下手冊,引腳當adc用時要設置成什么模式,把P1M1 P1M0的低5位設置對應就好
回復

使用道具 舉報

ID:401564 發表于 2021-7-6 15:47 | 顯示全部樓層
看圖,其它的問題數據手冊里有的 51hei截圖20210706154603.png


回復

使用道具 舉報

ID:272119 發表于 2021-7-6 16:17 | 顯示全部樓層
普通IO不用設置,默認頭文件已經設置好,直接sbit相關IO的名字使用即可。關于第二點我也沒有試過。
回復

使用道具 舉報

ID:847776 發表于 2021-7-7 09:05 | 顯示全部樓層
Y_G_G 發表于 2021-7-6 15:47
看圖,其它的問題數據手冊里有的

關于準雙向口這個模式,我是想檢測外部的高電平輸入,這個模式應該是不行的,內部是弱上拉,本身就是高電平,當外部再輸入一個高電平時,它的狀態是沒有變化的。
回復

使用道具 舉報

ID:847776 發表于 2021-7-7 09:11 | 顯示全部樓層
壓著我頭發啦 發表于 2021-7-6 15:44
問題一:設置成高阻模式,可以檢測外部電平變化,程序里寫成以while循環檢測。你說的反相器是對接外部中斷 ...

“對接外部中斷引腳時,當變化成高電平,經反相器是變低,觸發外部中斷。”
------ 請教下,為何這里要加反相器呢?
回復

使用道具 舉報

ID:716656 發表于 2021-7-7 09:44 | 顯示全部樓層
憶1709 發表于 2021-7-7 09:11
“對接外部中斷引腳時,當變化成高電平,經反相器是變低,觸發外部中斷。”
------ 請教下,為何這里要 ...

51單片機的外部中斷有兩種觸發方式可選:電平觸發和邊沿觸發。選擇電平觸發時,單片機在每個機器周期檢查中斷源口線,檢測到低電平,即置位中斷請求標志,向CPU請求中斷。選擇邊沿觸發方式時,單片機在上一個機器周期檢測到中斷源口線為高電平,下一個機器周期檢測到低電平,即置位中斷標志,請求中斷。    普通51單片機檢測高變低的過程(好像有能檢測低到高的),你要檢測低到高,需要用反相器或三極管,把狀態反一下
回復

使用道具 舉報

ID:847776 發表于 2021-7-7 10:14 | 顯示全部樓層
壓著我頭發啦 發表于 2021-7-7 09:44
51單片機的外部中斷有兩種觸發方式可選:電平觸發和邊沿觸發。選擇電平觸發時,單片機在每個機器周期檢查 ...

明白了,謝謝。
回復

使用道具 舉報

ID:401564 發表于 2021-7-7 16:32 | 顯示全部樓層
憶1709 發表于 2021-7-7 09:05
關于準雙向口這個模式,我是想檢測外部的高電平輸入,這個模式應該是不行的,內部是弱上拉,本身就是高電 ...

它怎么就不行了呢?
外部是高平,它本身就是高平,讀取到的就是高電平
外部是低電平,它讀取到的就是低電平
這模式從8051出生到現在,一直都是這么用的
回復

使用道具 舉報

ID:689247 發表于 2021-7-7 16:50 | 顯示全部樓層
Y_G_G 發表于 2021-7-6 15:47
看圖,其它的問題數據手冊里有的

通俗易懂,一下就明白了
回復

使用道具 舉報

ID:934353 發表于 2021-7-7 16:58 | 顯示全部樓層
憶1709 發表于 2021-7-7 09:05
關于準雙向口這個模式,我是想檢測外部的高電平輸入,這個模式應該是不行的,內部是弱上拉,本身就是高電 ...

可以的,普通io口本來就可以檢測外部的電平變化的
回復

使用道具 舉報

ID:689247 發表于 2021-7-7 17:02 | 顯示全部樓層
第一個問題:你檢測的高電平是一直接入到電路里面的么?你的意思是不是,一旦不接入電路,檢測仍然是高電平,就無法判斷高電平石否接入電路?
如果一直接入電路,就像大佬說的,I/O不是低電平就是高電平。
如果不是:懸空狀態也是高電平,就無法判斷了
這樣用adc檢測高于多少判定高點就ok。
回復

使用道具 舉報

ID:847776 發表于 2021-7-9 09:48 | 顯示全部樓層
Y_G_G 發表于 2021-7-7 16:32
它怎么就不行了呢?
外部是高平,它本身就是高平,讀取到的就是高電平
外部是低電平,它讀取到的就是低電平 ...

可能是我描述不準確,造成理解上的偏差;
我的意思是“要檢測外部器件輸入的一個高電平信號變化”,附一張圖幫助理解,如圖所示,這個“外部電路”常態時它既不拉高也不拉低,也就是高阻或浮空狀態,當這個外部電路滿足某個條件后,會輸出高電平信號,此時我需要單片機能判斷到這個高電平信號。所以配置成準雙向口時當然是不行的。如果配置成了準雙向口,針對這種情況,只能通過外部反相電路來實現。
8051 IO.png
回復

使用道具 舉報

ID:401564 發表于 2021-7-9 15:47 | 顯示全部樓層
憶1709 發表于 2021-7-9 09:48
可能是我描述不準確,造成理解上的偏差;
我的意思是“要檢測外部器件輸入的一個高電平信號變化”,附一 ...

我知道你的意思,你是想說:A端口我不輸出,對外不輸出低電平,也不輸出高電平,我只管讀取外部的電平狀態而已
但你要知道,為什么會有上拉和下拉,還有強上拉和強下拉,邏輯電路的邏輯是嚴謹的,它一定是要有個確定的電平狀態的,
如果單片機是高阻,那么外部B端口就會有上拉或者下拉
如果外部是不確定的,單片機A端口就會有上拉或者下拉
浮空是不可能浮空的,這輩子都不可能浮空的,單片機關斷一個浮空的外部引腳,所讀取到的數據是不穩定的
如果你想A端口只管讀取B端口的電平,但又不對外輸出高電平,那么,B端口就要有輸出的能力,設定成傳統端口的時候,下拉的任務由B端口來完成
回復

使用道具 舉報

ID:847776 發表于 2021-7-10 21:59 | 顯示全部樓層
Y_G_G 發表于 2021-7-9 15:47
我知道你的意思,你是想說:A端口我不輸出,對外不輸出低電平,也不輸出高電平,我只管讀取外部的電平狀態而已 ...

嗯,浮空狀態確實會引入干擾造成單片機誤判,因此單片機端口必須有一個穩定狀態。
這個問題我重新理一下吧,分以下兩種情況來看。
第一種情況: 單片機端口設定成弱上拉輸出,即上文所述的準雙向口模式:
這種情況下,單片機本身是有一個穩定狀態的,即1;此時外部電路在未輸出時,呈現高阻狀態,如果說我選型的這個外部器件,在觸發工作時,會輸出高電平,這種情況下,單片機端口它是沒有辦法感知到這個變化的,因為兩個1相與還是1,因此必須加反相器,經過反相器輸出0將單片機端口拉低,如此方可。
第二種情況:  單片機設定成高阻模式:此時對于單片機來說,輸入1就是1,輸入0就是0;高電平低電平都沒有問題。但如果我這個外部器件在未輸出時也對外呈現高阻,那么兩端高阻,抗干擾能力就非常弱了,干擾信號很容易給單片機造成誤判。
“如果你想A端口只管讀取B端口的電平,但又不對外輸出高電平,那么,B端口就要有輸出的能力,”
-----如果確實兩端都呈現高阻狀態了,B端口自然是沒有輸出能力的,這個比較常規的做法是在A端口外加一顆對地的大電阻(如100K),可以穩定端口A的狀態。




回復

使用道具 舉報

ID:401564 發表于 2021-7-11 17:34 | 顯示全部樓層
憶1709 發表于 2021-7-10 21:59
嗯,浮空狀態確實會引入干擾造成單片機誤判,因此單片機端口必須有一個穩定狀態。
這個問題我重新理一下 ...

10uA弱上拉是一定可以檢測外部電平變化的!
你分析那么多,還不如直接實際電路測試一下,8051自誕生到現在,幾十年了一直都是這么用,你不知道你的分析原理是從哪里學的
一個IO有10uA的弱上拉,外部是1的時候,它輸出1,它讀取到的就是1,這不對嗎?他得是0才對嗎?
當外部電平是低電平的時候,因為10uA的上拉電流并不大,外部低電平會把這個端口的電平拉低,讀取到的就是0,這有問題嗎?
如果還有問題,把你想要做的電路畫好上傳,或者自己用實際電路寫好程序運行就知道結果了
不要仿真,要實際電路
這本身就是一個很簡單的問題
回復

使用道具 舉報

ID:446775 發表于 2021-7-11 22:43 | 顯示全部樓層
應該是開漏模式吧
回復

使用道具 舉報

ID:847776 發表于 2021-7-12 11:16 | 顯示全部樓層
Y_G_G 發表于 2021-7-11 17:34
10uA弱上拉是一定可以檢測外部電平變化的!
你分析那么多,還不如直接實際電路測試一下,8051自誕生到現在, ...

"一個IO有10uA的弱上拉,外部是1的時候,它輸出1,它讀取到的就是1,這不對嗎?他得是0才對嗎?"
-------是的,我覺得外部必須得是0才行,既然這個問題一直糾結,我再畫一張圖說明下吧,我覺得應該很明了了,當然,繼續討論可以讓我們把這個問題想得更透徹,沒有壞處。
如圖所示,有兩張圖:

圖1是STC15單片機的弱上拉內部結構圖,內部上拉有2路,極弱上拉和弱上拉,極弱上拉是一直打開的,弱上拉當外部輸入非0時,也是一直打開的;
圖2是我自己畫的系統框圖;單片機內部根據拉電流可計算弱上拉電阻約20K左右,我用一個開關加上拉10K模擬外部電路,系統電源3.3V,當K1未閉合時,端口B就是浮空的,由于單片機內部輸入端呈現高阻,因此A點電壓為3.3V,單片機讀取到的電平為1;這是常態,只要外部輸入非0,它就一直是1,軟件隨時查詢讀到的都是1;
此時,外部電路滿足某個條件觸發K1閉合,這個事件發生后,端口B通過10K上拉到3.3V,此時端口A輸入3.3V電壓,此時A點的電壓是多少?當然還是3.3V;
此時對話情景是這樣的:外部電路會對單片機說:“我已經輸出3.3V電壓給你了,請你動起來,把燈點亮”,單片機回懟: “對不起,我讀到的端口電平沒有發生任何變化,我要繼續睡覺”。所以單片機此時是麻木的,你不給它個0,它就是不動。

對于以上分析,我不知道是否還有什么不同的想法?可以結合我給出的這兩張圖來展開討論。這個問題沒有必要仿真的,我覺得原理上要先走通。



圖1.png
圖2.png
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区精品在线 | 亚洲成人精品 | 欧美日韩在线播放 | 色接久久 | 日韩精品一区二区三区在线观看 | 中文字幕在线一区二区三区 | 亚洲一区二区三区在线免费观看 | 亚洲成人午夜电影 | 国产精品免费一区二区 | 自拍视频国产 | 日本精品久久久久久久 | 国产精品区一区二区三区 | 国产一级片免费视频 | 午夜国产| 久久久久九九九女人毛片 | 粉嫩一区二区三区性色av | 粉嫩一区二区三区四区公司1 | 天天曰夜夜 | 精品综合网 | 午夜小电影 | 欧美不卡视频 | 欧美一级二级视频 | 97伊人| 免费福利视频一区二区三区 | 国产精品久久久久久久久久了 | 国产精品美女久久久久久久网站 | 亚洲综合色网站 | 中文字幕在线第一页 | 国产一二三区免费视频 | 四虎影视免费在线 | www.久久| 国产精品爱久久久久久久 | 国产97视频在线观看 | 羞羞视频免费在线观看 | 在线视频亚洲 | 中文字字幕一区二区三区四区五区 | 国产女人精品视频 | 日韩在线观看中文字幕 | 国产成人精品高清久久 | 国产黄色在线 | 成人欧美一区二区三区黑人孕妇 |