智能尋跡避障小車電機控制系統設計_第1頁
智能尋跡避障小車電機控制系統設計_第2頁
智能尋跡避障小車電機控制系統設計_第3頁
智能尋跡避障小車電機控制系統設計_第4頁
智能尋跡避障小車電機控制系統設計_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一章 智能尋跡避障小車電機控制系統設計 1任務 任務一:產生智能尋跡避障小車電機的基本控制信號; 任務二:編制智能尋跡避障小車基本巡航動作的控制函數; 2要求 (1)能控制智能尋跡避障小車電機的旋轉方向和速度; (2)能控制智能尋跡避障小車實現基本巡航動作; 1.1 項目描述 本項目的主要內容是: 對 C51 單片機編程, 使之產生控制電機旋轉方向和轉速的各種基 本控制信號,然后在此基礎上編制出能夠控制智能尋跡避障小車實現前進、后退、左轉彎、 右轉彎等基本巡航動作的控制函數。 控制電機旋轉是智能尋跡避障小車實現各種導航控制的重要基礎, 在本書后續項目模塊 中都要用到對電機的控制, 因此本章所

2、設計出的電機控制函數將作為功能模塊被后續設計案 例直接調用;通過該項目的學習與實踐,可以讓讀者獲得如下知識和技能: 掌握單片機 I/O 端口的基本應用方法; 學會單片機C語言的基本編程方法; 掌握直流伺服電機的基本工作原理和控制方法; 掌握直流減速電機的基本工作原理和控制方法; 掌握H電橋驅動直流電機的工作原理與控制方法,即直流電機驅動芯片L293工作原理; 能夠編制控制輪式教育機器人實現基本巡航動作的控制函數; 1.2 必備知識 1.2.1 伺服電機 伺服:一詞源于希臘語“奴隸”的意思。人們想把“伺服機構”當個得心應手的馴服 工具,服從控制信號的要求而動作。在信號來到之前,轉子靜止不動;信號

3、來到之后,轉 子立即轉動;當信號消失,轉子能即時自行停轉。由于它的“伺服”性能,因此而得名。 標準的伺服電機有三條控制線,分別為:電源、地線及控制線。電源線與地線用于提 供內部的電機及控制線路所需的能源,控制信號要求是一個周期性的正向脈沖信號,這個 周期性脈沖信號的高電平時間通常在1ms-2ms之間,而低電平時間應在 5ms到20ms之間。 本書向讀者介紹的伺服電機是 PARALLAX公司生產的連續旋轉伺服電機,它的控制信號 時序是:低電平時間固定為 20ms,高電平為1.3ms 1.7ms之間。圖1.1為PARALLAX司 生產的直流伺服電機外形圖。 圖1.1直流伺服電機外形圖 1.2.2

4、直流電機 方案二中采用的是直流減速電機,在此只介紹該電機的控制方法,對于其內 部結構不作介紹。該電機外形示意圖如圖 1.2所示,它有紅、黑兩根控制線,電 機狀態控制電平如表1-1所示。 表1-1電機控制電平與狀態對應表 紅線控制端 黑線控制端 電機狀態 0 1 順轉 1 0 逆轉 1 1 停轉 直流電機的控制信號由單片機輸出送至電機驅動芯片L293后,經L293內 部H電橋電路驅動電機運轉。 圖1.2直流電機外形圖 1.2.3直流電機H橋驅動電路工作原理 本設計中直流電機 H橋驅動電路由驅動芯片L293D完成,在L293D內部形成一個 H橋 型的驅動驅動電路,類似如圖1.3所示。圖中用開關模擬

