日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

STC單片機學(xué)習(xí)積累

1

51單片機的data,xdata,code

dATa: 固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。

idATa:固定指前面0x00-0xff的256個RAM,其中前128和dATa的128完全相同,只是因為訪問的方式不同。idATa是用類似C中的指針方式訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補充:c中idATa做指針式的訪問效果很好)

xdATa: 外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。

pdATa: 外部擴展RAM的低256個字節(jié),地址出現(xiàn)在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG, 建議少用。但也有他的優(yōu)點,具體用法屬于中級問題,這里不提。

全部回復(fù)(5)
正序查看
倒序查看
dulai1985
LV.10
2
2013-11-01 15:48

const用法詳解                              另外一個解釋

0
回復(fù)
dulai1985
LV.10
3
2013-11-01 17:01
@dulai1985
const用法詳解                另外一個解釋

在單片機學(xué)習(xí)、開發(fā)和應(yīng)用中,IO口的配置對功能的實現(xiàn)起著重要的作用,下面介紹常見的四種配置,而現(xiàn)在很多單片機都兼有這四種配置,可供選擇。

一.準雙向口配置

如下圖,當(dāng)IO輸出為高電平時,其驅(qū)動能力很弱,外部負載很容易將其拉至低電平。當(dāng)IO輸出為低電平時,其驅(qū)動能力很強,可吸收相當(dāng)大的電流。

準雙向口有三個上拉晶體管,一個“極弱上拉”,當(dāng)端鎖存器為邏輯“1”時打開,當(dāng)端口懸空時,“極弱上拉”將端口上拉至高電平。

第二個上拉晶體管為“弱上拉”,當(dāng)端口鎖存器為邏輯“1”且端口本身也為“1”時打開,此上拉提供的電流,使準雙向口輸出為“1”。如果此時端口被外部裝置拉到邏輯“0”時,通過施密特觸發(fā)器,控制“弱上拉”關(guān)閉,而“極弱上拉”維持開狀態(tài),為了把這個端口拉低,外部裝置必須有足夠的灌電流能力,使管腳上的電壓,降到門檻電以下。

第三個上拉晶體管為“強上拉”,當(dāng)端口鎖存器由“0”跳變到“1”時,這個上拉用來加快端口由邏輯“0”到邏輯“1”的轉(zhuǎn)換速度。

準雙向口做為輸入時,通個一個施密特觸如器和一個非門,用以干擾和濾波。

準雙向口用作輸入時,可對地接按鍵,如下圖1,當(dāng)然也可以去掉R1直接接按鍵,當(dāng)按鍵閉合時,端口被拉至低電平,當(dāng)按鍵松開時,端口被內(nèi)部“極弱上拉”晶體管拉至高電平。當(dāng)端口作為輸出時,不應(yīng)對地外接LED如圖形控制,這樣端口的驅(qū)動能力很弱,LED只能發(fā)很微弱的光,如果要驅(qū)動LED,要采用圖3的方法,這樣準雙向口在輸出為低時,可吸收20mA的電流,故能驅(qū)動LED。圖4的方法也可以,不過LED不發(fā)光時,端口要吸收收很大電流。

二.開漏輸出配置

這種配置,關(guān)閉所有上拉晶體管,只驅(qū)動下拉晶體管,下拉與準雙向口下拉配置相同,因此只能輸出低電平(吸收電流),和高阻狀態(tài)。不能輸出高電平(輸也電流)。如果要作為邏輯輸出,必須接上拉電阻到VCC。這種配置也可以通過上圖3和圖4來驅(qū)動LED。

三.推挽輸出配置

這種配置的下拉與準雙向口和開漏配置相同,具有較強的拉電流能力,不同的是,具有持續(xù)的強上拉。因此可以用上圖2的方法來驅(qū)動LED。

四.僅為輸入配置(高阻配置)

這種配置不能輸出電流,也不能有收電流,只能作為輸入數(shù)據(jù)使用。

