單片機(jī)實(shí)驗(yàn)報(bào)告_第1頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告_第2頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告_第3頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告_第4頁(yè)
單片機(jī)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一一、 實(shí)驗(yàn)題目: 試編寫(xiě)一段程序,其功能為將21H單元的內(nèi)容8位分別依次存放到從22H開(kāi)始的8單元中。二、 keil代碼:org 0000hjmp startorg 0100hstart: mov 21h,#8; mov A ,21h;取出21中的數(shù) mov R0,#22h ;初始化 mov R1,#7h ;循環(huán)次數(shù)為7loop: RRC A;把A之中的最低位移到C JC real;判斷C里面是數(shù)是否為1,如果是1.則跳轉(zhuǎn)到real mov R0,#0h jmp kk;real:mov R0,#1h;如果是1,則將1賦到R0單元里kk:INC r0;依次判斷A中的每一位DJNZ R1,l

2、oop;jmp $;死循環(huán)end三、 實(shí)驗(yàn)截圖:四、 實(shí)驗(yàn)小結(jié):這是我們單片機(jī)的第一個(gè)實(shí)驗(yàn),因?yàn)閯偨佑|,所以會(huì)感覺(jué)很陌生,內(nèi)心有一種畏懼感,看到題目的時(shí)候也是沒(méi)有頭緒,可以說(shuō)完全是不知道到底題目是一個(gè)什么意思,更是不知道我們應(yīng)該如何編寫(xiě)程序。不過(guò)后面通過(guò)老師的講解,自己也去查看了一些有關(guān)的書(shū)籍,慢慢也理解了該如何去實(shí)現(xiàn)這種實(shí)驗(yàn)題目。在認(rèn)真琢磨之后,我開(kāi)始學(xué)會(huì)像以前剛開(kāi)始學(xué)習(xí)C語(yǔ)言一樣慢慢繪制一個(gè)程序的流程圖,理清思緒,然后根據(jù)流程圖編寫(xiě)相應(yīng)的代碼。下面是本題的實(shí)驗(yàn)流程圖:通過(guò)完成這個(gè)實(shí)驗(yàn),我對(duì)單片機(jī)的程序有了很大的認(rèn)識(shí)。實(shí)驗(yàn)中,也是深刻的理解到了一個(gè)單片機(jī)程序每一步的實(shí)現(xiàn)與運(yùn)行。當(dāng)然,也掌握了

3、在keil中調(diào)試的方法。實(shí)驗(yàn)二一、 實(shí)驗(yàn)題目: 若0-5號(hào)鍵的鍵值分別是:EEH、DEH、BEH、7EH、EDH、DDH。設(shè)鍵值存放在內(nèi)部RAM 20H單元中,編程實(shí)現(xiàn)根據(jù)2OH中的鍵值分別使程序轉(zhuǎn)移到PR0-PR4程序段。要求當(dāng)以上程序段的功能完成后,都采用RET指令,指定返回到程序的初始入口START標(biāo)號(hào)處。要求:PR0 :教材75頁(yè)習(xí)題。PR1 :同上 習(xí)題9題PR2:同上 習(xí)題10其余入口,只需完成空操作就返回。二、 keil代碼:org 0000 ljmp startorg 0100TAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDHstart:mov dptr

4、,#startpush dplpush dphmov A,#0EEHMOV 20H,AMOV DPTR ,#TAB;置鍵碼表首址MOV A,#0 ;表的起始位置的偏移量為零NEXT:PUSH ACC;先保存A寄存器中的值MOVC A,A+DPTR ;A是鍵碼表的編碼CJNE A,20H,NEXT1 ;將20H值和鍵碼表的值比較POP ACCRL A ;如相等,序號(hào)乘以2,得到分支表內(nèi)偏移量2n (8位變16位)MOV DPTR,#APJ ;置分支表首址JMP A+DPTR ;執(zhí)行表JPT+2H中的AJMP PRn指令NEXT1:POP ACC;不相等,則比較下一個(gè)INC ACJNE A,#6,