5、電機信號通斷,在實際的控制中是 采用晶體三極管來完成此功能,可參見圖1.4所示的電機控制示意圖。此處只是為簡述控制 原理,所以用開關模擬電機工作過程。 VCC (5 圖1.3 H 橋驅動直流電機電路 從圖中可以看出,其形狀類似于字母“H,而作為負載的直流電機是像“橋”一樣架在 上面的,所以稱之為“ H橋驅動”。4個開關所在位置就稱為“橋臂”。 從電路中不難看出,假設開關 A、D接通,電機為正向轉動,則開關 B、C接通時,直流 電機將反向轉動。從而實現了電機的正反向驅動。借助這4個開關還可以產生電機的另外2 個工作狀態: (1)剎車 一一將B、D開關(或 A C)接通,則電機慣性轉動產生的電勢將

6、被短 路,形成阻礙運動的反電勢,形成“剎車”作用。 (2)惰行 一一4個開關全部斷開,則電機慣性所產生的電勢將無法形成電路,從而 也就不會產生阻礙運動的反電勢,電機將慣性轉動較長時間。 POJ 1A 2 p k3 1Y PLO 1 P0.1 2A 3卜 AT89C52 圖1.4 電機控制示意圖電路 1.2.4 延時函數 在實際的單片機應用系統開發過程中,由于程序功能的需要,經常編寫各種延時程 序,延時時間從數微秒到數秒不等。 實現延時通常有兩種方法:一種是硬件延時,要用到單片機的定時器/計數器,這種方 法可以提高 CPU的工作效率,同時也能做到精確延時;另一種是軟件延時,這種方法主要 采用循環

7、體進行,本項目開發過程中采用的是軟件延時的方法,在后續各項目模塊中經常 作為延時功能調用的幾個延時函數原形如下: void delay_n 卩s(uint/i)延時微秒級函數 i=i/10 ; while(-i); void delay_nms(uint n)/ 延時毫秒級函數 n=n+1 ; while(-n) delay_n 卩 s(90;) void delayms(uint x)/ 延時函數 12 兆晶振 1000 為一秒; 11.0592兆晶振922為一秒(會有一定誤差) uchar i; while(x-) for(i=0;i123;i+); 上述函數設計的基本原理是通過執行循環體

8、來消耗時間從而達到延時的目的,其中 delay_nms()是毫秒級的延時,而delay_n氣)是微秒級的延時。例如:如果你想延時 1毫 秒,可以使用語句 delay_nms(1);延時100微秒則可使用語句 delay_n宙(100);來完成。 注意:上述延時函數是在外部晶振為12MHZ的情況下設計的,如果外部晶振頻率不是 12MHz,調用這兩個函數所產生的真正延時就會發生變化。對于許多C51開發者特別是初 學者編制非常精確的延時函數有一定難度,關于延時函數的編程經驗和技巧此處不作詳細 介紹,讀者目前只要會將這兩個函數作為功能模塊調用就行了 1.3案例設計 1.3.1系統設計方案 本項目向讀者

9、詳細介紹了兩種實現方案,其中學員實操采用方案二進行。同時該項目 設計為本書后續設計案例的基礎控制模塊,后續的尋跡、避障等功能模塊實在該項目上擴展 實現的。 方案一:該設計方案采用 CPU對執行機構輸出控制, 不涉及到對外部數據信息的采集, 因此,系統采用“CPU+執行機構”的總體設計方案,其中CPU采用目前性價比較高的 STC89C52 單片機,并以此為核心構建最小控制系統,執行機構的動力裝置采用PARALLAX司生產的 連續旋轉伺服電機,其優點是編程控制方便且不需額外增加驅動電路,系統總體框圖如圖 1.5所示。 圖1.5 方案一系統框圖 方案二:采用“單片機最小系統 +電機驅動芯片+直流電機

10、”的設計方案,設計方案中 的電機采用直流減速電機,該電機具有控制原理簡單、性價比高,易于控制等特點,被廣泛 應用于各種智能玩具小車設計之中;電機驅動采用集成芯片L293完成,該芯片運用 H電橋 驅動直流電機的控制原理實現對直流電機旋轉方向和速度的控制。系統總體框圖如圖1.6所 示。 圖1.6方案二統框圖 1.3.2硬件電路設計 方案一: 該設計方案的硬件電路如圖1.7所示:它是在單片機最小系統的基礎上直接 連接伺服電機構成的,其中左電機的控制信號由P1_0提供,右電機的控制信號由P1_1提 供,直接對該兩個端口編程,便可實現對伺服電機旋轉方向和速度控制。 5V 左輪驅動電機 右輪驅動電機 GN