以上四種配置各有其特點,在使用中應(yīng)根據(jù)其特點靈活運用。

準雙向口的最大特點是既可以作為輸入,也可以作為輸出,不需要通過控制切換。

推挽輸出的特點是,無論輸也高電平還是低電平都有較大的驅(qū)動能力,在輸也高電平時,也能直接點亮LED,這在準雙向口中是不能辦到的。這種配置不宜作為輸入,因為這需要外部設(shè)備有很強的拉電流的能胃。

僅為輸入配置的特點是端口只能作為輸入使用,可以獲得很高的輸入阻抗,在有模擬比較器或ADC的端口中用得較多。

開漏輸出配置與準又向口相似,但內(nèi)部沒有上拉電阻。有很好的電氣兼容性,外部接上拉電阻到3V電源,就能和3V邏輯器件連接。外部接上拉電阻到5V電源,就要以和5V器件連接。

需要說明的是以上四種配置均可以作為輸入,也就是都可以檢測端的邏輯狀態(tài),但其特性不同,不是每種配置都可以直接接按鍵。

0
回復(fù)
dulai1985
LV.10
4
2013-11-05 15:20
@dulai1985
單片機的幾種IO口配置在單片機學(xué)習(xí)、開發(fā)和應(yīng)用中,IO口的配置對功能的實現(xiàn)起著重要的作用,下面介紹常見的四種配置,而現(xiàn)在很多單片機都兼有這四種配置,可供選擇。一.準雙向口配置如下圖,當(dāng)IO輸出為高電平時,其驅(qū)動能力很弱,外部負載很容易將其拉至低電平。當(dāng)IO輸出為低電平時,其驅(qū)動能力很強,可吸收相當(dāng)大的電流。準雙向口有三個上拉晶體管,一個“極弱上拉”,當(dāng)端鎖存器為邏輯“1”時打開,當(dāng)端口懸空時,“極弱上拉”將端口上拉至高電平。第二個上拉晶體管為“弱上拉”,當(dāng)端口鎖存器為邏輯“1”且端口本身也為“1”時打開,此上拉提供的電流,使準雙向口輸出為“1”。如果此時端口被外部裝置拉到邏輯“0”時,通過施密特觸發(fā)器,控制“弱上拉”關(guān)閉,而“極弱上拉”維持開狀態(tài),為了把這個端口拉低,外部裝置必須有足夠的灌電流能力,使管腳上的電壓,降到門檻電以下。第三個上拉晶體管為“強上拉”,當(dāng)端口鎖存器由“0”跳變到“1”時,這個上拉用來加快端口由邏輯“0”到邏輯“1”的轉(zhuǎn)換速度。準雙向口做為輸入時,通個一個施密特觸如器和一個非門,用以干擾和濾波。[圖片]準雙向口用作輸入時,可對地接按鍵,如下圖1,當(dāng)然也可以去掉R1直接接按鍵,當(dāng)按鍵閉合時,端口被拉至低電平,當(dāng)按鍵松開時,端口被內(nèi)部“極弱上拉”晶體管拉至高電平。當(dāng)端口作為輸出時,不應(yīng)對地外接LED如圖形控制,這樣端口的驅(qū)動能力很弱,LED只能發(fā)很微弱的光,如果要驅(qū)動LED,要采用圖3的方法,這樣準雙向口在輸出為低時,可吸收20mA的電流,故能驅(qū)動LED。圖4的方法也可以,不過LED不發(fā)光時,端口要吸收收很大電流。[圖片]二.開漏輸出配置這種配置,關(guān)閉所有上拉晶體管,只驅(qū)動下拉晶體管,下拉與準雙向口下拉配置相同,因此只能輸出低電平(吸收電流),和高阻狀態(tài)。不能輸出高電平(輸也電流)。如果要作為邏輯輸出,必須接上拉電阻到VCC。這種配置也可以通過上圖3和圖4來驅(qū)動LED。[圖片]三.推挽輸出配置這種配置的下拉與準雙向口和開漏配置相同,具有較強的拉電流能力,不同的是,具有持續(xù)的強上拉。因此可以用上圖2的方法來驅(qū)動LED。[圖片]四.僅為輸入配置(高阻配置)這種配置不能輸出電流,也不能有收電流,只能作為輸入數(shù)據(jù)使用。[圖片]以上四種配置各有其特點,在使用中應(yīng)根據(jù)其特點靈活運用。準雙向口的最大特點是既可以作為輸入,也可以作為輸出,不需要通過控制切換。推挽輸出的特點是,無論輸也高電平還是低電平都有較大的驅(qū)動能力,在輸也高電平時,也能直接點亮LED,這在準雙向口中是不能辦到的。這種配置不宜作為輸入,因為這需要外部設(shè)備有很強的拉電流的能胃。僅為輸入配置的特點是端口只能作為輸入使用,可以獲得很高的輸入阻抗,在有模擬比較器或ADC的端口中用得較多。開漏輸出配置與準又向口相似,但內(nèi)部沒有上拉電阻。有很好的電氣兼容性,外部接上拉電阻到3V電源,就能和3V邏輯器件連接。外部接上拉電阻到5V電源,就要以和5V器件連接。需要說明的是以上四種配置均可以作為輸入,也就是都可以檢測端的邏輯狀態(tài),但其特性不同,不是每種配置都可以直接接按鍵。
單片機IO口的使用對所有單片機玩家來說都是“家常便飯”,但是你真的了解IO口嗎?你真的能按你的需要配置IO口嗎?

    一、準雙向口輸出

        準雙向口輸出類型可用作輸出和輸入功能而不需重新配置口線輸出狀態(tài)。這是因為當(dāng)口線輸出為1時驅(qū)動能力很弱,允許外部裝置將其拉低。當(dāng)引腳輸出為低時,它的驅(qū)動能力很強,可吸收相當(dāng)大的電流。(準雙向口有3個上拉晶體管適應(yīng)不同的需要)

      準雙向口讀外部狀態(tài)前,要先鎖存為 ‘1’,才可讀到外部正確的狀態(tài).

   二、強推挽輸出

         推挽輸出配置的下拉結(jié)構(gòu)與開漏輸出以及準雙向口的下拉結(jié)構(gòu)相同,但當(dāng)鎖存器為1時提供持續(xù)的強上拉。推挽模式一般用于需要更大驅(qū)動電流的情況。

  三、僅為輸入(高阻)

     輸入口帶有一個施密特觸發(fā)輸入以及一個干擾抑制電路。

  四、開漏輸出配置(若外加上拉電阻,也可讀)

   當(dāng)口線鎖存器為0時,開漏輸出關(guān)閉所有上拉晶體管。當(dāng)作為一個邏輯輸出時,這種配置方式必須有外部上拉,一般通過電阻外接到Vcc。如果外部有上拉電阻,開漏的I/O口還可讀外部狀態(tài),即此時被配置為開漏模式的I/O口還可作為輸入I/O口。這種方式的下拉與準雙向口相同。

   開漏端口帶有一個施密特觸發(fā)輸入以及一個干擾抑制電路。

