單片機(jī)一些基礎(chǔ)問題
一般說1T 4T 6T 12T的單片機(jī)是指的什么?
標(biāo)準(zhǔn)51是12T的,就是說12個(gè)時(shí)鐘周期(晶振周期,例如12M的,周期是1/12M,單位秒),機(jī)器做一個(gè)指令周期,剛好就是1/12M*12=1uS,常見指令例如nop就是一個(gè)周期,剛好1uS,其他的大多多于一個(gè)周期,乘除法更多。所以如果計(jì)算指令時(shí)間可以這樣算。
而現(xiàn)在很多51核的單片機(jī)工藝質(zhì)量上去后,頻率大大提高,增強(qiáng)型51有6T的,如果接12M的話,一個(gè)nop就只需要0.51uS,如果是STC的部分單片機(jī)12T的話,那只需要1/12uS。
單片機(jī)的晶振不是隨便選,要看技術(shù)手冊(cè),看最高頻率,看支持類型等等。一般12M,接串口的話11.0592M。如果是PIC,很多4M,8M。
不是越高越好,對(duì)很多不需要大量處理,只是控制的情況,為了增加可靠性,降低編程難度,降低功耗,往往可選用低頻的,例如實(shí)時(shí)時(shí)鐘的32768晶振。
外接晶體引腳
XTAL1 是片內(nèi)振蕩器的反相放大器輸入端,XTAL2 則是輸出端,使用外部振蕩器
時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而XTAL2 懸空。內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF 左右。
每個(gè)8051處理周期包括12 個(gè)振蕩周期每12 個(gè)振蕩周期用來完成一項(xiàng)操作如取指令和計(jì)算指令執(zhí)行時(shí)間可把時(shí)鐘頻率除以12 取倒數(shù)然后指令執(zhí)行所須的周期數(shù)。因此如果你的系統(tǒng)時(shí)鐘是11.059MHz 除以12 后就得到了每秒執(zhí)行的指令個(gè)數(shù)為921583條指令取倒數(shù)將得到每條指令所須的時(shí)間1.085ms。
復(fù)位 RST
在振蕩器運(yùn)行時(shí),有兩個(gè)機(jī)器周期(24 個(gè)振蕩周期)以上的高電平出現(xiàn)在此引腿時(shí),將使單片機(jī)復(fù)位,只要這個(gè)腳保持高電平,51 芯片便循環(huán)復(fù)位。復(fù)位后P0-P3 口均置1 引腳表現(xiàn)為高電平,程序計(jì)數(shù)器和特殊功能寄存器SFR 全部清零。當(dāng)復(fù)位腳由
高電平變?yōu)榈碗娖綍r(shí),芯片為ROM 的00H 處開始運(yùn)行程序,復(fù)位操作不會(huì)對(duì)內(nèi)部 RAM 有所影響。
輸入輸出引腳
(1) P0 端口[P0.0-P0.7] P0 是一個(gè)8 位漏極開路型雙向I/O 端口,端口置1(對(duì)端口寫1)時(shí)作高阻抗輸入端。作為輸出口時(shí)能驅(qū)動(dòng)8 個(gè)TTL。對(duì)內(nèi)部Flash 程序存儲(chǔ)器編程時(shí),接收指令字節(jié);校驗(yàn)程序時(shí)輸出指令字節(jié),要求外接上拉電阻。在訪問外部程序和外部數(shù)據(jù)存儲(chǔ)器時(shí),P0 口是分時(shí)轉(zhuǎn)換的地址(低8 位)/數(shù)據(jù)
總線,訪問期間內(nèi)部的上拉電阻起作用。
(2) P1 端口[P1.0-P1.7] P1 是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向I/0 端口。輸出時(shí)可驅(qū)動(dòng)4 個(gè)TTL。端口置1 時(shí),內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對(duì)內(nèi)部 Flash 程序存儲(chǔ)器編程時(shí),接收低8 位地址信息。
(3) P2 端口[P2.0-P2.7] P2 是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向I/0 端口。輸出時(shí)可驅(qū)動(dòng)4 個(gè)TTL。端口置1 時(shí),內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對(duì)內(nèi)部Flash 程序存儲(chǔ)器編程時(shí),接收高8 位地址和控制信息。在訪問外部程序和16 位外部數(shù)據(jù)存儲(chǔ)器時(shí),P2 口送出高8 位地址。而在訪問8
位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí)其引腳上的內(nèi)容在此期間不會(huì)改變。
(4) P3 端口[P3.0-P3.7] P2 是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向I/0 端口。輸出時(shí)可驅(qū)動(dòng)4 個(gè)TTL。端口置1 時(shí),內(nèi)部上拉電阻將端口拉到高電平,作輸入用。對(duì)內(nèi)部Flash 程序存儲(chǔ)器編程時(shí),接控制信息。除此之外P3 端口還用于一些專門功能,具體請(qǐng)看
P3 引腳兼用功能
P3.0 串行通訊輸入(RXD)
P3.1 串行通訊輸出(TXD)
P3.2 外部中斷0( INT0)
P3.3 外部中斷1(INT1)
P3.4 定時(shí)器0 輸入(T0)
P3.5 定時(shí)器1 輸入(T1)
P3.6 外部數(shù)據(jù)存儲(chǔ)器寫選通WR
P3.7 外部數(shù)據(jù)存儲(chǔ)器寫選通RD
波特率與比特率:
波特率是指數(shù)據(jù)信號(hào)對(duì)載波的調(diào)制速率,它用單位時(shí)間內(nèi)載波調(diào)制狀態(tài)改變的次數(shù)來表示,其單位是波特(Baud)。比特率:每秒鐘傳送的二進(jìn)制位數(shù),用 b / s 表示(b表示bit)波特率與比特率的關(guān)系是比特率=波特率X單個(gè)調(diào)制狀態(tài)對(duì)應(yīng)的二進(jìn)制位數(shù)。
兩相調(diào)制(單個(gè)調(diào)制狀態(tài)對(duì)應(yīng)1個(gè)二進(jìn)制位)的比特率等于波特率;四相調(diào)制(單個(gè)調(diào)制狀態(tài)對(duì)應(yīng)2個(gè)二進(jìn)制位)的比特率為波特率的兩倍;八相調(diào)制(單個(gè)調(diào)制狀態(tài)對(duì)應(yīng)3個(gè)二進(jìn)制位)的比特率為波特率的三倍;依次類推。
晶振可以根據(jù)自己的情況使用,一般實(shí)驗(yàn)板上是用11.0592MHz 或12MHz,使用前者的好外是可以產(chǎn)生標(biāo)準(zhǔn)的串口波特率,后者則一個(gè)機(jī)器周期為1 微秒,便于做精確定時(shí)。在自己做實(shí)驗(yàn)里,注意的是VCC 是+5V 的,不能高于此值,否則將損壞單片機(jī),太低則不能正常工作。在31 腳要接高電平,這樣我們才能執(zhí)行片內(nèi)的程序,如接低電平則使用片外的程序存儲(chǔ)器。
KEIL uVision2 C51 編譯器所支持的數(shù)據(jù)類型
數(shù)據(jù)類型長度值域
Unsigned char單字節(jié)0~255
Signed char單字節(jié)-128~+127
Unsigned int雙字節(jié)0~65535
Signed int雙字節(jié)-32768~+32767
Unsigned long四字節(jié)0~4294967295
Signed long四字節(jié)-2147483648~+2147483647
float四字節(jié)±1.175494E-38~±3.402823E+38
bit1位0或1
sfr單字節(jié)0~255
sfr16雙字節(jié)0~65535
Sbit1位0或1
變量的定義可以使用所有C51 編譯器支持的數(shù)據(jù)類型,而常量的數(shù)據(jù)類型只有整型、浮點(diǎn)型、字符型、字符串型和位標(biāo)量
長整型就在數(shù)字后面加字母L,如104L,034L,0xF340 等。浮點(diǎn)型常量可分為十進(jìn)制和指數(shù)表示形式(12e5表示12*10^5)
8051 結(jié)構(gòu)提供給用戶3 個(gè)不同的存儲(chǔ)空間
第一個(gè)存儲(chǔ)空間是代碼段(CODE)用來存放可執(zhí)行代碼被16 位尋址空間可達(dá)64K;除了可執(zhí)行代碼還可在代碼段中存儲(chǔ)查尋表為達(dá)此目的8051 提供了通過數(shù)據(jù)指針DPTR 或程序計(jì)數(shù)器加上由累加器提供的偏移量進(jìn)行尋址的指令這樣就可以把表頭地址裝入DPTR 中把表中要尋址的元素的偏移量裝入累加器中8051 在執(zhí)行指令時(shí)的過程中把這兩者相加由此可節(jié)省不少指令周期。
第二個(gè)存儲(chǔ)區(qū)是8051 內(nèi)128 字節(jié)的內(nèi)部RAM 或8052 的前128 字節(jié)內(nèi)部RAM 這部分主要是作為數(shù)據(jù)段稱為DATA 區(qū)指令用一個(gè)或兩個(gè)周期來訪問數(shù)據(jù)段訪問DATA 區(qū)比訪問XDATA 區(qū)要快因?yàn)樗捎弥苯訉ぶ贩绞蕉L問XDATA 須采用間接尋址必須先初始化DPTR 通常我們把使用比較頻繁的變量或局部變量存儲(chǔ)在DATA 段中但是必須節(jié)省使用DATA 段因?yàn)樗目臻g畢竟有限。在數(shù)據(jù)段中也可通過R0 和R1 采用間接尋址R0 和R1 被作為數(shù)據(jù)區(qū)的指針將要恢復(fù)或改變字節(jié)的地址放入R0 或R1 中根據(jù)源操作數(shù)和目的操作數(shù)的不同執(zhí)行指令需要一個(gè)或兩個(gè)周期。數(shù)據(jù)段中有兩個(gè)小段第一個(gè)子段包含四組寄存器組每組寄存器組包含八個(gè)寄存器共32 個(gè)寄存器可在任何時(shí)候通過修改PSW 寄存器的RS1 和RS0 這兩位來選擇四組寄存器的任意一組作為工作寄存器組8051 也可默認(rèn)任意一組作為工作寄存器組工作寄存器組的快速切換不僅使參數(shù)傳遞更為方便而且可在8051 中進(jìn)行快速任務(wù)轉(zhuǎn)換另外一個(gè)子段叫做位尋址段BDATA 包括16 個(gè)字節(jié)共128 位每一位都可單獨(dú)尋址8051 有好幾條位操作指令這使得程序控制非常方便并且可幫助軟件代替外部組合邏輯這樣就減少了系統(tǒng)中的模塊數(shù)位尋址段的這16 個(gè)字節(jié)也可像數(shù)據(jù)段中其它字節(jié)一樣進(jìn)行字節(jié)尋址。
評(píng)論