11、D 4 12MHZ I C20PFT 18 19 20 P1.0 P1.1 VCC AT89C51 RST XTA1 XTA2 GND GND GND 圖1.7方案一系統原理圖 萬案二: 該設計方案的硬件電路如圖1.8所示:電機控制信號由單片機的P0.0P0.3 輸出送到電機驅動芯片的 2腳與7腳以及10腳與15腳,再從芯片的3腳與6腳(左電機控 制)以及11腳與14腳(右電機控制)輸出驅動電機工作。 133系統軟件設計 任務一:產生智能尋跡避障小車電機的基本控制信號 方案一:本任務是對單片機編程,在指定的單片機引腳P1_0輸出伺服電機的各種控制 信號。 1、源程序 sfr P1 = 0 x9

12、0;P1 口 C51 定義; sbit P1_0 = P1A0;/特殊功能位定義 #defi ne uint un sig ned int void delay_n卩 s(uint/)延時 n 函數 i=i/10 ; while(-i); void delay_nms(uint n) / 延時 nms 函數 n=n+1 ; while(-n) delay_n 卩 s(90;) int main(void)/ 主函數 while(1) P1_0輸出高電平 / 延時 1。5ms P1_0輸出低電平 /延時20ms P1_0=1; delay_n 卩 s(150O) P1_0=0; delay_nm

13、s(20); 2、程序運行及調試 在智能尋跡避障小車控制板上按圖1.7連接伺服電機控制電路,編譯以上程序,將產 生的可執行文件燒寫到控制板上的單片機程序存儲器,具體操作步驟如下: 步驟1:啟動Keil uVision4 IDE,完成對上面程序的編輯,編譯和調試,產生可執行的HEX 文件。 步驟2:將ISP下載線一端連接到 PC機的并行接口上,另一端(小端)連接到智能尋跡避 障小車的程序下載口上。 打開ISP下載軟件將步驟1獲得的HEX文件下載到智能尋跡避障小車的單片機內部程 序存儲器,開啟電源,運行程序,用示波器測量P1_0引腳,可測出使伺服電機轉速為零的 控制信號,其波形如圖 1.9所示。

14、Vdd(5v) Vss(0v) 20ms 圖1.9 使伺服電機轉速為零的控制信號時序圖 將程序中的 delay_n卩s(1500)改成delay_n卩s(1300),即延時1.3ms,再重復以上步 驟,可用示波器測得使伺服電機使電機順時針全速旋轉的控制信號,其波形如圖1.10所 示。 4 * 1.3ms*| 嚴 1.3ms Vdd(5v) Vss(0v) 20ms 圖1.10 使電機順時針全速旋轉的控制脈沖序列 將程序中的 delay_n卩s(1500)改成delay_n卩s(1700),即延時1.7ms,再重復以上步 驟,可用示波器測得使伺服電機逆時針全速旋轉的控制信號,其波形如圖1.11所

15、示。 巧 +1.7ms巧 + 1.7ms Vdd(5v) pq Vss(Ov) 20ms 圖1.11使伺服電機逆時針全速旋轉的脈沖序列 在1.3ms 1.5ms 1.7ms時間范圍內改變延時函數的延時量,可獲得控制伺服電機不 同旋轉方向和轉速的各種波形。 步驟3:對伺服電機進行零點標定 所謂伺服電機零點標定是指當發送一個使伺服電機轉速為零的控制信號給伺服電機時, 讓電機保持靜止不動的過程,伺服電機在出廠時沒有預先標定,因此需要調整。具體做法是: 將步驟2產生的使電機轉速為零的控制程序加載到單片機程序存儲器,開機運行,若電 機有旋轉,說明未標定,用螺絲刀調整伺服電機上的電位器,同時觀察電機的旋轉

16、情況, 直到電機停止轉動,表明已經標定。 電機標定后,用步驟 2產生的各種控制信號測試電機的旋轉方向和速度,觀察電機的運 行情況,可以實現對電機的不同旋轉方向和速度的控制。 3、程序設計思路 基本思路是:根據伺服電機的控制信號的時序要求,調用延時函數控制單片機引腳高低 電平的持續時間,并用循環執行的方式使單片機引腳不斷的輸出伺服電機控制信號。 產生伺服電機基本控制信號的程序流程圖1.12所示: 圖1.12主函數流程圖 即利用延時函數將指定的引腳的低電平持續時間固定為20ms,而高電平持續時間根 據需要在“1.3ms 1.5ms 1.7ms”時間范圍內改變,然后循環執行,就可獲得能夠控制伺 服電