關(guān)于I/O口應(yīng)用注意事項:

     1.有些是I/O口由低變高讀外部狀態(tài)時,讀不對,實際沒有損壞,軟件處理一下即可。       因為1T的8051單片機速度太快了,軟件執(zhí)行由低變高指令后立即讀外部狀態(tài),此時由于實際輸出還沒有變高,就有可能讀不對,正確的方法是在軟件設(shè)置由低變高后加1到2個空操作指令延時,再讀就對了.

    有些實際沒有損壞,加上拉電阻就OK了有些是外圍接的是NPN三極管,沒有加上拉電阻,其實基極串多大電阻,I/O口就應(yīng)該上拉多大的電阻,或者將該I/O口設(shè)置為強推挽輸出.

  2.驅(qū)動LED發(fā)光二極管沒有加限流電阻,建議加1K以上的限流電阻,至少也要加470歐姆以上

     做行列矩陣按鍵掃描電路時,實際工作時沒有加限流電阻,實際工作時可能出現(xiàn)2個I/O口均輸出為低,并且在按鍵按下時,短接在一起,我們知道一個CMOS電路的2個輸出腳不應(yīng)該直接短接在一起,按鍵掃描電路中,此時一個口為了讀另外一個口的狀態(tài),必須先置高才能讀另外一個口的狀態(tài),而8051單?片機的弱上拉口在由0變?yōu)?時,會有2時鐘的強推挽高輸出電流輸出到另外一個輸出為低的I/O口,就有可能造成I/O口損壞.建議在其中的一側(cè)加1K限流電阻,或者在軟件處理上,不要出現(xiàn)按鍵兩端的I/O口同時為低.