5、NEXT;表示如果=6了,說(shuō)明編碼查完了也沒(méi)有相等的 ,程序直接結(jié)束SJMP $APJ:AJMP PR0AJMP PR1AJMP PR2AJMP PR3AJMP PR4PR0: MOV R7,#5HMOV 3DH,#00HMOV 3EH,#20HMOV 4EH,#88HMOV 5EH,#98HMOV A,#0MOV R4,A ;正數(shù)個(gè)數(shù)MOV R5,A ;負(fù)數(shù)個(gè)數(shù)MOV R6,A ;零的個(gè)數(shù)MOV R0,#40HMOV R1,#50HMOV SP,#3FHLOOP:POP ACCJZ ZEROJB ACC.7,FSINC R4MOV R0,AINC R0AJMP DJFS:INC R5MOV

6、R1,AINC R1AJMP DJZERO:INC R6DJ:DJNZ R7,LOOPRETDATA1:DB 0EFH,3FH,3EH,07HPR1: MOV R7,#03H;進(jìn)行3次循環(huán)MOV R0,#DATA1MOV A,R0CPL A;取反ADD A,#01 ;加1MOV R0,AAB1:INC R0MOV A,R0CPL AADDC A,#0 ;帶進(jìn)位DJNZ R7,AB1;SJMP $RETBUF1:DB 1111B,0101B,0010B,0100B,0101B,0010B,0001B,0000B,1001B,0000B,1010B,1011B,0000B,0011B,0010B,

7、0001BBUF2:DB 0BUF:DB 0PR2: ;30h放平均值 40h放余數(shù)MOV R0,#BUF1 MOV R7,#16 ;循環(huán)16次數(shù)MOV B,#0MOV A,R0MOV R2,ALOOP1:MOV A,R2INC R0ADD A,R0MOV R2,AMOV A,BADDC A,#0MOV B,ADJNZ R7,LOOP1MOV R6,#04HMOV 30H,#BUF2MOV 30H,AMOV 40H,#BUFMOV 40H,#0NEX:CLR CMOV A,BRRC AMOV B,AMOV A,30HRRC AMOV 30H,AMOV A,40HRRC A MOV 40H,AD

8、JNZ R6,NEXSJMP $RETPR5: RETPR3: RETPR4: RETEND三、 實(shí)驗(yàn)截圖:初始化: 結(jié)果:四、 實(shí)驗(yàn)小結(jié):本實(shí)驗(yàn)中,將鍵碼排成表,將鍵碼表中的值和20H單元中的內(nèi)容進(jìn)行比較;另外編制一張轉(zhuǎn)移表,存放AJMP指令,利用JMP A+DPTR執(zhí)行表內(nèi)的AJMP指令,從而實(shí)現(xiàn)分支轉(zhuǎn)移?!癛L A”:因?yàn)槊總€(gè)AJMP指令占兩個(gè)字節(jié),將剛記下來(lái)的鍵碼中的值(即:鍵碼的序號(hào))乘以2即為轉(zhuǎn)移表的偏移地址,在利用JMP A+DPTR執(zhí)行表內(nèi)的AJMP指令,從而實(shí)現(xiàn)分支轉(zhuǎn)移?!癿ov dptr ,#startPush dplpush dph”:指定每次主程序返回到start。在單

9、片機(jī)中,每一個(gè)子程序的返回用RET指令,而RET指令的功能正好可以使得子程序從棧頂彈出斷點(diǎn)到PC,從而返回到主程序?qū)嶒?yàn)三一、 實(shí)驗(yàn)題目:使用C語(yǔ)言完成,實(shí)驗(yàn)一,實(shí)驗(yàn)二。二、 keil代碼:實(shí)驗(yàn)一:#include#includevoid main() char *p1=0x21; char *p2=0x22; int i=1; *p1=0x8; while(i1; p2+; i+; 實(shí)驗(yàn)二:#includevoid PR0();void PR1();void PR2();void PR3();void PR4();void PR5(); int main()int i;/鍵碼表code的下表i

10、nt key=0;char code1=0xEE,0xDE,0xBE,0x7e,0xED,0xDD;char *p0=0x20; /指針變量*p0指向20H這個(gè)單元*p0=0xDE; /給20H單元賦初值(20H單元里存放鍵碼表中任一值 )for(i=0;isizeof(code1);i+)if(*p0=code1i)break;key=i;switch(key)case 0:PR0();break;case 1:PR1();break;case 2:PR2();break;case 3:PR3();break;case 4:break;case 5:break;default:break;r