17、機不同旋轉方向和轉速的各種控制脈沖信號。 方案二:對單片機P0.0、P0.1(左電機)和P0.2、P0.3(右電機)編程,程序設計以左電 機為例。 1、源程序 #include #define uint unsigned int #define uchar unsigned char sbit zuo1=P0A1;/左電機端口定義 sbit zuo2=P0A0; sbit you1=P0A3; /右電機端口定義 sbit you2=P0A2; void delay(uint x) uchar i; while(x-) for(i=0;i123;i+); void qian() / 左邊往前 /

18、 右邊往前 zuo1=0; zuo2=1; you1=0; you2=1; main() while(1) qian(); delay(922*5); 2、程序運行及調試 在智能尋跡避障小車控制板上按圖 1.8 連接伺服電機控制電路,編譯以上程序,將產 生的可執行文件燒寫到控制板上的單片機程序存儲器,具體操作步驟如下: 步驟1:啟動Keil uVision4 IDE,完成對上面程序的編輯,編譯和調試,產生可執行的HEX 文件。 步驟2:將STC下載線一端連接到 PC機的并行接口上,另一端(小端)連接到智能尋跡避 障小車的程序下載口上。 打開STC下載軟件將步驟1獲得的HEX文件下載到智能尋跡避

19、障小車的單片機內部程 序存儲器,開啟電源,運行程序,此時左右電機順時針旋轉,小車前進。 將上述程序中的前進函數中的左右端口控制電平按表 1-1 所示的修改, 編輯、編譯后便 可以得到電機逆轉(后退)、停轉(原地不動)的控制函數。 任務二:編制智能尋跡避障小車基本巡航動作的控制函數 方案一: 本任務是在伺服電機基本控制信號的基礎上設計出智能尋跡避障小車的基本巡航動作 的控制函數,并按一定的算法調用這些控制函數,使智能尋跡避障小車完成比較復雜的運動。 1源程序 程序名:Co ntrol.c 功 能:控制輪式教育機器人實現前后左右運動的基本動作 =*/ #i nclude #defi ne uint

20、 un sig ned int #defi ne uchar un sig ned char void delay_n 卩 s(uint i); / 函數聲明 void delay_ nms(uint n); void Forward(void); void Left_Tur n( void); void Right_Tur n( void); void Backward(void); uchar Navigatio n10=F,L,F,F,R,B,L,B,B,Q; mai n( void)/ 主函數 int addr=0; while(Navigatio naddr!=Q) switch(N

21、avigati on addr) case F:Forward();break; case L:Left_Tur n( );break; case R:Right_Turn();break; case B:Backward();break; addr+; void delay_n卩 s(uint /)延時 n 卩 s i=i/10; while(-i); void delay_nms(uint n) / 延時 n ms n=n+1; while(-n) delay_n 卩 s(900); void Forward(void)/ 前進子函數 uchar i; for(i=1;i=65;i+) P

22、1_1=1; delay_n 卩 s(1700); P1_ 仁0; P1_0=1; delay_n 卩 s(1300); P1_0=0; delay_ nm s(20); void Left_Turn(void)/ 左轉彎子函數 uchar i; for(i=1;i=26;i+) P1_1=1; delay_n 卩 s(1300); P1_ 仁0; P1_0=1; delay_n 卩 s(1300); P1_0=0; delay_ nm s(20); void Right_Turn(void)/ 右轉彎子函數 uchar i; for(i=1;i=26;i+) P1_1=1; delay_n

23、卩 s(1700); P1_ 仁0; P1_0=1; delay_n 卩 s(1700); P1_0=0; delay_ nm s(20); void Backward(void)/ 后退子函數 uchar i; for(i=1;i=65;i+) P1_1=1; delay_n 卩 s(1300); P1_ 仁0; P1_0=1; delay_n 卩 s(1700); P1_0=0; delay_ nm s(20); 2、運行程序 這里仍然按圖1.7連接伺服電機控制電路,編譯以上程序,將產生的可執行文件燒寫到 智能尋跡避障小車控制板上的單片機程序存儲器,開機運行,可以看到小車能按如下規律 運動