一種典型三極管控制電路:

如果用弱上拉控制,建議加上拉電阻R1(3.3K~10K),如果不加上拉電阻R1(3.3K~10K),建議R2的值在15K以上,或用強推挽輸出。
 
典型發(fā)光二極管控制電路:
       推挽/強上拉口,用拉電流驅(qū)動發(fā)光二極管
    弱上拉/準雙向口,用灌電流驅(qū)動發(fā)光二極管限流電阻盡量大于1K,最小不要小于470Ω
 
混合電壓供電系統(tǒng)3V/5V器件I/O口互連
 
          5V單片機連接3.3V器件時,為防止3.3V器件承受不了5V,可將相應(yīng)的5V單片機I/O口先串一個330Ω的限流電阻到3.3V器件I/O口,程序初始化時將5V器件的I/O口設(shè)置成開漏配置,斷開內(nèi)部上拉電阻,相應(yīng)的3.3V器件I/O口外部加10K上拉電阻到3.3V器件的Vcc,這樣高電平是3.3V,低電平是0V,輸入輸出一切正常。
 
 
 
         3V單片機連接5V器件時,為防3V器件承受不了5V,如果相應(yīng)的I/O口是輸入,可在該I/O口上串接一個隔離二極管,隔離高壓部分。外部信號電壓高于單片機工作電壓時截止,I/O口因內(nèi)部上拉到高電平,所以讀I/O口狀態(tài)是高電平;外部信號電壓為低時導(dǎo)通,I/O口被鉗位在0.7V,小于0.8V時單片機讀I/O口狀態(tài)是低電平。
 
 
 3V單片機連接5V器件時,為防止3V器件承受不了5V,如果相應(yīng)的I/O口是輸出,可用一個NPN三極管隔離
 
 
 
如何讓I/O口上電復(fù)位時為低電平
   普通8051單片機上電復(fù)位時普通I/O口為弱上拉高電平輸出,而很多實際應(yīng)用要求上電時某些I/O口為低電平輸出,否則所控制的系統(tǒng)(如馬達)就會誤動作,現(xiàn)STC12系列單片機由于既有弱上拉輸出又有強推挽輸出,就可以很輕松的解決此問題。
   現(xiàn)可在STC12系列單片機I/O口上加一個下拉電阻(1K/2K/3K),這樣上電復(fù)位時,雖然單片機內(nèi)部I/O口是弱上拉/高電平輸出,但由于內(nèi)部上拉能力有限,而外部下拉電阻又較小,無法將其拉高,所以該I/O口上電復(fù)位時外部為低電平。如果要將此I/O口驅(qū)動為高電平,可將此I/O口設(shè)置為強推挽輸出,而強推挽輸出時,I/O口驅(qū)動電流可達20mA,故肯定可以將該口驅(qū)動為高電平輸出。
 
