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

下載本文檔

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

文檔簡(jiǎn)介

1、杭電單片機(jī)實(shí)驗(yàn)報(bào)告六單片機(jī)原理與應(yīng)用技術(shù) 實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目: :A D/A 轉(zhuǎn)換器得接口與應(yīng)用姓名: :_學(xué)號(hào): :_實(shí)驗(yàn)日期: :20 7 7 、6 6 、6 6指導(dǎo)教師: :高惠芳1 1 、實(shí)驗(yàn) 內(nèi)容、 波得波齒鋸現(xiàn)實(shí)程編請(qǐng),V01 為壓電考參,接所上堂課如線接得機(jī)片單與80AD形,鋸齒波得周期為 20+作業(yè)號(hào),單位就是s。我得作業(yè)號(hào)就是,所以周期就就是 26ms。經(jīng)過計(jì)算后時(shí)間應(yīng)為 0、2m左右。1)程序代碼:H000 GO WASAD PMJA H20 GRDASAW:CLR A LOOP1:MV ,A DEAY: 61#,7R VMLY1: MOV R,#1 Y: DJNZ 6,DL

2、PON DJZ R7,DLY1NC A1POOL MJ ND 2)軟件程序截圖 3)編譯通過截圖4)調(diào)試截圖時(shí)間滿足 0 0 、s 102ms 左右5)仿真電路圖6)仿真波形圖 2、DAC0832 與單片機(jī)得接線如課堂上所接,參考電壓為 V,請(qǐng)編程實(shí)現(xiàn)三角波得波形,三角波得周期為 20作業(yè)號(hào),單位就是s。我得作業(yè)號(hào)就是,所以周期就就是 26s。經(jīng)過計(jì)算后時(shí)間應(yīng)為、12ms 左右。1) 程序代碼:OR 00WASD MJA OR 000 AA:CL A LOP:MOV P1,; DELAY: 61,7R VOMDLY1:1#,6R OLY: DJZ 6,DLY2PON 1LD,7R NJD A

3、CNI JN A,,LOOP1 OP2:MO P,A;DE APL,0,A NJC SJMP DSAWEND 2)代碼程序截圖 )編譯通過截圖)仿真電路圖)仿真結(jié)果 3 3 、實(shí)驗(yàn) 心得通過以上得實(shí)驗(yàn),對(duì) DAC 得轉(zhuǎn)換原理有了比較深刻得了解,也對(duì) D/A 轉(zhuǎn)換器有了一定得了解,得基本原理就是把數(shù)字量得每一位按照權(quán)重轉(zhuǎn)換成相應(yīng)得模擬分量,然后根據(jù)疊加定理將每一位對(duì)應(yīng)得模擬分量相加,輸出對(duì)應(yīng)得電流或電壓。根據(jù) DA內(nèi)部結(jié)構(gòu)得不同,DAC 可以分成權(quán)電阻網(wǎng)絡(luò)與 T 型網(wǎng)絡(luò)等結(jié)構(gòu);根據(jù)輸出結(jié)構(gòu)得不同,DAC 也可以分成電壓輸出與電流輸出兩類。引起了我很大的興趣??吹梦乙猹q未盡。實(shí)驗(yàn)一一、實(shí)驗(yàn)題目:試

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

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