24、,即:前進t左轉彎t前進t前進t右轉彎t后退t左轉彎t后退t后退t停止,仔 細觀察可以發現,它的運動軌跡接近一個矩形。 3、程序設計思路 主函數按數組設定的次序依次調用前進,左轉彎、右轉彎和后退等四個基本控制函 數,這四個函數是在任務一介紹過的伺服電機基本控制信號的基礎上設計的,下面我們重 點以“前進子函數”為例介紹其基本設計思路,為了便于分析,這里再把程序中的“前進 子函數”單獨列出如下: void Forward(void)/ 前進子函數 uchar i; for(i=1;i=65;i+) P1_1=1; delay_n 卩 s(1700); P1_ 仁0; P1_0=1; delay_n

25、 卩 s(1300); P1_0=0; delay_ nm s(20); 仔細分析以上程序,根據P1_0和P1_1引腳的高低電平持續時間,可以畫出讓輪式教育 機器人前進的左右電機控制脈沖時序圖,如下: Vdd(5v) Vss(0v) + 1.3ms4 左電機控制脈沖 +1.3ms H21.7ms ! Vdd(5v) v 1.7ms Vss(Ov) 21.3ms 1.7ms 圖1.13 前進控制信號時序圖 對照任務一中介紹過的伺服電機正轉、反轉控制信號,我們發現,以上控制小車前進 的脈沖信號有兩個問題需要進一步解釋。 第一:因為伺服電機安裝在車架上的朝向剛好相反,其中一個電機如果原來是正轉, 那

26、么掉轉朝向之后就變成了反轉,所以要使兩個電機帶動兩個輪子朝一致的方向轉動,就 必須讓兩個伺服電機的旋轉方向為一正一反。 第二:因為受到單片機的編程限制,兩個電機的控制脈沖并沒有在時間上保持絕對的 同步(如圖1.13所示),這樣看起來似乎一個電機要先動作,而另一個電機稍微有點滯后, 并且由此引起的低電平持續時間也不再是前面介紹的20ms。不過這點小誤差在程序實際運 行中的影響可以被忽略。 圖1.13只給出了控制小車前進的一個控制脈沖,為驅使小車向前行進一段距離,程序 中用for循環語句產生65個這樣的脈沖序列,在具體應用中,可以根據實際需要改變循環 次數,以達到改變小車行進距離的目的。用同樣的思

27、路,讀者不難分析本案例中的左轉 彎、右轉彎和后退等基本動作控制函數。 萬案二: 本任務是在直流減速電機基本控制信號的基礎上設計出智能尋跡避障小車的 基本巡航動作的控制函數,主要完成智能尋跡避障小車前進、后退、停止等基本巡航動作。 #i nclude #defi ne uint un sig ned int #defi ne uchar un sig ned char sbit zuo1=P0A1; sbit zuo2=P0A0; sbit you1=P0A3; sbit you2=P0A2; void delay( uint x) uchar i; while(x-) for(i=0;i123

28、;i+); void qia n() zuo1=0; zuo2=1; you1=0; you2=1; void hou() zuo1=1; zuo2=0; you1=1; you2=0; void zuo() zuo1=1; zuo2=0; you1=0; you2=1; void you() zuo1=0; zuo2=1; you1=1; you2=0; void ting() zuo1=1; zuo2=1; you1=1; you2=1; main() while(1) qian(); delay(922*5); hou(); delay(922*4); ting(); / 左邊往前 /

29、右邊往前 / 左邊往后 / 右邊往后 / 左邊往后 / 右邊往前 / 左邊往前 / 右邊往后 delay(922*3); 2、運行程序 這里仍然按圖1.8連接直流減速電機控制電路,編譯以上程序,將產生的可執行文件燒 寫到智能尋跡避障小車控制板上的單片機程序存儲器,開機運行,可以看到小車能按如下 規律運動,即:前進 5秒t后退4秒t停止3秒;如此周而復始循環。 3、程序設計思路 主函數按事先設定的次序依次調用前進,延時、后退,延時、停止,延時函數;讓智能 尋跡避障小車完成規定動作。即主要測試電機的前進、后退、停止功能是否控制正常, 讀者 可以將左轉彎、右轉彎函數加入主函數中加以調用,看功能是否實