PWM輸出時I/O口的狀態(tài)(針對STC系列)
0
回復(fù)
dulai1985
LV.10
5
2013-11-21 10:08
@dulai1985
單片機IO口的使用對所有單片機玩家來說都是“家常便飯”,但是你真的了解IO口嗎?你真的能按你的需要配置IO口嗎?    一、準雙向口輸出        準雙向口輸出類型可用作輸出和輸入功能而不需重新配置口線輸出狀態(tài)。這是因為當(dāng)口線輸出為1時驅(qū)動能力很弱,允許外部裝置將其拉低。當(dāng)引腳輸出為低時,它的驅(qū)動能力很強,可吸收相當(dāng)大的電流。(準雙向口有3個上拉晶體管適應(yīng)不同的需要)      準雙向口讀外部狀態(tài)前,要先鎖存為‘1’,才可讀到外部正確的狀態(tài).   二、強推挽輸出         推挽輸出配置的下拉結(jié)構(gòu)與開漏輸出以及準雙向口的下拉結(jié)構(gòu)相同,但當(dāng)鎖存器為1時提供持續(xù)的強上拉。推挽模式一般用于需要更大驅(qū)動電流的情況。  三、僅為輸入(高阻)     輸入口帶有一個施密特觸發(fā)輸入以及一個干擾抑制電路。  四、開漏輸出配置(若外加上拉電阻,也可讀)   當(dāng)口線鎖存器為0時,開漏輸出關(guān)閉所有上拉晶體管。當(dāng)作為一個邏輯輸出時,這種配置方式必須有外部上拉,一般通過電阻外接到Vcc。如果外部有上拉電阻,開漏的I/O口還可讀外部狀態(tài),即此時被配置為開漏模式的I/O口還可作為輸入I/O口。這種方式的下拉與準雙向口相同。   開漏端口帶有一個施密特觸發(fā)輸入以及一個干擾抑制電路。關(guān)于I/O口應(yīng)用注意事項:     1.有些是I/O口由低變高讀外部狀態(tài)時,讀不對,實際沒有損壞,軟件處理一下即可。       因為1T的8051單片機速度太快了,軟件執(zhí)行由低變高指令后立即讀外部狀態(tài),此時由于實際輸出還沒有變高,就有可能讀不對,正確的方法是在軟件設(shè)置由低變高后加1到2個空操作指令延時,再讀就對了.    有些實際沒有損壞,加上拉電阻就OK了有些是外圍接的是NPN三極管,沒有加上拉電阻,其實基極串多大電阻,I/O口就應(yīng)該上拉多大的電阻,或者將該I/O口設(shè)置為強推挽輸出.  2.驅(qū)動LED發(fā)光二極管沒有加限流電阻,建議加1K以上的限流電阻,至少也要加470歐姆以上     做行列矩陣按鍵掃描電路時,實際工作時沒有加限流電阻,實際工作時可能出現(xiàn)2個I/O口均輸出為低,并且在按鍵按下時,短接在一起,我們知道一個CMOS電路的2個輸出腳不應(yīng)該直接短接在一起,按鍵掃描電路中,此時一個口為了讀另外一個口的狀態(tài),必須先置高才能讀另外一個口的狀態(tài),而8051單?片機的弱上拉口在由0變?yōu)?時,會有2時鐘的強推挽高輸出電流輸出到另外一個輸出為低的I/O口,就有可能造成I/O口損壞.建議在其中的一側(cè)加1K限流電阻,或者在軟件處理上,不要出現(xiàn)按鍵兩端的I/O口同時為低.一種典型三極管控制電路:[圖片]如果用弱上拉控制,建議加上拉電阻R1(3.3K~10K),如果不加上拉電阻R1(3.3K~10K),建議R2的值在15K以上,或用強推挽輸出。 典型發(fā)光二極管控制電路:[圖片]       推挽/強上拉口,用拉電流驅(qū)動發(fā)光二極管[圖片]    弱上拉/準雙向口,用灌電流驅(qū)動發(fā)光二極管限流電阻盡量大于1K,最小不要小于470Ω 混合電壓供電系統(tǒng)3V/5V器件I/O口互連           5V單片機連接3.3V器件時,為防止3.3V器件承受不了5V,可將相應(yīng)的5V單片機I/O口先串一個330Ω的限流電阻到3.3V器件I/O口,程序初始化時將5V器件的I/O口設(shè)置成開漏配置,斷開內(nèi)部上拉電阻,相應(yīng)的3.3V器件I/O口外部加10K上拉電阻到3.3V器件的Vcc,這樣高電平是3.3V,低電平是0V,輸入輸出一切正常。[圖片]            3V單片機連接5V器件時,為防3V器件承受不了5V,如果相應(yīng)的I/O口是輸入,可在該I/O口上串接一個隔離二極管,隔離高壓部分。外部信號電壓高于單片機工作電壓時截止,I/O口因內(nèi)部上拉到高電平,所以讀I/O口狀態(tài)是高電平;外部信號電壓為低時導(dǎo)通,I/O口被鉗位在0.7V,小于0.8V時單片機讀I/O口狀態(tài)是低電平。[圖片]   3V單片機連接5V器件時,為防止3V器件承受不了5V,如果相應(yīng)的I/O口是輸出,可用一個NPN三極管隔離 [圖片]  如何讓I/O口上電復(fù)位時為低電平   普通8051單片機上電復(fù)位時普通I/O口為弱上拉高電平輸出,而很多實際應(yīng)用要求上電時某些I/O口為低電平輸出,否則所控制的系統(tǒng)(如馬達)就會誤動作,現(xiàn)STC12系列單片機由于既有弱上拉輸出又有強推挽輸出,就可以很輕松的解決此問題。   現(xiàn)可在STC12系列單片機I/O口上加一個下拉電阻(1K/2K/3K),這樣上電復(fù)位時,雖然單片機內(nèi)部I/O口是弱上拉/高電平輸出,但由于內(nèi)部上拉能力有限,而外部下拉電阻又較小,無法將其拉高,所以該I/O口上電復(fù)位時外部為低電平。如果要將此I/O口驅(qū)動為高電平,可將此I/O口設(shè)置為強推挽輸出,而強推挽輸出時,I/O口驅(qū)動電流可達20mA,故肯定可以將該口驅(qū)動為高電平輸出。[圖片] PWM輸出時I/O口的狀態(tài)(針對STC系列)[圖片]

