![51單片機初學者學習必須用到的匯編和C語言的例子_第1頁](http://file4.renrendoc.com/view/537ecc8a89e9bffccdb0416d0d6d3fc3/537ecc8a89e9bffccdb0416d0d6d3fc31.gif)
![51單片機初學者學習必須用到的匯編和C語言的例子_第2頁](http://file4.renrendoc.com/view/537ecc8a89e9bffccdb0416d0d6d3fc3/537ecc8a89e9bffccdb0416d0d6d3fc32.gif)
![51單片機初學者學習必須用到的匯編和C語言的例子_第3頁](http://file4.renrendoc.com/view/537ecc8a89e9bffccdb0416d0d6d3fc3/537ecc8a89e9bffccdb0416d0d6d3fc33.gif)
![51單片機初學者學習必須用到的匯編和C語言的例子_第4頁](http://file4.renrendoc.com/view/537ecc8a89e9bffccdb0416d0d6d3fc3/537ecc8a89e9bffccdb0416d0d6d3fc34.gif)
![51單片機初學者學習必須用到的匯編和C語言的例子_第5頁](http://file4.renrendoc.com/view/537ecc8a89e9bffccdb0416d0d6d3fc3/537ecc8a89e9bffccdb0416d0d6d3fc35.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1閃爍燈1實驗任務如圖4.1.1所示:在P1.0端口上接一個發(fā)光二極管L1,使L1在不停地一亮滅,一亮一滅的時間間隔為0.2秒。2電路原理圖T匸4vcch-izz230jfeJjIOK111AIX111411.xrpppp尸戸F-FDOJAEjn:Pd.im口1PD./AE2PCfqmnt口nc.o/AoeFC.?jirAD-7ZE_34_|21門食;農(nóng)工壬為乩N2:mpHFFnP3LIAS1P2.O/Jk.EgumZ35Xsiw2Z二iaZJATBiSEBlC3Z3圖4.1.13系統(tǒng)板上硬件連線把“單片機系統(tǒng)”區(qū)域中的P1.0端口用導線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上。4程
2、序設計內(nèi)容(1)延時程序的設計方法作為單片機的指令的執(zhí)行的時間是很短,數(shù)量大微秒級,因此,我們要求的閃爍時間間隔為0.2秒,相對于微秒來說,相差太大,所以我們在執(zhí)行某一指令時,插入延時程序,來達到我們的要求,但這樣的延時程序是如何設計呢?下面具體介紹其原理:如圖4.1.1所示的石英晶體為12MHz,因此,1個機器周期為1微秒機器周期微秒MOVR6,#202個機器周期2D1:MOVR7,#2482個機器周期22+2X248=49820XDJNZR7,$2個機器周期2X24849810002DJNZR6,D12個機器周期2X20=40因此,上面的延時程序時間為10.002ms。由以上可知,當R6=
3、10、R7=248時,延時5ms,R6=20、R7=248時,延時10ms,以此為基本的計時單位。如本實驗要求0.2秒=200ms,10msXR5=200ms,則R5=20,延時子程序如下:DELAY:MOVR5,#20D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET2)輸出控制如圖1所示,當P1.0端口輸出高電平,即P1.0=1時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時發(fā)光二極管L1熄滅;當P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1
4、.0端口輸出低電平。5程序框圖圖4.1.26匯編源程序ORG0START:CLRP1.0LCALLDELAYSETBP1.0LCALLDELAYLJMPSTARTDELAY:MOVR5,#20;延時子程序,延時0.2秒D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND7.C語言源程序#includesbitL1二P0;voiddelay02s(void)/延時0.2秒子程序unsignedchari,j,k;for(i=20;i0;i-)for(j=20;j0;j-)for(k=248;k0;k-);voidmain(void)w
5、hile(1)L1=0;delay02s();L1=1;delay02s();2模擬開關燈1實驗任務如圖4.2.1所示,監(jiān)視開關K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機P1.0端口上)顯示開關狀態(tài),如果開關合上,L1亮,開關打開,L1熄滅。2電路原理圖窩J.U1AT5?S5sagGNDXIT2!=9瓦2dd応bidsdId1r*4Xi.:;.I-.I-IIK11)2)圖4.2.13系統(tǒng)板上硬件連線把“單片機系統(tǒng)”區(qū)域中的P1.0端口用導線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1端口上;把“單片機系統(tǒng)”區(qū)域中的P3.0端口用導線連接到“四路撥動開關”區(qū)域中的K1端口上;4程序
6、設計內(nèi)容1)開關狀態(tài)的檢測過程單片機對開關狀態(tài)的檢測相對于單片機來說,是從單片機的P3.0端口輸入信號,而輸入的信號只有高電平和低電平兩種,當撥開開關K1撥上去,即輸入高電平,相當開關斷開,當撥動開關K1撥下去,即輸入低電平,相當開關閉合。單片機可以采用JBBIT,REL或者是JNBBIT,REL指令來完成對開關狀態(tài)的檢測即可。2)輸出控制如圖3所示,當P1.0端口輸出高電平,即P1.0=1時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍@時發(fā)光二極管L1熄滅;當P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P
7、1.0端口輸出低電平。5程序框圖圖4.2.26匯編源程序ORG00HSTART:JBP3.0,LIGCLRP1.0SJMPSTARTLIG:SETBP1.0SJMPSTARTEND7.C語言源程序#includesbitK1二P3飛;sbitL1二P0;voidmain(void)while(1)if(K1=0)L1=0;/燈亮elseL1=1;/燈滅3多路開關狀態(tài)指示1實驗任務如圖4.3.1所示,AT89S51單片機的P1.0P1.3接四個發(fā)光二極管L1L4,P1.4P1.7接了四個開關K1K4,編程將開關的狀態(tài)反映到發(fā)光二極管上。(開關閉合,對應的燈亮,開關斷開,對應的燈滅)。2電路原理圖
8、630闍胃EWEEtl濾寸鶴mtygomed寸口wTrfidE-rrvY諾d-CV71laCLDdIdTCLL2L3圖4.3.13系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P1.0P1.3用導線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1L4端口上;(2.把“單片機系統(tǒng)”區(qū)域中的P1.4P1.7用導線連接到“四路撥動開關”區(qū)域中的K1K4端口上;4.程序設計內(nèi)容(1.開關狀態(tài)檢測對于開關狀態(tài)檢測,相對單片機來說,是輸入關系,我們可輪流檢測每個開關狀態(tài),根據(jù)每個開關的狀態(tài)讓相應的發(fā)光二極管指示,可以采用JBP1.X,REL或JNBP1.X,REL指令來完成;也可以一次性檢測四路開關狀態(tài),然后
9、讓其指示,可以采用MOVA,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來指示。2輸出控制根據(jù)開關的狀態(tài),由發(fā)光二極管L1L4來指示,我們可以用SETBP1.X和CLRP1.X指令來完成,也可以采用MOVP1,#1111XXXXB方法一次指示。5程序框圖讀P1口數(shù)據(jù)到ACC中ACC內(nèi)容右移4次ACC內(nèi)容與F0H相或ACC內(nèi)容送入P1口圖4.3.26方法一(匯編源程序)ORG00HSTART:MOVA,P1ANLA,#0F0HRRARRARRARRAORlA,#0F0HMOVP1,ASJMPSTARTEND7.方法一(C語言源程序)#includeunsignedchartemp;v
10、oidmain(void)while(1)temp=P14;temp=temp|0 xf0;P1=temp;8方法二(匯編源程序)ORG00HSTART:JBP1.4,NEXT1CLRP1.0SJMPNEX1NEXT1:SETBP1.0NEX1:JBP1.5,NEXT2CLRP1.1SJMPNEX2NEXT2:SETBP1.1NEX2:JBP1.6,NEXT3CLRP1.2SJMPNEX3NEXT3:SETBP1.2NEX3:JBP1.7,NEXT4CLRP1.3SJMPNEX4NEXT4:SETBP1.3NEX4:SJMPSTARTEND9.方法二(C語言源程序)#includevoidma
11、in(void)while(1)if(P1_4=0)P1_0=0;elseP1_0=1;if(P1_5=0)P1_1=0;elseP1_1=1;if(P1_6=0)P1_2=0;elseP1_2=1;if(P1_7=0)P1_3=0;elseP1_3=1;3.4X4矩陣式鍵盤識別技術1實驗任務如圖4.14.2所示,用AT89S51的并行口P1接4X4矩陣鍵盤,以P1.0P1.3作輸入線,以P1.4P1.7作輸出線;在數(shù)碼管上顯示每個按鍵的“0F”序號。對應的按鍵的序號排列如圖4.14.1所示2硬件電路原理圖圖4.14.1*Li2J:r021Or.rn匚1-JtmKamfEMWEOSEf-11I
12、Sass23i1J2J:!-!23aJE2fijy-PTkl疥4誦ISUIBIEIS-33+51?aEHZifiJLr-TThVfT-VBPirate圖4.14.23系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)“區(qū)域中的P3.0P3.7端口用8芯排線連接到“4X4行列式鍵盤”區(qū)域中的C1C4R1R4端口上;(2.把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,P0.7/AD7對應著h。4程序設計內(nèi)容(1.4X4矩陣鍵盤識別處理(2每個按鍵有它的行值和列值,行值和列值的
13、組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。P3=FFHnP3.0=05.程序框圖P3=FFH,P3J=0有鍵按下嗎?有鍵按下嗎?延時10ms真得有德按下嗎?得有鍵按下嗎根據(jù)當前伏態(tài)識別搜鍵
14、根據(jù)當前狀態(tài)識別援鍵延時10msP3=FFHnP3.1=0有鍵按下嗎?有鍵按下嗎?P3=FFHnP3.3=0延時10ms真得有鍵搜下嗎?根據(jù)當前狀態(tài)識別按鍵根據(jù)當前狀態(tài)識別按鍵延時lOms圖4.14.36匯編源程序KEYBUFEQU30HORG00HSTART:MOVKEYBUF,#2WAIT:MOVP3,#0FFHCLRP3.4MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY1LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY1MOVA,P3ANLA,#0FHCJNEA,#0EH,NK1MOVKEYBUF,#0LJMPDK1NK1:CJ
15、NEA,#0DH,NK2MOVKEYBUF,#1LJMPDK1NK2:CJNEA,#0BH,NK3MOVKEYBUF,#2LJMPDK1NK3:CJNEA,#07H,NK4MOVKEYBUF,#3LJMPDK1NK4:NOPDK1:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ADK1A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK1ANOKEY1:MOVP3,#0FFHCLRP3.5MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY2LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY
16、2MOVA,P3ANLA,#0FHCJNEA,#0EH,NK5MOVKEYBUF,#4LJMPDK2NK5:CJNEA,#0DH,NK6MOVKEYBUF,#5LJMPDK2NK6:CJNEA,#0BH,NK7MOVKEYBUF,#6LJMPDK2NK7:CJNEA,#07H,NK8MOVKEYBUF,#7LJMPDK2NK8:NOPDK2:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ADK2A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK2ANOKEY2:MOVP3,#0FFHCLRP3.6MOVA,P3ANLA,#0FHXRLA,#
17、0FHJZNOKEY3LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY3MOVA,P3ANLA,#0FHCJNEA,#0EH,NK9MOVKEYBUF,#8LJMPDK3NK9:CJNEA,#0DH,NK10MOVKEYBUF,#9LJMPDK3NK10:CJNEA,#0BH,NK11MOVKEYBUF,#10LJMPDK3NK11:CJNEA,#07H,NK12MOVKEYBUF,#11LJMPDK3NK12:NOPDK3:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ADK3A:MOVA,P3ANLA,#0F
18、HXRLA,#0FHJNZDK3ANOKEY3:MOVP3,#0FFHCLRP3.7MOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY4LCALLDELY10MSMOVA,P3ANLA,#0FHXRLA,#0FHJZNOKEY4MOVA,P3ANLA,#0FHCJNEA,#0EH,NK13MOVKEYBUF,#12LJMPDK4NK13:CJNEA,#0DH,NK14MOVKEYBUF,#13LJMPDK4NK14:CJNEA,#0BH,NK15MOVKEYBUF,#14LJMPDK4NK15:CJNEA,#07H,NK16MOVKEYBUF,#15LJMPDK4NK16:NOP
19、DK4:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,ADK4A:MOVA,P3ANLA,#0FHXRLA,#0FHJNZDK4ANOKEY4:LJMPWAITDELY10MS:MOVR6,#10D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HEND7.C語言源程序#includeunsignedcharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,
20、0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;unsignedchartemp;unsignedcharkey;unsignedchari,j;voidmain(void)while(1)P3=0 xff;P3_4=0;temp=P3;temp=temp&0 x0f;if(temp!=0 x0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp&0 x0f;if(temp!=0 x0f)temp=P3;temp=temp&0 x0f;switch(temp)case0 x
21、0e:key=7;break;case0 x0d:key=8;break;case0 x0b:key=9;break;case0 x07:key=10;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp&0 x0f;while(temp!=0 x0f)temp=P3;temp=temp&0 x0f;P3=0 xff;P3_5=0;temp=P3;temp=temp&0 x0f;if(temp!=0 x0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp&0 x0f;if(temp!=0 x0f)temp
22、=P3;temp=temp&0 x0f;switch(temp)case0 x0e:key=4;break;case0 x0d:key=5;break;case0 x0b:key=6;break;case0 x07:key=11;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp&0 x0f;while(temp!=0 x0f)temp=P3;temp=temp&0 x0f;P3=0 xff;P3_6=0;temp=P3;temp=temp&0 x0f;if(temp!=0 x0f)for(i=50;i0;i-)for(j=200;j0;j-);temp
23、=P3;temp=temp&0 x0f;if(temp!=0 x0f)temp=P3;temp=temp&0 x0f;switch(temp)case0 x0e:key=1;break;case0 x0d:key=2;break;case0 x0b:key=3;break;case0 x07:key=12;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp&0 x0f;while(temp!=0 x0f)temp=P3;temp=temp&0 x0f;P3=0 xff;P3_7=0;temp=P3;temp=temp&0 x0f;if(temp!=0 x
24、0f)for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp&0 x0f;if(temp!=0 x0f)temp=P3;temp=temp&0 x0f;switch(temp)case0 x0e:key=0;break;case0 x0d:key=13;break;case0 x0b:key=14;break;case0 x07:key=15;break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp&0 x0f;while(temp!=0 x0f)temp=P3;temp=temp&0 x0f;4.定時計數(shù)器TO作定
25、時應用技術(一)1實驗任務用AT89S51單片機的定時/計數(shù)器TO產(chǎn)生一秒的定時時間,作為秒計數(shù)時間,當一秒產(chǎn)生時,秒計數(shù)加1,秒計數(shù)到60時,自動從0開始。硬件電路如下圖所示2電路原理圖衛(wèi)ilL理竺P3.2ITWT0F35SNT1P34fT0F弓304P3.7i*RDPUOTAiLjPO-l/AEdP0_2TA)2POJ/AIKPU4斗04PO-STADSP0_6/AEP0-7/A&7jftLE時&止舊P2.J5小1.3囲皿EP2.3/A.U兒勺佻】口P2.0JA8P0137P02了F陽35ro*J4pm33P06越PO?30:膽2E劉-卡皋2CP252SP24I24P23Z3P3B2S曲2
26、1P20圖4.15.13系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,P0.7/AD7對應著h。(2.把“單片機系統(tǒng)”區(qū)域中的P2.0/A8P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P2.0/A8對應著a,P2.1/A9對應著b,P2.7/A15對應著h。4.程序設計內(nèi)容AT89S51單片機的內(nèi)部16位定時/計數(shù)器是一個可編程定時/計數(shù)器,它既可以工作在13位定時方式,也可以工作在16位
27、定時方式和8位定時方式。只要通過設置特殊功能寄存器TMOD,即可完成。定時/計數(shù)器何時工作也是通過軟件來設定TCON特殊功能寄存器來完成的?,F(xiàn)在我們選擇16位定時工作方式,對于T0來說,最大定時也只有65536us,即65.536ms,無法達到我們所需要的1秒的定時,因此,我們必須通過軟件來處理這個問題,假設我們?nèi)O的最大定時為50ms,即要定時1秒需要經(jīng)過20次的50ms的定時。對于這20次我們就可以采用軟件的方法來統(tǒng)計了。因此,我們設定TM0D=00000001B,即TMOD=01H下面我們要給T0定時/計數(shù)器的TH0,TL0裝入預置初值,通過下面的公式可以計算出TH0=(2165000
28、0)/256TL0=(21650000)MOD256當T0在工作的時候,我們?nèi)绾蔚弥?0ms的定時時間已到,這回我們通過檢測TCON特殊功能寄存器中的TF0標志位,如果TF0=1表示定時時間已到。TU嗎7TMOD初胎化開始TRD直1.囲fTO5程序框圖TFO=Q圖4.15.2SeeondW井遙出魁示THETL0裝入初悄6匯編源程序(查詢法)SECONDEQU30HTCOUNTEQU31HORG00HSTART:MOVSECOND,#00HMOVTCOUNT,#00HMOVTMOD,#01HMOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256S
29、ETBTR0DISP:MOVA,SECONDMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVCA,A+DPTRMOVP2,AWAIT:JNBTF0,WAITCLRTF0MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256INCTCOUNTMOVA,TCOUNTCJNEA,#20,NEXTMOVTCOUNT,#00HINCSECONDMOVA,SECONDCJNEA,#60,NEXMOVSECOND,#00HNEX:LJMPDISPNEXT:LJMPWAITTABLE:DB3FH,0
30、6H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND7.C語言源程序(查詢法)#includeunsignedcharcodedispcode=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;unsignedcharsecond;unsignedchartcount;voidmain(void)TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;tc
31、ount=0;second=0;P0=dispcodesecond/10;P2=dispcodesecond%10;while(1)if(TF0=1)tcount+;if(tcount=20)tcount=0;second+;if(second=60)second=0;P0=dispcodesecond/10;P2=dispcodesecond%10;TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;1匯編源程序(中斷法)SECONDEQU30HTCOUNTEQU31HORG00HLJMPSTARTORG0BHLJMPINT0XSTART:MO
32、VSECOND,#00HMOVA,SECONDMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVCA,A+DPTRMOVP2,AMOVTCOUNT,#00HMOVTMOD,#01HMOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256SETBTR0SETBET0SETBEASJMP$INT0X:MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256INCTCOUNTMOVA,TCOUNTCJNEA,#20,NEXTMOVTCOUNT,#
33、00HINCSECONDMOVA,SECONDCJNEA,#60,NEXMOVSECOND,#00HNEX:MOVA,SECONDMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVCA,A+DPTRMOVP2,ANEXT:RETITABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND2.C語言源程序(中斷法)#includeunsignedcharcodedispcode=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f
34、,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;unsignedcharsecond;unsignedchartcount;voidmain(void)TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;tcount=0;second=0;P0=dispcodesecond/10;P2=dispcodesecond%10;while(1);voidt0(void)interrupt1using0tcount+;if(tcount=20)tcount=0;second
35、+;if(second=60)second=0;P0=dispcodesecond/10;P2=dispcodesecond%10;TH0=(65536-50000)/256;TL0=(65536-50000)%256;定時計數(shù)器TO作定時應用技術(二)1實驗任務用AT89S51的定時/計數(shù)器TO產(chǎn)生2秒鐘的定時,每當2秒定時到來時,更換指示燈閃爍,每個指示閃爍的頻率為0.2秒,也就是說,開始L1指示燈以0.2秒的速率閃爍,當2秒定時到來之后,L2開始以0.2秒的速率閃爍,如此循環(huán)下去。0.2秒的閃爍速率也由定時/計數(shù)器T0來完成。2電路原理圖匸噸3a5S78101112L314151617p
36、*.立血mT】F3.4rr-o26373635勺43332302?2827”2524232221PO4/A&4PO5/ADS圖4.16.13系統(tǒng)板硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P1.0P1.3用導線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1L4上4.程序設計內(nèi)容(1.由于采用中斷方式來完成,因此,對于中斷源必須它的中斷入口地址對于定時/計數(shù)器TO來說,中斷入口地址為000BH,因此在中斷入口地方加入長跳轉指令來執(zhí)行中斷服務程序。書寫匯編源程序格式如下所示:ORGOOHLJMPSTARTORG0BH;定時/計數(shù)器TO中斷入口地址LJMPINT_TOSTART:NOP;主程序開始INT_
37、TO:PUSHACC;定時/計數(shù)器TO中斷服務程序PUSHPSWPOPPSWPOPACCRETI;中斷服務程序返回END(2.定時2秒,采用16位定時50ms,共定時40次才可達到2秒,每50ms產(chǎn)生一中斷,定時的40次數(shù)在中斷服務程序中完成,同樣0.2秒的定時,需要4次才可達到0.2秒。對于中斷程序,在主程序中要對中斷開中斷。(3.由于每次2秒定時到時,L1L4要交替閃爍。采用ID來號來識別。當ID=0時,L1在閃爍,當ID=1時,L2在閃爍;當ID=2時,L3在閃爍;當ID=3時,L4在閃爍5.程序框圖T0中斷服務程序框圖主程序框圖圖4.16.26匯編源程序6匯編源程序TCOUNT2SEQ
38、U30HTCNT02SEQU31HIDEQU32HORG00HLJMPSTARTORG0BHLJMPINT_T0START:MOVTCOUNT2S,#00HMOVTCNT02S,#00HMOVID,#00HMOVTMOD,#01HMOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256SETBTR0SETBET0SETBEASJMP$INT_T0:MOVTH0,#(65536-50000)/256MOVTL0,#(65536-50000)MOD256INCTCOUNT2SMOVA,TCOUNT2SCJNEA,#40,NEXTMOVTCOUNT2S
39、,#00HINCIDMOVA,IDCJNEA,#04H,NEXTMOVID,#00HNEXT:INCTCNT02SMOVA,TCNT02SCJNEA,#4,DONEMOVTCNT02S,#00HMOVA,IDCJNEA,#00H,SID1CPLP1.0SJMPDONESID1:CJNEA,#01H,SID2CPLP1.1SJMPDONESID2:CJNEA,#02H,SID3CPLP1.2SJMPDONESID3:CJNEA,#03H,SID4CPLP1.3SID4:SJMPDONEDONE:RETIEND7.C語言源程序#includeunsignedchartcount2s;unsigne
40、dchartcount02s;unsignedcharID;voidmain(void)TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;while(1);voidt0(void)interrupt1using0tcount2s+;if(tcount2s=40)tcount2s=0;ID+;if(ID=4)ID=0;tcount02s+;if(tcount02s=4)tcount02s=0;switch(ID)case0:P1_0=P1_0;break;case1:P1_1=P1_1;break;ca
41、se2:P1_2=P1_2;break;case3:P1_3=P1_3;break;599秒馬表設計1實驗任務(1.開始時,顯示“00”,第1次按下SP1后就開始計時。(2.第2次按SP1后,計時停止。(3.第3次按SP1后,計時歸零。電路原理圖awi)PI口P1.1P1.2P1.3PL4FISP1.SPL1P3.0EDP3.I/TKLP3.3ffirraP2.2rfNTTFS.ifTQPB.5/TI卩匸P04/ADLP02/AD2F03/AD3POQADIPQJ/AD5POLADS卩p707ALEkSfcMF2.7W15P2.A14P3.5ttl3P2.WA12PSAllP2.21OP2和耳
42、9P.2.LIJA8rotFOOram空FQ?PD2P20P2J5S0、g|X.純輕普r圖4.17.1系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,,P0.7/AD7對應著h。(2.把“單片機系統(tǒng)”區(qū)域中的P2.0/A8P2.7/A15端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個ah端口上;要求:P2.0/A8對應著a,P2.1/A9對應著b,P2.7/A15對應著h。(3.把“單片機系統(tǒng)“區(qū)域中的P3.5/T1用導線連接
43、到”獨立式鍵盤“區(qū)域中的SP1端口上;程序框圖主程序框圖T0中斷服務程序框圖圖4.17.25匯編源程序TCNTAEQU30HTCNTBEQU31HSECEQU32HKEYCNTEQU33HSP1BITP3.5ORG00HLJMPSTARTORG0BHLJMPINT_T0START:MOVKEYCNT,#00HMOVSEC,#00HMOVA,SECMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVDPTR,#TABLEMOVCA,A+DPTRMOVP2,AMOVTMOD,#02HSETBET0SETBEAWT:JBSP1,WTLCALL
44、DELY10MSJBSP1,WTINCKEYCNTMOVA,KEYCNTCJNEA,#01H,KN1SETBTR0MOVTH0,#06HMOVTL0,#06HMOVTCNTA,#00HMOVTCNTB,#00HLJMPDKNKN1:CJNEA,#02H,KN2CLRTR0LJMPDKNKN2:CJNEA,#03H,DKNMOVSEC,#00HMOVA,SECMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVDPTR,#TABLEMOVCA,A+DPTRMOVP2,AMOVKEYCNT,#00HDKN:JNBSP1,$LJMPWTDEL
45、Y10MS:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETINT_T0:INCTCNTAMOVA,TCNTACJNEA,#100,NEXTMOVTCNTA,#00HINCTCNTBMOVA,TCNTBCJNEA,#4,NEXTMOVTCNTB,#00HINCSECMOVA,SECCJNEA,#100,DONEMOVSEC,#00HDONE:MOVA,SECMOVB,#10DIVABMOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AMOVA,BMOVDPTR,#TABLEMOVCA,A+DPTRMOVP2,ANEXT:RETITABLE:DB
46、3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND6.C語言源程序#includeunsignedcharcodedispcode=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;unsignedcharsecond;unsignedcharkeycnt;unsignedinttcnt;voidmain(void)unsignedchari,j;TMOD=0 x02;ET0=1;EA=1;second=0;
47、P0=dispcodesecond/10;P2=dispcodesecond%10;while(1)if(P3_5=0)for(i=20;i0;i-)for(j=248;j0;j-);if(P3_5=0)keycnt+;switch(keycnt)case1:TH0=0 x06;TL0=0 x06;TR0=1;break;case2:TR0=0;break;case3:keycnt=0;second=0;P0=dispcodesecond/10;P2=dispcodesecond%10;break;while(P3_5=0);voidt0(void)interrupt1using0tcnt+;
48、if(tcnt=400)tcnt=0;second+;if(second=100)second=0;P0=dispcodesecond/10;P2=dispcodesecond%10;6.“嘀、嘀、”報警聲1實驗任務用AT89S51單片機產(chǎn)生“嘀、嘀、”報警聲從P1.0端口輸出,產(chǎn)生頻率為lKHz,根據(jù)上面圖可知:1KHZ方波從P1.0輸出0.2秒,接著0.2秒從P1.0輸出電平信號,如此循環(huán)下去,就形成我們所需的報警聲了。2.電路原理圖vsVQUTIN-wassmuGND06皿TfF1二:1汀1EMJ圖4.18.13.系統(tǒng)板硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P1.0端口用導線連接到“音頻
49、放大模塊”區(qū)域中的SPKIN端口上,(2.在“音頻放大模塊”區(qū)域中的SPKOUT端口上接上一個8歐或者是16歐的喇叭;4程序設計方法(1.生活中我們常常到各種各樣的報警聲,例如“嘀、嘀、”就是常見的一種聲音報警聲,但對于這種報警聲,嘀0.2秒鐘,然后斷0.2秒鐘,如此循環(huán)下去,假設嘀聲的頻率為1KHz,則報警聲時序圖如下圖所示:(2.由于要產(chǎn)生上面的信號,我們把上面的信號分成兩部分,一部分為1KHZ方波,占用時間為0.2秒;另一部分為電平,也是占用0.2秒;因此,我們利用單片機的定時/計數(shù)器TO作為定時,可以定時0.2秒;同時,也要用單片機產(chǎn)生1KHZ的方波,對于1KHZ的方波信號周期為1ms
50、,高電平占用0.5ms,低電平占用0.5ms,因此也采用定時器T0來完成0.5ms的定時;最后,可以選定定時/計數(shù)器T0的定時時間為0.5ms,而要定時0.2秒則是0.5ms的400倍,也就是說以0.5ms定時400次就達到0.2秒的定時時間了。5.程序框圖中斷服務程序框圖圖4.18.26匯編源程序T02SAEQU30HT02SBEQU31HFLAGBIT00HORG00HLJMPSTARTORG0BHLJMPINT_T0START:MOVT02SA,#00HMOVT02SB,#00HCLRFLAGMOVTMOD,#01HMOVTH0,#(65536-500)/256MOVTL0,#(6553
51、6-500)MOD256SETBTR0SETBET0SETBEASJMP$INT_T0:MOVTH0,#(65536-500)/256MOVTL0,#(65536-500)MOD256INCT02SAMOVA,T02SACJNEA,#100,NEXTINCT02SBMOVA,T02SBCJNEA,#04H,NEXTMOVT02SA,#00HMOVT02SB,#00HCPLFLAGNEXT:JBFLAG,DONECPLP1.0DONE:RETIEND7.C語言源程序#includeunsignedintt02s;unsignedchart05ms;bitflag;voidmain(void)TM
52、OD=0 x01;TH0=(65536-500)/256;TL0=(65536-500)%256;TR0=1;ET0=1;EA=1;while(1);voidt0(void)interrupt1using0TH0=(65536-500)/256;TL0=(65536-500)%256;t02s+;if(t02s=400)t02s=0;flag=flag;if(flag=0)P1_0=P1_0;7“叮咚”門鈴1實驗任務當按下開關SP1,AT89S51單片機產(chǎn)生“叮咚”聲從P1.0端口輸出到LM386,過放大之后送入喇叭。2電路原理圖W+VSOUTW-OA!HBYPA5EGAINOKDLj【一!廠
53、目冷一殳二0-1趙EA唸KEME二WE二負客丟np.,JOB:Il-SD8EE寸K冃宦總.尊一.WQmdG艾a?.I5網(wǎng)J-耳;遼12MIi-IJ2UL王InF圖4.19.13系統(tǒng)板上硬件連線(1把“單片機系統(tǒng)”區(qū)域中的P1.0端口用導線連接到“音頻放大模塊”區(qū)域中的SPKIN端口上;(2在“音頻放大模塊”區(qū)域中的SPKOUT端口上接上一個8歐或者是16的喇叭;(3把“單片機系統(tǒng)”區(qū)域中的P3.7/RD端口用導線連接到“獨立式鍵盤”區(qū)域中的SP1端口上;4程序設計方法(1.我們用單片機實定時/計數(shù)器TO來產(chǎn)生700HZ和500HZ的頻率,根據(jù)定時/計數(shù)器TO,我們?nèi)《〞r250us,因此,700
54、HZ的頻率要經(jīng)過3次250us的定時,而500HZ的頻率要經(jīng)過4次250us的定時。(2.在設計過程,只有當按下SP1之后,才啟動T0開始工作,當T0工作完畢,回到最初狀態(tài)。(3.“?!焙汀斑恕甭曇舾髡加?.5秒,因此定時/計數(shù)器T0要完成0.5秒的定時,對于以250us為基準定時2000次才可以。5.程序框圖T0中斷服務程序框圖圖4.19.26匯編源程序T5HZEQU30HT7HZEQU31HT05SAEQU32HT05SBEQU33HFLAGBIT00HSTOPBIT01HSP1BITP3.7ORG00HLJMPSTARTORG0BHLJMPINT_T0START:MOVTMOD,#02H
55、MOVTH0,#06HMOVTL0,#06HSETBET0SETBEANSP:JBSP1,NSPLCALLDELY10MSJBSP1,NSPSETBTR0MOVT5HZ,#00HMOVT7HZ,#00HMOVT05SA,#00HMOVT05SB,#00HCLRFLAGCLRSTOPJNBSTOP,$LJMPNSPDELY10MS:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1RETINT_T0:INCT05SAMOVA,T05SACJNEA,#100,NEXTMOVT05SA,#00HINCT05SBMOVA,T05SBCJNEA,#20,NEXTMOVT05S
56、B,#00HJBFLAG,STPCPLFLAGLJMPNEXTSTP:SETBSTOPCLRTR0LJMPDONENEXT:JBFLAG,S5HZINCT7HZMOVA,T7HZCJNEA,#03H,DONEMOVT7HZ,#00HCPLP1.0LJMPDONES5HZ:INCT5HZMOVA,T5HZCJNEA,#04H,DONEMOVT5HZ,#00HCPLP1.0LJMPDONEDONE:RETIEND7.C語言源程序#includeunsignedchart5hz;unsignedchart7hz;unsignedinttcnt;bitstop;bitflag;voidmain(voi
57、d)unsignedchari,j;TMOD=0 x02;TH0=0 x06;TL0=0 x06;ET0=1;EA=1;while(1)if(P3_7=0)for(i=10;i0;i-)for(j=248;j0;j-);if(P3_7=0)t5hz=0;t7hz=0;tcnt=0;flag=0;stop=0;TR0=1;while(stop=0);voidt0(void)interrupt1using0tcnt+;if(tcnt=2000)tcnt=0;if(flag=0)flag=flag;elsestop=1;TR0=0;if(flag=0)t7hz+;if(t7hz=3)t7hz=0;P
58、1_0=P1_0;elset5hz+;if(t5hz=4)t5hz=0;P1_0=P1_0;8.數(shù)字鐘()1實驗任務(1.開機時,顯示12:00:00的時間開始計時;(2.PO.O/ADO控制“秒”的調(diào)整,每按一次加1秒;(3.P0.1/AD1控制“分”的調(diào)整,每按一次加1分;(4.P0.2/AD2控制“時”的調(diào)整,每按一次加1個小時;2電路原理圖IIIIIIIIIIIIIIIddPiddddd扃捋目窩料伺脣舄囪呂翻耳貳口冑啟GHD口円C1寸5X,氏肌貝忍貝XKUVUVUv!巨NvldiviavlVv!已二兩希尋口詁忌冒ZU活說尋EK二3GiwSKSSSKSgEEgEEEEEc圖4.20.13
59、系統(tǒng)板上硬件連線(1.把“單片機系統(tǒng)”區(qū)域中的P1.0P1.7端口用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的AH端口上;(2.把“單片機系統(tǒng):區(qū)域中的P3.0P3.7端口用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的S1S8端口上;(3.把“單片機系統(tǒng)”區(qū)域中的PO.O/ADO、P0.1/AD1、P0.2/AD2端口分別用導線連接到“獨立式鍵盤”區(qū)域中的SP3、SP2、SP1端口上;4.相關基本知識(1動態(tài)數(shù)碼顯示的方法(2獨立式按鍵識別過程(3“時”,“分”,“秒”數(shù)據(jù)送出顯示處理方法5程序框圖SECONDO嗎3顯示數(shù)據(jù)處理SECOND=0分按鍵識別成應否?MINITE加1INITE=60嗎*MIN
60、ITE=0顯示數(shù)據(jù)處理時按鍵識別成功否?HOUR加16匯編源程序SECONDEQU30HMINITEEQU31HHOUREQU32HHOURKBITP0.0MINITEKBITP0.1SECONDKBITP0.2DISPBUFEQU40HDISPBITEQU48HT2SCNTAEQU49HT2SCNTBEQU4AHTEMPEQU4BHORG00HLJMPSTARTORG0BHLJMPINT_T0START:MOVSECOND,#00HMOVMINITE,#00HMOVHOUR,#12MOVDISPBIT,#00HMOVT2SCNTA,#00HMOVT2SCNTB,#00HMOVTEMP,#0F
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國三目落射熒光顯微鏡行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國竹根雕數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國煮呢機數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國雙層珠光吹瓶數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國冷凍黑椒牛柳飯數(shù)據(jù)監(jiān)測研究報告
- 2025年中國自動調(diào)整臂零件市場調(diào)查研究報告
- 專業(yè)知識的網(wǎng)絡與社交媒體考核試卷
- 創(chuàng)業(yè)投資市場營銷策略制定考核試卷
- 地理信息在農(nóng)業(yè)智能化中的應用考核試卷
- 工藝美術品原材料采購與供應鏈管理考核試卷
- 小學生心理健康教育學情分析
- 2024年高考語文一輪復習:文言文文意概括簡答題知識清單 (二)
- 超級大腦:孩子六維能力培養(yǎng)指南
- 縱隔腫物的護理查房
- 新能源汽車概論題庫
- 設備維保的維修成本和維護費用
- 客運站員工安全生產(chǎn)教育培訓
- 口腔預防兒童宣教
- 綠城桃李春風推廣方案
- 顱腦損傷的生物標志物
- 2023高考語文實用類文本閱讀-新聞、通訊、訪談(含答案)
評論
0/150
提交評論