30、現。 1.4相關知識 通過上述設計案例的學習和實踐,在對單片機輸出接口的應用有了直觀認識之后,我 們下面再來詳細學習有關單片輸入/輸出口機(I/O 口)的基本結構及原理,以及特殊功能 寄存器(sfr )的Cx51定義方法。 1.4.1 89C51并行IO 口的內部結構及原理 89C51單片機總共有4個8位的并行IO接口,分別是P0, P1, P2和P3(本案例用到P1 口), 共32根I/O 口線,實際上4個并行I/O 口就是特殊功能寄存器 SFR之中的4個,每個I/O 口 主要由4部分構成:端口鎖存器、輸入緩沖器、輸出驅動器和端口引腳,下面分別介紹其內 部結構及原理: 地址/數據控制 VCC

31、 円口艘再鶴伽神冊蠟枸 (a)P0 口的位結構 (b)P1 口的位結構 讀鎖存器 讀鎖存器 寫入 (c)P2 口的位結構 內部總線 寫入 讀引腳 (d)P3 D Q 鎖存器 CP Q 第二輸入功能 VCC T1 口的位結構 P1.X 圖1.14 89C51 各I/O 口的位結構 1、P0 口:圖1.14中的(a)是P0 口中一位結構圖。其中包含一個輸出鎖存器、兩個 三態緩沖器、一個輸出驅動電路和一個輸出控制電路。輸出驅動電路由兩個場效應管T1和 T2組成,其工作狀態受輸出控制電路的控制。控制電路包括一個與門、一個反相器和模擬 轉換開關MUX模擬開關的位置由來自 CPU的控制信號決定,當控制信號

32、為低電平時,它把 輸出級與鎖存器的 Q端接通。同時,因為與門輸出為低電平,輸出級中的場效應管T1處于 截止狀態,因此是輸出級是漏級開路的開漏電路。這種情況P0 口可用做一般的I/O線。其 輸出和輸入操作如下: 當CPU向端口輸出數據時,寫脈沖加在觸發器的時鐘端CL上,此時與內部總線相連的 D端的數據經反向后出現在 Q端上,再經T2管反相,于是在P0 口這一位引腳上出現的數據 正好是內部總線上的數據(當P0 口作輸出口使用時, 輸出級屬開漏電路, 在驅動NMO電路 時應外接上拉電阻) 。 當輸入操作時, 端口中的兩個三態緩沖器用于讀操作。 圖中下面一個緩沖器用于讀端口 引腳數據。 當執行一般的端

33、口輸入指令時, 讀引腳脈沖把三態緩沖器打開, 于是端口上的數 據將經過緩沖器輸送到內部總線;上面一個緩沖器讀取鎖存器中Q端的數據。Q端的數據實 際上與引腳的數據是一致的, 結構上的這種安排是為了適應所謂 “讀修改寫” 這類指令 的需要。這類指令的特點是:先讀端口, 隨之可以對讀入的數據進行修改, 然后再寫到端口 上。例如,邏輯與指令(ANL PO, A),此指令的功能是先把 P0 口的數據讀入 CPU隨后同 累加器A中的數據按位進行邏輯與操作(即對讀入的數據作修改)最后把結果寫回P0 口。 對于“讀一修改一寫” 這類指令,不直接讀引腳上的數據而讀鎖存器Q端上的數據是為 了避免可能錯讀引腳上的電

34、平信號。 例如,用一條口線去驅動一個晶體管的基極, 當向此口 線寫 1 時, 晶體管導通并把引腳上的電平拉低。這時,若從引腳上讀取數據,就把該數據錯 讀為0 (實際上應是1),而從鎖存器 Q端讀入,則得到正確的結果。 由圖1.14( a)可知,當讀引腳操作(輸入)時,弓I腳上的外部信號既加在三態緩沖器 2的輸入端上,又加在輸出級場效應管(T2)的漏級上,若此時 T2是導通的(例如曾輸出 過數據 0),則引腳上的電位被鉗在 0 電平上。為使引腳上輸入的邏輯電平能正確地讀入, 在輸出數據時,要先向鎖存器寫1,使其Q端為0,使輸出級T1和T2兩個管子均被截止, 引腳處于懸浮狀態,作高阻抗輸入。因此,