bdata就是可位尋址內(nèi)部數(shù)據(jù)存儲區(qū) 允許位與字節(jié)混合訪問(16B) 盛群的單片機我沒有用過 單片機的原理應(yīng)該和51的也差不多吧 

#define unsigned char uchar; 

uchar bdata sta; 

sbit RX-DR=sta^6;

0
回復(fù)
dulai1985
LV.10
6
2013-11-21 10:09
@dulai1985
bdata就是可位尋址內(nèi)部數(shù)據(jù)存儲區(qū)允許位與字節(jié)混合訪問(16B)盛群的單片機我沒有用過單片機的原理應(yīng)該和51的也差不多吧 #defineunsignedcharuchar; ucharbdatasta; sbitRX-DR=sta^6;
uchar bdata問題#define uchar unsigned charuchar DATA = 0x01;uchar bdata sta;sbit RX_DR = sta^6;sbit TX_DS = sta^5;sbit MAX_RT = sta^4;這什么意思呢,RX_DR=1;這樣的話, 對什么腳操作呢------解決方案--------------------uchar bdata sta;//在位尋址區(qū)定義一個變量sbit RX_DR = sta^6;//聲明RX_DR對應(yīng)sta的位6RX_DR=1;//對sta的位6置1
0
回復(fù)
發(fā)