11、eturn 0;void PR0() char table116=1,2,-6,7,8,9,0,-1,-2,-3,-4,-5,-6,1,4,6;char data *p30 = 0x30;char data *p40 = 0x40;char data *p50 = 0x50;int i;int countR4=0; /分別將正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)存入R4,R5,R6中int countR5=0;int countR6=0;for(i=0;isizeof(table1);i+) /依次將table1表里的16個(gè)數(shù)據(jù)存入30H單元開(kāi)始的單元里。p30i=table1i; for(i=0;i0)*p4

12、0=*p30;+p40;+countR4;else if(*p300)*p50=*p30;+p50;+countR5;else+countR6; +p30;void PR1()char data1=0x10,0x11,0x12,0x13;int i;int j;char Cy=PSW7;data10=(data10)+0x1;/while(j4)for(j=0;jsizeof(data1);j+)data1i=(data1i)+Cy;i+;void PR2() char buf1=0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x0A,0x0B,0x0C,0x0D,0

13、x0E,0xF; char buf2=0; char buf=0; int sum=0; int i=1; while(i=16) sum=sum+buf1i; +i; buf2=sum/0x10; buf=sum%0x10;三、 實(shí)驗(yàn)截圖:實(shí)驗(yàn)一:實(shí)驗(yàn)二:四、 實(shí)驗(yàn)小結(jié):在本實(shí)驗(yàn)中,我們用C語(yǔ)言編寫(xiě)代碼的時(shí)候,特別注意指針的使用。另外,在單片機(jī)中使用C語(yǔ)言,與我們之前寫(xiě)C語(yǔ)言的時(shí)候還是有一些不同的地方,尤其是在指針使用上面的不同。C語(yǔ)言是一種通用的程序設(shè)計(jì)語(yǔ)言,代碼率高,數(shù)據(jù)類(lèi)型豐富,且具有良好的程序結(jié)構(gòu);單片機(jī)的C語(yǔ)言采用C51編譯器,由C51產(chǎn)生的目標(biāo)代碼短,運(yùn)行速度快,所需內(nèi)存空間小。

14、實(shí)驗(yàn)中,注意:“for(i=0;isizeof(table1);i+) p30i=table1i; ”:表示依次將table1表里的16個(gè)數(shù)據(jù)存入30H單元開(kāi)始的單元里。實(shí)際上,在C中指針就相當(dāng)于一個(gè)數(shù)組。在本實(shí)驗(yàn)中,我可以根據(jù)之前的匯編程序?qū)嶒?yàn),較為容易的根據(jù)每個(gè)子程序編子函數(shù)模塊。由于之前有C語(yǔ)言的基礎(chǔ),所以能夠比較好的完成本實(shí)驗(yàn)。實(shí)驗(yàn)四五、 實(shí)驗(yàn)題目:當(dāng)K1鍵按下后,首先使蜂鳴器響一聲,然后使LED1-LED8完成3種閃亮的花樣(自己定義),每一種花樣循環(huán)3次,然后周而復(fù)始。六、 keil代碼:/*當(dāng)K1鍵按下后,首先使蜂鳴器響一聲,然后使LED1-LED8完成3種閃亮的花樣(自己定義)

15、,每一種花樣循環(huán) 3次,然后周而復(fù)始。*/#includesbit P2_0=P20;/接蜂鳴器sbit P2_7=P27;sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17; void DELAY(int time)/延時(shí) while(time-) void BUZ_ON() if(P2_7=0) P2_0=1; else P2_0=0; void F1(void) int i;char data_group_mide5=

16、0x00,0x18,0x24,0x42,0x81;/向兩邊延伸for(i=0;i5;i+) P1=data_group_midei; DELAY(20000); P1=0x00; void F2(void) int i; char data_group_left8=0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x01,0x00;/向左延伸for(i=0;i8;i+)P1=data_group_lefti;DELAY(20000); P1=0x00; void F3(void) int i;char date_group_right8=0x00,0x01,0x03,0x07,0x

17、0f,0x3f,0x7f,0xff;/向右延伸for(i=0;i8;i+) P1=date_group_righti;DELAY(20000); P1=0x00; void main() unsigned int i; /每種花樣循環(huán)三次 P2_0=0; P2_7=1; BUZ_ON(); P1=0x00; while(P2_7=0) for(i=0;i3;i+)/花樣1 F1(); for(i=0;i3;i+)/花樣2 F2(); for(i=0;i3;i+)/花樣3 F3(); 三、protues電路圖:四、實(shí)驗(yàn)截圖:5、 實(shí)驗(yàn)小結(jié):通過(guò)本次實(shí)驗(yàn),我們熟悉了protues的編譯環(huán)境,對(duì)以后