6、的方法。實(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 start org 0100 TAB: DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH start: movdptr ,#start

7、 pushdpl pushdph mov A,#0EEH MOV 20H,A MOV DPTR ,#TABMOV A,#0 NE_T: PUSH ACC;先保存A寄存器中的值MOVC A,A+DPTR ;A是鍵碼表的編碼;置鍵碼表首址;表的起始位置的偏移量為零 CJNE A,20H,NE_T1 POP ACC RL A ;將20H值和鍵碼表的值比較;如相等,序號(hào)乘以2,得到分支表內(nèi)偏移量2n (8位變16位)MOV DPTR,#APJJMP A+DPTR PRn指令NE_T1: POP ACCINC A CJNE A,#6,NE_T;表示如果=6了,說明編碼查完了也沒有相等的,程序直接結(jié)束SJ

8、MP $APJ: AJMP PR0 AJMP PR1 AJMP PR2 AJMP PR3 AJMP PR4;不相等,則比較下一個(gè);置分支表首址 ;執(zhí)行表JPT+2H中的AJMPPR0: MOV R7,#5H MOV 3DH,#00H MOV 3EH,#20H MOV 4EH,#88H MOV 5EH,#98H MOV A,#0 MOV R4,A MOV R5,A MOV R6,A;正數(shù)個(gè)數(shù);負(fù)數(shù)個(gè)數(shù);零的個(gè)數(shù)MOV R0,#40H MOV R1,#50H MOV SP,#3FH LOOP: POP ACC JZ ZERO JB ACC.7,FS INC R4 MOV R0,A INC R0 A

9、JMP DJ FS: INC R5 MOV R1,A INC R1 AJMP DJ ZERO: INC R6 DJ: DJNZ R7,LOOP RET DATA1:DB 0EFH,3FH,3EH,07H PR1: MOV R7,#03H;進(jìn)行3次循環(huán) MOV R0,#DATA1 MOV A,R0 CPL A ;取反 ADD A,#01;加1 MOV R0,A AB1: INC R0 MOV A,R0 CPL A ADDC A,#0 ;帶進(jìn)位 DJNZ R7,AB1 ;SJMP $RET BUF1:DB B,0B,0010B,0100B,0B,0010B,0001B,0000B,1001B,00

10、00B,0B,1B,0000B,0011B,0010B,0001B BUF2:DB 0 BUF:DB 0 PR2: ;30h放平均值 40h放余數(shù) MOV R0,#BUF1 MOV R7,#16 ;循環(huán)16次數(shù) MOV B,#0 MOV A,R0 MOV R2,A LOOP1: MOV A,R2 INC R0 ADD A,R0 MOV R2,A MOV A,B ADDC A,#0 MOV B,A DJNZ R7,LOOP1 MOV R6,#04H MOV 30H,#BUF2 MOV 30H,A MOV 40H,#BUF MOV 40H,#0 NE_: CLR C MOV A,B RRC A M

11、OV B,A MOV A,30H RRC A MOV 30H,A MOV A,40H RRC A MOV 40H,A DJNZ R6,NE_ SJMP $ RET PR5:RET PR3:RET PR4:RET END三、實(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é),將剛記下來的鍵碼中的值(即:鍵碼的序號(hào))乘以2即為轉(zhuǎn)移表的偏移地址,在利用JMP A+DPTR執(zhí)行表內(nèi)的AJMP指令,從而

12、實(shí)現(xiàn)分支轉(zhuǎn)移?!癿ovdptr ,#start Pushdpl push dph”:指定每次主程序返回到start。在單片機(jī)中,每一個(gè)子程序的返回用RET指令,而RET指令的功能正好可以使得子程序從棧頂彈出斷點(diǎn)到PC,從而返回到主程序?qū)嶒?yàn)三一、實(shí)驗(yàn)題目:使用C語言完成,實(shí)驗(yàn)一,實(shí)驗(yàn)二。二、keil代碼:實(shí)驗(yàn)一:#include #include void main char _p1=0_21; char _p2=0_22; int i=1;_p1=0_8;while(i _p2=_p1&01;_p1=_p1>>1; p2+; i+; 實(shí)驗(yàn)二: #include void P

13、R0; void PR1; void PR2; void PR3; void PR4; void PR5; int main int i;/鍵碼表code的下表int key=0; char code1=0_EE,0_DE,0_BE,0_7e,0_ED,0_DD; char _p0=0_20;/指針變量_p0指向20H這個(gè)單元_p0=0_DE;/給20H單元賦初值(20H單元里存放鍵碼表中任一值)for(i=0;i key=i; switch(key) if(_p0=code1i)break; return 0; case 0:PR0;break; case 1:PR1;break; case

14、 2:PR2;break; case 3:PR3;break; case 4:break; case 5:break; default:break; void PR0 char table116=1,2,-6,7,8,9,0,-1,-2,-3,-4,-5,-6,1,4,6; char data _p30 = 0_30; char data _p40 = 0_40; char data _p50 = 0_50; int i; int countR4=0; R4,R5,R6中int countR5=0;/分別將正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)存入 int countR6=0; for(i=0;i/依次將tab

15、le1表里的16個(gè)數(shù)據(jù)存入30H單元開始的單元里。 for(i=0;i if(_p30>0) else if(_p30 else _p50=_p30; +p50; +countR5;_p40=_p30; +p40; +countR4;p30i=table1i; +countR6;+p30; void PR1 char data1=0_10,0_11,0_12,0_13; int i; int j; char Cy=PSW7; data10=(data10)+0_1; /while(j data1i=(data1i)+Cy; i+;void PR2 char buf1=0_1,0_2,0_

16、3,0_4,0_5,0_6,0_7,0_8,0_9,0A,0B,0C,0D,0E,0_F; char buf2=0; charbuf=0; int sum=0; int i=1; while(i sum=sum+buf1i;+i; buf2=sum/0_10; buf=sum0_10; 三、實(shí)驗(yàn)截圖:實(shí)驗(yàn)一:實(shí)驗(yàn)二:四、實(shí)驗(yàn)小結(jié):在本實(shí)驗(yàn)中,我們用C語言編寫代碼的時(shí)候,特別注意指針的使用。另外,在單片機(jī)中使用C語言,與我們之前寫C語言的時(shí)候還是有一些不同的地方,尤其是在指針使用上面的不同。C語言是一種通用的程序設(shè)計(jì)語言,代碼率高,數(shù)據(jù)類型豐富,且具有良好的程序結(jié)構(gòu);單片機(jī)的C語言采用C51編譯

17、器,由C51產(chǎn)生的目標(biāo)代碼短,運(yùn)行速度快,所需內(nèi)存空間小。實(shí)驗(yàn)中,注意:“for(i=0;ip30i=table1i; ”:表示依次將table1表里的16個(gè)數(shù)據(jù)存入30H單元開始的單元里。實(shí)際上,在C中指針就相當(dāng)于一個(gè)數(shù)組。在本實(shí)驗(yàn)中,我可以根據(jù)之前的匯編程序?qū)嶒?yàn),較為容易的根據(jù)每個(gè)子程序編子函數(shù)模塊。由于之前有C語言的基礎(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完成

18、3種閃亮的花樣(自己定義),每一種花樣循環(huán) 3次,然后周而復(fù)始。_/ #include sbit P2=P20;/接蜂鳴器 sbit P2_7=P27; sbit P1=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=1; else P2=0; void F1(void) int i; char dat

19、a_group_mide5=00,0_18,0_24,0_42,0_81;/向兩邊延伸 for(i=0;iP1=00; void F2(void) int i; char data_group_left8=0_FF,0_7F,0_3F,0F,07,03,01,00;/向左延伸 for(i=0;i P1=00; void F3(void) int i; char date_group_right8=00,01,03,07,0f,0_3f,0_7f,0_ff;/向右延伸 for(i=0;i P1=00; void main unsigned int i; /每種花樣循環(huán)三次P2=0;P2_7=1;

20、BUZ_ON;P1=00; while(P2_7=0)for(i=0;iF1;for(i=0;iF2;for(i=0;iF3; 三、protues電路圖:四、實(shí)驗(yàn)截圖:五、實(shí)驗(yàn)小結(jié):通過本次實(shí)驗(yàn),我們熟悉了protues的編譯環(huán)境,對(duì)以后的單片機(jī)學(xué)習(xí)有很大幫助。 實(shí)驗(yàn)五一、實(shí)驗(yàn)題目: 程序啟動(dòng)后4位LED顯示器滾動(dòng)顯示“-”,每按下1次K1鍵后,首先使蜂鳴器響一聲。然后,依次使LED滾動(dòng)顯示CNT的計(jì)數(shù)值(0-9)。二、Keil代碼:/_程序啟動(dòng)后4位LED顯示器滾動(dòng)顯示“-”,每按下才1次K1鍵后,首先使蜂鳴器響一聲。然后,依次使LED滾動(dòng)顯示CNT的計(jì)數(shù)值(0-9)。1、按鍵K1采用中斷來

21、管理。(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 unsigned char #define uint unsigned int sbit P2_7=P27; sbit P3_3=P33; uchar CORDING=0_c0,0_f9,0_a4,0_b0,0_99,0_92,0_82,0_f8,0_80,0_90,0_c0,0_f9,0_a4,; /0,1,2,3,4.9,0,1,2的段碼 intdelayms(

22、uint t) uint n; while(-t) n=20_; while(-n); ; return 0; int main uint CNT=0;P2_7=0;P3_3=1; P1=0_F7; while(1) if(P3_3=0)uint i; CNT+;P2_7=1; delayms(100); for(i=1;i/4位P1=CORDINGCNT-1;switch(i)/點(diǎn)亮第1位/點(diǎn)亮第2位 /點(diǎn)亮第3位 /點(diǎn)亮第4位delayms(100);casecasecasecase P2=00; 1:P2=01;break; 2:P2=02;break; 3:P2=04;break; 4

23、:P2=08;break;/ 熄滅if(CNT>10) CNT=CNT-10; 三、protues電路圖:P2_7=0; return 0; 四、實(shí)驗(yàn)截圖:五、實(shí)驗(yàn)總結(jié):通過本次實(shí)驗(yàn),我們熟悉了CNT計(jì)數(shù),學(xué)會(huì)了如何使LED燈上顯示0-9數(shù)字。實(shí)驗(yàn)六一、實(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采用中斷來管理。(INT0采用邊沿觸發(fā))_/ #d

24、efine uchar unsigned char #define uint unsigned int #include uchar CNT=0; ucharm=0; sbit P3_7=P37; sbit P3_2=P32; sbit P0=P00; uchar CORDING=0_3F,06,0_5B,0_4F,0_66,0_6D,0_7D,07,0_7F,0_6F; /0,1,2,3,4.9的段碼 void Delay(uint a) while(-a); voidintproc interrupt 0 TR0=0; void Time0 interrupt 1 m+;/中斷一次,m加1if(m=20) m=0;/中斷次數(shù)清零 CNT+; /秒加1 if(CNT=60) CNT=0;P1=CORDINGCNT/10;/顯示十位 Delay(10);P2=CORDINGCNT10;/顯示個(gè)位 Delay(10); voidinit TMOD=01;/使用定時(shí)器T0 使用方式1 TH0 = 0_3c;TL0 = 0_b0;ET0=1; TR0=1; E=1; IT0=1; EA=1; void main P1=0_3f;P2=0_3f;P3_7=1; while(1) if(P3_7=0) /50ms中斷

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論