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