C51單片機(jī)知識(shí)總結(jié)
單片機(jī)I/O口的使用
51單片機(jī)總共有P0、P1、P2、P3四個(gè)8位雙向輸入輸出端口,每個(gè)端口都有鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器。4個(gè)I/O端口都能作輸入輸出口用,其中P0和P2通常用于對(duì)外部存儲(chǔ)器的訪問(wèn)。
在無(wú)片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,這4個(gè)端口的每一位都可以作為準(zhǔn)雙向通用I/O端口使用。在具有片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,P2口作為高8位地址線,P0口分時(shí)作為低8位地址線和雙向數(shù)據(jù)總線。
下圖為P0口的某位P0.n(n=0~7)結(jié)構(gòu)圖,它由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸入緩沖器和輸出驅(qū)動(dòng)電路及控制電路組成。從圖中可以看出,P0口既可以作為I/O用,也可以作為地址/數(shù)據(jù)線用。①輸出時(shí)CPU發(fā)出控制電平“0”封鎖“與”門,將輸出上拉場(chǎng)效應(yīng)管T1截止,同時(shí)使多路開(kāi)關(guān)MUX把鎖存器與輸出驅(qū)動(dòng)場(chǎng)效應(yīng)管T2柵極接通。故內(nèi)部總線與P0口同相。由于輸出驅(qū)動(dòng)級(jí)是漏極開(kāi)路電路,若驅(qū)動(dòng)NMOS或其它拉流負(fù)載時(shí),需要外接上拉電阻。P0的輸出級(jí)可驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。②輸入時(shí)----分讀引腳或讀鎖存器讀引腳:由傳送指令(MOV)實(shí)現(xiàn);下面一個(gè)緩沖器用于讀端口引腳數(shù)據(jù),當(dāng)執(zhí)行一條由端口輸入的指令時(shí),讀脈沖把該三態(tài)緩沖器打開(kāi),這樣端口引腳上的數(shù)據(jù)經(jīng)過(guò)緩沖器讀入到內(nèi)部總線。讀鎖存器:有些指令如:ANLP0,A稱為“讀-改-寫”指令,需要讀鎖存器。上面一個(gè)緩沖器用于讀端口鎖存器數(shù)據(jù)。**原因:如果此時(shí)該端口的負(fù)載恰是一個(gè)晶體管基極,且原端口輸出值為1,那么導(dǎo)通了的PN結(jié)會(huì)把端口引腳高電平拉低;若此時(shí)直接讀端口引腳信號(hào),將會(huì)把原輸出的“1”電平誤讀為“0”電平。現(xiàn)采用讀輸出鎖存器代替讀引腳,圖中,上面的三態(tài)緩沖器就為讀鎖存器Q端信號(hào)而設(shè),讀輸出鎖存器可避免上述可能發(fā)生的錯(cuò)誤。**P0口必須接上拉電阻;在讀信號(hào)之前數(shù)據(jù)之前,先要向相應(yīng)的鎖存器做寫1操作的I/O口稱為準(zhǔn)雙向口;三態(tài)輸入緩沖器的作用:(ANLP0,A)準(zhǔn)雙向口:從圖中可以看出,在讀入端口數(shù)據(jù)時(shí),由于輸出驅(qū)動(dòng)FET并接在引腳上,如果T2導(dǎo)通,就會(huì)將輸入的高電平拉成低電平,產(chǎn)生誤讀。所以在端口進(jìn)行輸入操作前,應(yīng)先向端口鎖存器寫“1”,使T2截止,引腳處于懸浮狀態(tài),變?yōu)楦咦杩馆斎。這就是所謂的準(zhǔn)雙向口。在系統(tǒng)擴(kuò)展時(shí),P0端口作為地址/數(shù)據(jù)總線使用時(shí),分為:P0引腳輸出地址/數(shù)據(jù)信息。CPU發(fā)出控制電平“1”,打開(kāi)“與”門,又使多路開(kāi)關(guān)MUX把CPU的地址/數(shù)據(jù)總線與T2柵極反相接通,輸出地址或數(shù)據(jù)。由圖上可以看出,上下兩個(gè)FET處于反相,構(gòu)成了推拉式的輸出電路,其負(fù)載能力大大增強(qiáng)。P0引腳輸出地址/輸入數(shù)據(jù)輸入信號(hào)是從引腳通過(guò)輸入緩沖器進(jìn)入內(nèi)部總線。此時(shí),CPU自動(dòng)使MUX向下,并向P0口寫“1”,“讀引腳”控制信號(hào)有效,下面的緩沖器打開(kāi),外部數(shù)據(jù)讀入內(nèi)部總線。1.P2口作為普通I/O口CPU發(fā)出控制電平“0”,使多路開(kāi)關(guān)MUX倒向鎖存器輸出Q端,構(gòu)成一個(gè)準(zhǔn)雙向口。其功能與P1相同。2.P2口作為地址總線在系統(tǒng)擴(kuò)展片外程序存儲(chǔ)器擴(kuò)展數(shù)據(jù)存儲(chǔ)器且容量超過(guò)256B(用MOVX@DPTR指令)時(shí),CPU發(fā)出控制電平“1”,使多路開(kāi)關(guān)MUX倒內(nèi)部地址線。此時(shí),P2輸出高8位地址。P1口、P3口的內(nèi)部結(jié)構(gòu)①P1口的一位的結(jié)構(gòu)它由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸入緩沖器和輸出驅(qū)動(dòng)電路組成----準(zhǔn)雙向口。一、作為通用I/O口與P1口類似----準(zhǔn)雙向口(W=1)二、二、P3第二功能(Q=1)此時(shí)引腳部分輸入(Q=1、W=1),部分輸出(Q=1、W輸出。綜上所述:當(dāng)P0作為I/O口使用時(shí),特別是作為輸出時(shí),輸出級(jí)屬于開(kāi)漏電路,必須外接上拉電阻才會(huì)有高電平輸出;如果作為輸入,必須先向相應(yīng)的鎖存器寫“1”,才不會(huì)影響輸入電平。當(dāng)CPU內(nèi)部控制信號(hào)為“1”時(shí),P0口作為地址/數(shù)據(jù)總線使用,這時(shí),P0口就無(wú)法再作為I/O口使用了。P1、P2和P3口為準(zhǔn)雙向口,在內(nèi)部差別不大,但使用功能有所不同。P1口是用戶專用8位準(zhǔn)雙向I/O口,具有通用輸入/輸出功能,每一位都能獨(dú)立地設(shè)定為輸入或輸出。當(dāng)有輸出方式變?yōu)檩斎敕绞綍r(shí),該位的鎖存器必須寫入“1”,然后才能進(jìn)入輸入操作。P2口是8位準(zhǔn)雙向I/O口。外接I/O設(shè)備時(shí),可作為擴(kuò)展系統(tǒng)的地址總線,輸出高8位地址,與P0口一起組成16位地址總線。對(duì)于8031而言,P2口一般只作為地址總線使用,而不作為I/O線直接與外部設(shè)備相連P3第二功能各引腳功能定義:P3.0:RXD串行口輸入P3.1:TXD串行口輸出P3.2:INT0外部中斷0輸入P3.3:INT1外部中斷1輸入P3.4:T0定時(shí)器0外部輸入P3.5:T1定時(shí)器1外部輸入P3.6:WR外部寫控制P3.7:RD外部讀控制寄存器
中斷系統(tǒng)
引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請(qǐng)求。CPU暫時(shí)中斷原來(lái)的事務(wù)A,轉(zhuǎn)去處理事件B。對(duì)事件B處理完畢后,再回到原來(lái)被中斷的地方(即斷點(diǎn)),稱為中斷返回。實(shí)現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。80C51的中斷系統(tǒng)有5個(gè)中斷源(8052有6個(gè)),2個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷嵌套。
1、(P3.2)可由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.2引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE0(TCON.1)置1,向CPU申請(qǐng)中斷。2、(P3.3)可由IT1(TCON.2)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.3引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE1(TCON.3)置1,向CPU申請(qǐng)中斷。3、TF0(TCON.5),片內(nèi)定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T0發(fā)生溢出時(shí),置位TF0,并向CPU申請(qǐng)中斷。
4、TF1(TCON.7),片內(nèi)定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,并向CPU申請(qǐng)中斷。
5、RI(SCON.0)或TI(SCON.1),串行口中斷請(qǐng)求標(biāo)志。當(dāng)串行口接收完一幀串行數(shù)據(jù)時(shí)置位RI或當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時(shí)置位TI,向CPU申請(qǐng)中斷。二、中斷請(qǐng)求標(biāo)志1、TCON的中斷標(biāo)志
IT0(TCON.0),外部中斷0觸發(fā)方式控制位。當(dāng)IT0=0時(shí),為電平觸發(fā)方式。
當(dāng)IT0=1時(shí),為邊沿觸發(fā)方式(下降沿有效)。IE0(TCON.1),外部中斷0中斷請(qǐng)求標(biāo)志位。IT1(TCON.2),外部中斷1觸發(fā)方式控制位。IE1(TCON.3),外部中斷1中斷請(qǐng)求標(biāo)志位。
TF0(TCON.5),定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志位。TF1(TCON.7),定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志位。2、SCON的中斷標(biāo)志
RI(SCON.0),串行口接收中斷標(biāo)志位。當(dāng)允許串行口接收數(shù)據(jù)時(shí),每接收完一個(gè)串行幀,由硬件置位RI。注意,RI必須由軟件清除。
TI(SCON.1),串行口發(fā)送中斷標(biāo)志位。當(dāng)CPU將一個(gè)發(fā)送數(shù)據(jù)寫入串行口發(fā)送緩沖器時(shí),就啟動(dòng)了發(fā)送過(guò)程。每發(fā)送完一個(gè)串行幀,由硬件置位TI。CPU響應(yīng)中斷時(shí),不能自動(dòng)清除TI,TI必須由軟件清除。
380C51中斷的控制一、中斷允許控制
CPU對(duì)中斷系統(tǒng)所有中斷以及某個(gè)中斷源的開(kāi)放和屏蔽是由中斷允許寄存器IE控制的。EX0(IE.0),外部中斷0允許位;
ET0(IE.1),定時(shí)/計(jì)數(shù)器T0中斷允許位;EX1(IE.2),外部中斷0允許位;ET1(IE.3),定時(shí)/計(jì)數(shù)器T1中斷允許位;ES(IE.4),串行口中斷允許位;
EA(IE.7),CPU中斷允許(總允許)位。二、中斷優(yōu)先級(jí)控制
80C51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套。每個(gè)中斷源的中斷優(yōu)先級(jí)都是由中斷優(yōu)先級(jí)寄存器IP中的相應(yīng)位的狀態(tài)來(lái)規(guī)定的。PX0(IP.0),外部中斷0優(yōu)先級(jí)設(shè)定位;PT0(IP.1),定時(shí)/計(jì)數(shù)器T0優(yōu)先級(jí)設(shè)定位;PX1(IP.2),外部中斷0優(yōu)先級(jí)設(shè)定位;PT1(IP.3),定時(shí)/計(jì)數(shù)器T1優(yōu)先級(jí)設(shè)定位;PS(IP.4),串行口優(yōu)先級(jí)設(shè)定位;
PT2(IP.5),定時(shí)/計(jì)數(shù)器T2優(yōu)先級(jí)設(shè)定位。
而80C52單片機(jī)有四個(gè)中斷優(yōu)先級(jí),即可實(shí)現(xiàn)四級(jí)中斷服務(wù)嵌套。每個(gè)中斷源的中斷優(yōu)先級(jí)由中斷優(yōu)先級(jí)寄存器IP和IPH中的相應(yīng)位的狀態(tài)來(lái)規(guī)定的。PX0(IPH.0),外部中斷0優(yōu)先級(jí)設(shè)定位;PT0(IPH.1),定時(shí)/計(jì)數(shù)器T0優(yōu)先級(jí)設(shè)定位;PX1(IPH.2),外部中斷0優(yōu)先級(jí)設(shè)定位;PT1(IPH.3),定時(shí)/計(jì)數(shù)器T1優(yōu)先級(jí)設(shè)定位;PS(IPH.4),串行口優(yōu)先級(jí)設(shè)定位;
PT2(IPH.5),定時(shí)/計(jì)數(shù)器T2優(yōu)先級(jí)設(shè)定位。
同一優(yōu)先級(jí)中的中斷申請(qǐng)不止一個(gè)時(shí),則有中斷優(yōu)先權(quán)排隊(duì)問(wèn)題。同一優(yōu)先級(jí)的中斷優(yōu)先權(quán)排隊(duì),由中斷系統(tǒng)硬件確定的自然優(yōu)先級(jí)形成,其排列如所示:80C51單片機(jī)的中斷優(yōu)先級(jí)有三條原則:
CPU同時(shí)接收到幾個(gè)中斷時(shí),首先響應(yīng)優(yōu)先級(jí)別最高的中斷請(qǐng)求。正在進(jìn)行的中斷過(guò)程不能被新的同級(jí)或低優(yōu)先級(jí)的中斷請(qǐng)求所中斷。正在進(jìn)行的低優(yōu)先級(jí)中斷服務(wù),能被高優(yōu)先級(jí)中斷請(qǐng)求所中斷。為了實(shí)現(xiàn)上述后兩條原則,中斷系統(tǒng)內(nèi)部設(shè)有兩個(gè)用戶不能尋址的優(yōu)先級(jí)狀態(tài)觸發(fā)器。其中一個(gè)置1,表示正在響應(yīng)高優(yōu)先級(jí)的中斷,它將阻斷后來(lái)所有的中斷請(qǐng)求;另一個(gè)置1,表示正在響應(yīng)低優(yōu)先級(jí)中斷,它將阻斷后來(lái)所有的低優(yōu)先級(jí)中斷請(qǐng)求。中斷響應(yīng)條件中斷源有中斷請(qǐng)求;此中斷源的中斷允許位為1;CPU開(kāi)中斷(即EA=1)。
以上三條同時(shí)滿足時(shí),CPU才有可能響應(yīng)中斷。80C51的定時(shí)/計(jì)數(shù)器
實(shí)現(xiàn)定時(shí)功能,比較方便的辦法是利用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器。也可以采用下面三種方法:軟件定時(shí):軟件定時(shí)不占用硬件資源,但占用了CPU時(shí)間,降低了CPU的利用率。
采用時(shí)基電路定時(shí):例如采用555電路,外接必要的元器件(電阻和電容),即可構(gòu)成硬件定時(shí)電路。但在硬件連接好以后,定時(shí)值與定時(shí)范圍不能由軟件進(jìn)行控制和修改,即不可編程。
采用可編程芯片定時(shí):這種定時(shí)芯片的定時(shí)值及定時(shí)范圍很容易用軟件來(lái)確定和修改,此種芯片定時(shí)功能強(qiáng),使用靈活。在單片機(jī)的定時(shí)/計(jì)數(shù)器不夠用時(shí),可以考慮進(jìn)行擴(kuò)展。
擴(kuò)展閱讀:51單片機(jī)初學(xué)知識(shí)點(diǎn)總結(jié)
51單片機(jī)初學(xué)知識(shí)點(diǎn)總結(jié)
經(jīng)過(guò)這半個(gè)月的學(xué)習(xí),我對(duì)于單片機(jī)的定時(shí)器、對(duì)I/O口的隨意操作、輸入檢測(cè)、中斷(定時(shí)器的中斷、單片機(jī)的外部中斷)、串口通信等幾大學(xué)習(xí)模塊有了一定了解和掌握。
1.軟件。我主要是在keiluvision3實(shí)現(xiàn)用C語(yǔ)言進(jìn)行編程和調(diào)試。使用keil時(shí),新建或者打開(kāi)已有文件,按步驟一步步來(lái),漏掉哪一步都會(huì)影響最后程序是否能順利寫入單片機(jī)中。其中應(yīng)注意保存C文檔、添加文件到工程中和建立hex文檔這幾個(gè)關(guān)鍵步驟。
2.發(fā)光二極管和數(shù)碼管的顯示。發(fā)光二極管的靜態(tài)顯示是學(xué)習(xí)單片機(jī)的入門路標(biāo)。分析相關(guān)模塊的電路圖,弄清楚引腳連接情況,根據(jù)電路圖直接控制LED引腳電位的高低就能實(shí)現(xiàn)對(duì)相應(yīng)LED亮滅的控制。了解后完成走馬燈(流水線)或更多其他規(guī)則的LED顯示。數(shù)碼管的顯示較LED稍微復(fù)雜一點(diǎn)點(diǎn),它分位選和段選,位選控制整個(gè)數(shù)碼管的亮滅,段選控制各數(shù)碼管以何種形式亮或滅。數(shù)碼管的顯示分三步:(1).全部數(shù)碼管顯示一樣的字符;(2).選定的數(shù)碼管以規(guī)定的形式亮;(3).數(shù)碼管的動(dòng)態(tài)顯示。其中利用定時(shí)器或者延時(shí)程序控制數(shù)碼管動(dòng)態(tài)顯示的頻率,以調(diào)節(jié)其顯示亮度和視覺(jué)穩(wěn)定度。
用延時(shí)函數(shù)完成動(dòng)態(tài)掃描:while(1){D1=nn/100;D2=nn%100/10;D3=nn%10;P1=0x01;P0=tab[D1];delay(10);P1=0x02;P0=tab[D2];delay(10);P1=0x04;P0=tab[D3];delay(10);}
延時(shí)子程序:voiddelay(x)//延時(shí)1ms子程序
{unsignedchary;while(x--){for(y=110;y>0;y--);}
}3.定時(shí)/計(jì)數(shù)器。編號(hào)中斷源0外部中斷0(INT0)中斷標(biāo)志位終端服務(wù)程序入口優(yōu)先級(jí)IE00003H最高1234定時(shí)/計(jì)數(shù)器0(T0)TF0外部中斷1(INT1)串口IE1RI或TI定時(shí)/計(jì)數(shù)器1(T1)TF1000BH0013H001BH0023H次之次之次之最低關(guān)于定時(shí)/計(jì)數(shù)器的兩個(gè)特殊功能寄存器TMOD用于T1GATETCON用于定時(shí)/計(jì)數(shù)器TF1TR1TF0TR0IE1說(shuō)明13位T/C16位T/C8位自動(dòng)重裝T/CT0分成兩個(gè)獨(dú)立的8位T/C,T1停止M1M0:工作方式設(shè)置位M1M0工作方式001101010123用于中斷IT1IE0IT0C/TM1M0GATE用于T0C/TM1M0GATE:門控位。GATE=0,用軟件使TR0或TR1為1,就能啟動(dòng)定時(shí)/計(jì)數(shù)器;GATE=1,用軟件使TR0或TR1為1,同事外部中斷引腳也為高,啟動(dòng)。我們一般置GATE=0。C/T=0,位定時(shí)器;C/T=1,位計(jì)數(shù)器。
對(duì)于定時(shí)時(shí)間的計(jì)算:t計(jì)數(shù)值N機(jī)器周期TN121focs或:要定時(shí)時(shí)間t=(65536-x)*(12/晶振頻率)
定時(shí)/計(jì)數(shù)器初始化步驟:
(1)根據(jù)上面的信息,對(duì)TMOD賦初值,確定T0、T1的工作方式。(2)計(jì)算初值,將其寫入TH0、TL0或TH1、TL1。(3)為中斷方式時(shí),對(duì)IE賦值,開(kāi)放中斷。(4)使TR0或TR1置高,啟動(dòng)定時(shí)/計(jì)數(shù)器。例:
TMOD=0x01;//T0處于工作方式1,為十六位定時(shí)/計(jì)數(shù)器TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;
TR0=1;//T0初始化完畢定時(shí)子程序:
voidtimer0()interrupt1//定時(shí)子程序{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==10)
{}
aa=0;
}4.鍵盤。單片機(jī)鍵盤分獨(dú)立鍵盤和矩陣鍵盤兩類,矩陣鍵盤涉及鍵盤掃描程序。而與鍵盤按下有關(guān)的程序就要注意到消除抖動(dòng)和松手檢測(cè)兩個(gè)重要的細(xì)節(jié)。松手檢測(cè)原理是,當(dāng)鍵按下時(shí),key2為低,!key2=1,此時(shí)程序一直在while語(yǔ)句里面循環(huán),無(wú)法跳出來(lái),一旦松手,key2為高,程序即可跳出while循環(huán),執(zhí)行下面接下來(lái)的語(yǔ)句。
if(key2==0)
{delay(5);//延時(shí)5msif(key2==0)//確定key2鍵的確按下,,消抖{while(!key2);//松手檢測(cè)}}
5.串口通信。串行通信的傳輸速率用波特率表示。波特率定義為:每秒發(fā)送二進(jìn)制數(shù)碼的位數(shù),單位為“bps”。波特率的計(jì)算公式:
方式0的波特率=12SMOD方式1的波特率=(2方式2的波特率=(2SMODfosc)(T1溢出率)32)f64osc)(T1溢出率)32SMOD2方式3的波特率=(其中,T1溢出率=fosc12256-TH17698H。
串行口控制寄存器SCONSCON
其中SM0與SM1為串行口工作方式選擇位SM0SM1工作方式功能0011010101238位同步移位方式波特率543210(98H)RISM0SM1SM2RENTB8RB8TIfosc1210位異步收發(fā)器(UART)可變11位異步收發(fā)器(UART)fosc32或fosc6412位異步收發(fā)器(UART)可變
(1)51單片機(jī)串行口工作方式0實(shí)質(zhì)是并行的工作方式,為同步的移位輸出和輸入,但要實(shí)現(xiàn)工作方式0必須要借助外接移位寄存芯片,實(shí)際應(yīng)用中常用作并行I/O口得擴(kuò)展。它的波特率固定,且數(shù)據(jù)傳送是以8位數(shù)為一幀,沒(méi)有起始和停止位。。
(2)我主要研究學(xué)習(xí)了串行口工作方式1,它的數(shù)據(jù)格式是:一個(gè)起始位,8個(gè)數(shù)據(jù)位和一個(gè)停止位。設(shè)fosc=11.0592MHz,波特率為9600,則根據(jù)上面的公式,SMOD=0時(shí),TH1=TL1=0xfd;SMOD=1時(shí),TH1=TL1=0xfa。
(3)工作方式2和3的幀格式一樣,與工作方式1的類似,只是在原基礎(chǔ)上多加了一位內(nèi)容由用戶決定的數(shù)據(jù)位。工作方式2的波特率與PCON個(gè)SMOD位有關(guān)。SMOD=1時(shí),波特率為
fosc32,SMOD=0時(shí),波特率為
fosc64。
電源控制寄存器PCON(它不能位尋址)PCON797H6543210SMODSMOD為波特率倍增位。SMOD=1時(shí),波特率增加一倍;復(fù)位時(shí),SMOD=0。
REN是允許接收控制位:REN=1時(shí)允許接收數(shù)據(jù);REN=0時(shí)禁止接收數(shù)據(jù)。
TI是發(fā)送中斷標(biāo)志位:當(dāng)發(fā)送完一幀數(shù)據(jù)后,該位由單片機(jī)自動(dòng)置1,向CPU發(fā)送中斷請(qǐng)求信號(hào)。在中斷服務(wù)程序中,必須用軟件將其清0.
RI是接收中斷標(biāo)志位:與TI類似,接收完一幀后自動(dòng)被置1,需由軟件置0.6.液晶顯示。常見(jiàn)的單片液晶顯示屏分16引腳和20引腳兩種,我使用的是16引腳的YJD1602A-2。安裝LCD時(shí)按如下三步走:(1)關(guān)閉開(kāi)發(fā)板電源。(2)下載一個(gè)關(guān)閉數(shù)碼管個(gè)流水燈的程序進(jìn)單片機(jī)。(3)順時(shí)針旋轉(zhuǎn)相應(yīng)電位器以調(diào)節(jié)LCD的對(duì)比度,知道看到5*7點(diǎn)陣。功能讀狀態(tài)讀數(shù)據(jù)寫數(shù)據(jù)輸入RS=L,RE=H,E=HRS=H,RW=H,E=HRS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖輸出D0~D7=狀態(tài)字無(wú)D0~D7=數(shù)據(jù)無(wú)寫指令RS=L,RW=L,D0~D7=指令碼,E=高脈沖這四種功能里面,讀狀態(tài)與讀數(shù)據(jù)實(shí)用性不大,我們學(xué)習(xí)單片機(jī)時(shí)主要聯(lián)系寫指令和寫數(shù)據(jù),所以我們對(duì)RW置高,給E高脈沖,5引腳直接接地。
關(guān)于數(shù)據(jù)指針:顯示模式:0x38控制信號(hào)RS0控制位DLR/W0指令代碼D70D60D51D4D3D2FD10說(shuō)明D00DLN具體設(shè)置表為:控制信號(hào)功能DL=0DL=1NFN=0N=1F=0接口總線為4位長(zhǎng)度(僅D7~D4有效),8位數(shù)據(jù)與指令代碼按先高后低位的方向分兩次傳輸顯示1行字符行顯示2行字符行5*7字符體LCD與單片機(jī)接口形式。(數(shù)據(jù)的傳輸方式)接口總線為8位長(zhǎng)度(D7~D0有效)F=15*10字符體顯示開(kāi)關(guān)及光標(biāo):00001DCB
D1開(kāi)顯示0關(guān)顯示C顯示光標(biāo)不顯示光標(biāo)B光標(biāo)閃爍光標(biāo)不閃爍
00001NS10當(dāng)讀/寫一個(gè)字節(jié)后地址指針減一,且光標(biāo)減一N當(dāng)讀/寫一個(gè)字節(jié)后地址指針加一,且光標(biāo)加一S當(dāng)寫一個(gè)字符,(N=1)整屏左移,當(dāng)寫一個(gè)字符,整屏顯示不(N=1)整屏左移移動(dòng)清屏:指令代碼0x01。執(zhí)行此指令,HD44780將DDRAM的數(shù)據(jù)全部寫入“空白”
的代碼,清除所顯示的內(nèi)容,同事光標(biāo)移到左上角。
光標(biāo)歸位:指令代碼0x02或0x03。AC(地址計(jì)數(shù)器)的值被清“0”,但是DDRAM(顯示數(shù)據(jù)存儲(chǔ)器)的逐句不變,光標(biāo)移到左上角。
移動(dòng)光標(biāo):
控制信號(hào)0
其中S/C和R/L的取值控制光標(biāo)或字符的左右移動(dòng):控制位S/C0011寫指令函數(shù):
voidwrite_com(ucharcom){
rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}
寫數(shù)據(jù)函數(shù):
voidwrite_date(uchardate){
R/L01010x100x140x180x1c指令代碼說(shuō)明光標(biāo)左移光標(biāo)右移字符左移字符右移0000指令代碼D2D1D01S/CR/L------RSR/WD7D6D5D4Drs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}
7.IIC總線。
IIC總線是由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。IIC總線在數(shù)據(jù)傳送過(guò)程中有四種類型信號(hào),他們分別是:起始信號(hào)、終止信號(hào)、應(yīng)答信號(hào)和非應(yīng)答信號(hào)。
起始信號(hào):SCL為高時(shí),SDA有一個(gè)下降跳變。起始信號(hào)由主機(jī)產(chǎn)生。voidstart()//起始信號(hào){
sda=1;
delay();//5us就夠了,所以這里只需一個(gè)指令周期scl=1;delay();sda=0;delay();}
終止信號(hào):SCL為高時(shí),SDA有一個(gè)上升跳變。終止信號(hào)也只能由主機(jī)產(chǎn)生。voidstop()//終止信號(hào){
sda=0;delay();scl=1;delay();sda=1;delay();}
應(yīng)答信號(hào):IIC總線傳送時(shí)每字節(jié)為8位,從機(jī)在接收到一個(gè)字節(jié)的數(shù)據(jù)后,在第9位以低電平作為應(yīng)答信號(hào),,同時(shí)要求主機(jī)在第9個(gè)時(shí)鐘脈沖位上釋放SDA線,以便從機(jī)發(fā)出應(yīng)答信號(hào),將SDA拉低,表示接收數(shù)據(jù)的應(yīng)答
voidrespons()//應(yīng)答信號(hào){
sda=0;delay();scl=1;delay();scl=0;delay();}非應(yīng)答信號(hào):主機(jī)在第9位接收到非應(yīng)答信號(hào),則表示停止數(shù)據(jù)的發(fā)送或接收。
voiddisrespons()//非應(yīng)答信號(hào){
sda=1;delay();scl=1;delay();scl=0;delay();}移位操作:
左移:最低位補(bǔ)0,最高位移入PSW的CY位右移:最高位補(bǔ)0,最低位移除
器件地址:高四位固定,最低位決定讀/寫,另外A0~A2位與從機(jī)和總線的接法有關(guān)。
1010A2A1A0R/W=0,寫R/E=1,讀主機(jī)進(jìn)行寫操作時(shí),首先由主機(jī)發(fā)送起始信號(hào),接著是高四位固定為1010而最低位位0的寫器件地址,從機(jī)發(fā)送應(yīng)答信號(hào)后,主機(jī)發(fā)送寫數(shù)據(jù)地址,從機(jī)再次應(yīng)答之后主機(jī)就可以發(fā)送數(shù)據(jù)了,接著從機(jī)發(fā)送應(yīng)答信號(hào)或者非應(yīng)答信號(hào)之后主機(jī)發(fā)送終止信號(hào),如下圖所示。
主機(jī)進(jìn)行讀操作時(shí),首先由主機(jī)發(fā)送起始信號(hào),接著是高四位固定為1010而最低位位0的寫器件地址,從機(jī)發(fā)送應(yīng)答信號(hào)后,主機(jī)發(fā)送寫數(shù)據(jù)地址,從機(jī)再次應(yīng)答之后主機(jī)再次發(fā)送起始信號(hào),接著是高四位固定為1010而最低位位1的讀器件地址,從機(jī)應(yīng)答之后就可以讀數(shù)據(jù)了,接著主機(jī)發(fā)送應(yīng)答信號(hào)或者非應(yīng)答信號(hào)之后主機(jī)發(fā)送終止信號(hào),如下圖。
心得體會(huì):
以上是我根據(jù)這半個(gè)月學(xué)習(xí)的單片機(jī)知識(shí)和編寫程序時(shí)的程序文檔筆記整理的重要知識(shí)點(diǎn)和一些經(jīng)常會(huì)用到的基本子函數(shù)。學(xué)習(xí)單片機(jī)的這半個(gè)月里,我由開(kāi)始時(shí)想一口吃成胖子的急躁心理慢慢調(diào)整為了平心靜氣,循序漸進(jìn)的學(xué)習(xí)心態(tài)。我是跟著單片機(jī)相關(guān)的學(xué)習(xí)視頻在學(xué)習(xí),而只是跟著視頻里面老師的講解聽(tīng)的話,理解的總不會(huì)那么透徹,記憶也不會(huì)很深刻,只有舉一反三的學(xué)習(xí)視頻資料里面的內(nèi)容加上自己親手進(jìn)行編程與調(diào)試后才能更好地掌握所學(xué)的知識(shí)。在進(jìn)行C語(yǔ)言編程過(guò)程中一定要認(rèn)真仔細(xì),并注意養(yǎng)成良好的變成習(xí)慣,盡量保持程序工整明了,這也方便在出現(xiàn)問(wèn)題時(shí)進(jìn)行糾錯(cuò)和改錯(cuò)。
友情提示:本文中關(guān)于《C51單片機(jī)知識(shí)總結(jié)》給出的范例僅供您參考拓展思維使用,C51單片機(jī)知識(shí)總結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。