35、作為一般的I/O 口使用時,P0 口也是一個準雙 向口。當P0 口作為地址/數據總線分時使用時, 這時控制信號為高電平, 轉換開關MUX把反 相器輸出端與T2接通,同時把與門開鎖。輸出的地址或數據信號通過與門驅動T1管,同時 通過反相器驅動 T2管,完成信息傳送。 2、P1 口: P1 口是一個準雙向口,作通用的I/O 口使用。其結構如圖 1.14 (b)所示, 在輸出驅動部分接有內部提升電阻。當用做輸出線時,將1 寫入鎖存器,使輸出驅動器 T 管截止,輸出線由內部提升電阻拉成高電平(輸出1);將0寫入鎖存器時,T導通,輸出0。 P1 口作為輸入線時,必須先將 1 寫入鎖存器,使 T 截止,把

36、該口線由內部提升電路拉成高 電平。于是,當外部輸入為高電平信號時,該口線為 1;輸入為低電平信號時,該口線為 0, 從而使輸入端的電瓶隨輸入信號改變,讀入正確的數據信息。P1 口作為是輸入時,可被任 何TTL電路和MOS電路所驅動。由于具有內部提升電阻, 也可以直接被集電極開路或漏極開 路的電路驅動而不必外加提升電路。 CPU讀P1 口有兩種情況:讀引腳和讀鎖存器狀態。讀引腳時,打開三態門2,讀入引 腳上的輸入狀態(如 MOXA,P1指令);讀鎖存器狀態時,打開三態門 1,與p0 口的I/O功 能一樣, P1 口可以進行“讀修改寫”操作。 3、P2 口: P2 口為準雙向口。每一位的結構如圖

37、1.14中(c)所示。P2 口可以作為通 用的I/O 口使用,外接I/O設備,也可以作為擴展系統時的地址總線口(輸出高8位地址), 由控制信號控制轉換開關來實現。當轉換開關(MUX)倒向左邊時,P2 口作通用I/O 口使 用,作用和P1 口相同。當作為地址總線口使用時, MUX在CPU的控制下倒向右邊, 從而在 P2 口的引腳上輸出地址(A15A8)。P2 口的地址信息來源于 PCH DPH。對于8031單片機 來說,P2 口通常只作為地址總線口使用,而不作 I/O 口線直接與外部設備連接。 4、P3 口: P3 口為雙功能口,其每一位的結構如圖1.14中(d)所示。當它作為第一 功能口(通用

38、的I/O 口)使用時,工作原理與 P1 口和P2 口類似,但第二輸出功能線保持為 高電平,使與非門3對鎖存器輸出端(Q端)是暢通的(與非門3的輸出只取決于 Q的狀態)。 當P3 口作為第二功能使用時,相應位的鎖存器必須為“1”狀態,使與非門3的輸出電路由 第二輸出功能線的狀態來確定,或使此口線允許輸入第二功能信號。對P3 口不管是作通用 輸入口或作第二功能輸入口,相應位的鎖存器和第二輸出功能端都必須為1。在P3 口的引 腳信號輸入通道中有兩個緩沖器2和4 ,第二輸入功能信號取自緩沖器4的輸出端,通用 輸入信號取自緩沖器 2的輸出端。P3 口的第二功能定義見表 8-1 表1-2 P3 口的第二功

39、能 通道位 第二功能 注釋 P3.0 RXD 串行輸入口 P3.1 TXD 串行輸岀口 P3.2 INT0 外部中斷0輸入 P3.3 INT1 外部中斷1輸入 P3.4 T0 計數器0計數輸入 P3.5 T1 計數器1計數輸入 P3.6 WR 外部數據RAM寫選通信號 P3.7 RD 外部數據RAM寫選通信號 1.4.2 89C51特殊功能寄存器(SFR)的C51定義方法 1、89C51特殊功能寄存器(SFR)及其Cx51定義方法 89C51單片機片內有21個特殊功能寄存器(SFR)分散在片內RAM區的高128字節中, 地址為80H0FFH,對SFR的操作,只能用直接尋址方式。89C51單片機

40、中,除了程序計數 器PC和4組通用存器組之外,其他所有的寄存器,均稱為SFR并位于片內特殊寄存器區, 每個SFR和其他地址見表1-3。SFR中有11個寄存器具有位尋地址能力。這些寄存器的字節 地址都能被8整除,即字節地址是以 8或0為尾數的。89C51單片機的SFR如表1-3所列: 表1-389C51特殊功能寄存器一覽表 SFR MSB位地址/位定義 LSB 字節 地址 B F0H ACC E0H PSW D7 D6 D5 D4 D3 D2 D1 D0 D0H CY AC F0 RS1 RS0 OV F1 P IP BF BE BD DC BB DA A9 B8 B8H -一- -一- -一-