18、的單片機(jī)學(xué)習(xí)有很大幫助。實(shí)驗(yàn)五1、 實(shí)驗(yàn)題目:程序啟動(dòng)后4位LED顯示器滾動(dòng)顯示“-”,每按下1次K1鍵后,首先使蜂鳴器響一聲。然后,依次使LED滾動(dòng)顯示CNT的計(jì)數(shù)值(0-9)。2、 Keil代碼:/*程序啟動(dòng)后4位LED顯示器滾動(dòng)顯示“-”,每按下才1次K1鍵后,首先使蜂鳴器響一聲。然后,依次使LED滾動(dòng)顯示CNT的計(jì)數(shù)值(0-9)。1、按鍵K1采用中斷來(lái)管理。(INT0采用邊沿觸發(fā))2、中斷服務(wù)程序完成四個(gè)功能: 1)消除按鍵K1抖動(dòng)。 2)CNT計(jì)數(shù)。 3)查表將計(jì)數(shù)值轉(zhuǎn)換成LED顯示器的段代碼。 4)將段代碼分別放入4個(gè)顯示緩沖單元。*/#include#define uchar u

19、nsigned char#define uint unsigned intsbit P2_7=P27;sbit P3_3=P33;uchar CORDING=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xf9,0xa4,; /0,1,2,3,4.9,0,1,2的段碼int delayms(uint t) uint n;while(-t)n=200;while(-n);return 0;int main() uint CNT=0; P2_7=0; P3_3=1; P1=0xF7; while(1) if(P3_3=0) uint

20、 i; CNT+; P2_7=1; delayms(100); for(i=1;i10) CNT=CNT-10; P2_7=0; return 0;3、 protues電路圖:4、 實(shí)驗(yàn)截圖:5、 實(shí)驗(yàn)總結(jié):通過(guò)本次實(shí)驗(yàn),我們熟悉了CNT計(jì)數(shù),學(xué)會(huì)了如何使LED燈上顯示0-9數(shù)字。實(shí)驗(yàn)六1、 實(shí)驗(yàn)題目:兩個(gè)數(shù)碼管,K1,K2兩個(gè)按鍵,完成K1啟動(dòng)計(jì)數(shù),K2暫停計(jì)數(shù),每一秒鐘數(shù)碼管增加1,60秒鐘后,數(shù)碼管回歸0,重新計(jì)數(shù)。 二、keil代碼:/*兩個(gè)數(shù)碼管,K1,K2兩個(gè)按鍵,完成K1啟動(dòng)計(jì)數(shù),K2暫停計(jì)數(shù),每一秒鐘數(shù)碼管增加1,60秒鐘后,數(shù)碼管回歸0,重新計(jì)數(shù)。按鍵K1,K2采用中斷來(lái)管理

21、。(INT0采用邊沿觸發(fā))*/#define uchar unsigned char#define uint unsigned int#includeuchar CNT=0;uchar m=0;sbit P3_7=P37;sbit P3_2=P32;sbit P0_0=P00;uchar CORDING=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; /0,1,2,3,4.9的段碼void Delay(uint a) while(-a); void intproc() interrupt 0 TR0=0;void Time0() inter

22、rupt 1 m+; /中斷一次,m加1if(m=20) m=0; /中斷次數(shù)清零 CNT+; /秒加1 if(CNT=60) CNT=0; P1=CORDINGCNT/10;/顯示十位 Delay(10); P2=CORDINGCNT%10;/顯示個(gè)位 Delay(10);void init() TMOD=0x01; /使用定時(shí)器T0 使用方式1TH0 = 0x3c; TL0 = 0xb0; /50ms中斷一次 ET0=1;TR0=1;EX0=1;IT0=1;EA=1;void main() P1=0x3f; P2=0x3f; P3_7=1; while(1) if(P3_7=0) /控制是否開(kāi)啟 init(); 3、 protues電路圖:四、實(shí)驗(yàn)截圖:5

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論