41、 PS PT1 PX1 PT0 PX0 P3 B7 B6 B5 B4 B3 B2 B1 B0 B0H P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 IE AF AE AD AC AB AA A9 A8 A8H EA -一- -一- ES ET1 EX1 ET0 EX0 P2 A0H SBUF 99H SCON 9F 9E 9D 9C 9B 9A 99 98 98H SM0 SM1 SM2 REN TB8 RB8 TI RI P1 90H TH1 8DH TH0 8CH TL1 8BH TL0 8AH TMOD GATE C/T M1 M0 GATE C/T M

42、1 M0 89H TCON 8F 8E 8D 8C 8B 8A 89 88 88H TF1 TR1 F0 R0 IE1 IT1 IE0 IT0 PCON SMOD -一- -一- -一- GF1 GF0 FD IDL 87H DPH 83H DPL 82H SP 81H P0 80H 為了能直接訪問這些特殊功能寄存器,KFIL CX51提供了一種自主的定義形式方法。這 種定義方法與標準 C語言不兼容,只適用于對 89C51系列單片機進行 C編程。 這種定義的方法是引入關鍵字sfr”,語法為:sfr sfr-name=int constant ; 例如: sfr SCON=OX98/串口控制寄存

43、地址 98H sfr TMOD=OX89 ;/定時器/計數器方式控制寄存器地址89H 注意:sfr必須跟一個特殊寄存器名,”=”后面的地址必須是常數,不允許帶有運算的表 達式,這個常數值的范圍必須在特殊功能寄存器地址范圍內,位于0X800XFF之間。 對SFR的16數據的訪問,在新的 89C51系列產品中,SFR在功能上經常組合為 16位值。 當SFR的高端地址直接位于其低端地址之后時,對SFR16值可以進行直接訪問。例如 8052 的定時器2就是這種情況,為了有效地訪問這類 SFR可使用關鍵字” sfr16”。16位SFR定 義的語法與8位SFR相同,16位SFR的低端地址必須作為” fr1

44、6 ”的定義地址。 例如:sfr16 T2=oxCC/定義2:T2低8位地址=0CCH, T2高8位地址=OCDH 定義中名字后面不是賦值語句,而是一個SFR地址,高字節必須位于低字之后。這種定義適 用于所有新的SFR但不能用于定時器/計數器0和1。 在典型的89C51應用問題中,經常需要單獨訪問 SFR中的位,CX51的擴充功能之成為可能。特殊位(sbit)r的定義像SFR 樣不與標準 C兼容,使用關鍵字” sbit”可以訪問位尋址對象。 與SFR定義一樣,用關鍵字” sbit”定義某些特殊位,并接受任何符號名, ”=”號后將絕對 地址賦給變量名。這種地址分配有 3 種方法。 方法一:sfr

45、-n ameAi nt-c on sta nt 當特殊寄存器的地址這字節(8位)時,可使用這種方法。sfr-name必須是已定義的 SFR的名 字。*后的語句定義了基地址上的特殊位置。該位置必須是07的數。例如: sfr PSW=0Xd0; /定義PSW寄存器地址為 0XD0 sbit OV=PSWA2 /定義OV為位為PSW2, 地址為 0XD2 sbit TCY=PSWA7 /定義CY位為PSW.7地址為0XD7 方法二: int-constantAint-constant 這種方法以一個整常數作為基地址,該值必須在0X80OXFF之間,并能被8整除,確定 位置的方法同上。 例如:sbit

46、 OV=0XDOA20V位于地址為0XD2 sbit CY=OXDOA7CY 位地址為 0XD7 方法三: int-constant 這種方法將位的絕對地址賦給變量,地址必須位于0X800XF F之間,例如: sbit OV=OXD2; sSbit CY=OXD7; 特殊功能位代表了一個獨立的定義類,不能與其他位定義和位域互換。 2、89C51并行接口及其CX51定義方法 前面提到89C51單片機芯片內帶有 4個8位的并行口,共 32根I/O線,對I/O 口的操作實 際上就是對PO, P1, P2和P3四個寄存器進行操作,而PO, P1, P2和P3四個寄存器也屬 于特殊功能寄存器(SFR,因此89C51并

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論