單片機(jī)最小系統(tǒng)實(shí)訓(xùn)報(bào)告_第1頁
單片機(jī)最小系統(tǒng)實(shí)訓(xùn)報(bào)告_第2頁
單片機(jī)最小系統(tǒng)實(shí)訓(xùn)報(bào)告_第3頁
單片機(jī)最小系統(tǒng)實(shí)訓(xùn)報(bào)告_第4頁
單片機(jī)最小系統(tǒng)實(shí)訓(xùn)報(bào)告_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)最小系統(tǒng)實(shí)訓(xùn)報(bào)告實(shí)訓(xùn)目的掌握并理解單片機(jī)最小系統(tǒng)的原理及制作, 牢記最小系統(tǒng)中各元器件 的參數(shù)及各元器的作用./掌握單片機(jī)芯片內(nèi)部的組成及存儲(chǔ)機(jī)構(gòu)。理解常用指令的功能和使用方法。掌握單片機(jī)的中斷源,中斷控制寄存器,中斷響應(yīng)過程,定時(shí)/計(jì)數(shù)器的電路結(jié)構(gòu)、功能我使用方法,定時(shí)器/計(jì)數(shù)控制寄存器.復(fù)習(xí)利用Keil51軟件對(duì)程序進(jìn)行編譯。用protel軟件繪制“單片機(jī)最小系統(tǒng)”電路,并用測試程序進(jìn)行仿真。會(huì)根據(jù)實(shí)際功能,正確選擇單片機(jī)功能接線,編制正確程序。對(duì)實(shí)驗(yàn)結(jié)果能做出不分析我解釋,能學(xué)出符合規(guī)格的實(shí)驗(yàn)報(bào)告。實(shí)訓(xùn)工具點(diǎn)偏激測試平臺(tái):PC機(jī),串口線,并口線,單片機(jī)開發(fā)板軟件:keil51測試軟

2、件,protel仿真軟件,DXP2004軟件。實(shí)訓(xùn)要求通過實(shí)訓(xùn),學(xué)生應(yīng)達(dá)到以下經(jīng)濟(jì)方面的要求: 素質(zhì)要求以積極認(rèn)真的態(tài)度對(duì)待本次實(shí)訓(xùn),遵章守紀(jì)、團(tuán)結(jié)協(xié)作。善于發(fā)現(xiàn)數(shù)字電路中存在的問題、分析問題、解決問題,努力培養(yǎng)獨(dú)立工作能力。能力要求模擬電路的理論知識(shí)脈沖與數(shù)字電路的理念知識(shí)通過模擬、數(shù)字電路實(shí)驗(yàn)有一定的動(dòng)手能力能熟練的制作單片機(jī)最小系統(tǒng)嫩熟練的編寫8951單片機(jī)匯編程序能夠熟練的運(yùn)用仿真軟件對(duì)單片機(jī)最小系統(tǒng)仿真四、實(shí)訓(xùn)內(nèi)容 1、掌握并理解“單片機(jī)最小系統(tǒng)”的原理及制作,牢記最小系統(tǒng)中各元器件的參數(shù)及格元器件的作用。 2、用keil51測試元件編寫8951單片機(jī)匯編程序 3、用peotel軟件

3、繪制“單片機(jī)最小系統(tǒng)”單路原理圖。 4、運(yùn)用仿真軟件對(duì)單片機(jī)最小系統(tǒng)進(jìn)行仿真。五實(shí)訓(xùn)基本步驟 1、用peotel乳酸鈉幾十年繪制“單片機(jī)最小系統(tǒng)”單路原理圖。 2、根據(jù)原理圖生成pcb圖、GB文件。鉆孔文件 3、繪制印刷電路板。 4、根據(jù)原理圖焊接元件,生成單片機(jī)開發(fā)板。 5、用keil51軟件編寫單片機(jī)最小系統(tǒng)測試程序。 6、用仿真軟件繪制單片機(jī)最小系統(tǒng)原理圖,測試測量程序。 7、把測試程序拷貝到單片機(jī)里進(jìn)行實(shí)物測試。 8、觀察測試結(jié)果。六、51單片機(jī)C編語言程序測試測試程序流水燈1:/用定時(shí)器做流水燈測試/為定時(shí)顯示做準(zhǔn)備/P1-0-PF1.3 L0-L3#include#include#

4、define unit unsigned int #define unchar unsigned char sbit L0 = P10;sbit L1 = P11;sbit L2 = P12;sbit L3 = P13;unsigned char data BUFFER1=0; void main(void) P2=0X0F; EA=1; IT0=1; ET0=1; TMOD=0X01; TH0=-5000/256; TL0=-5000%256; TR0=1; while(1) ;/定時(shí)器0中斷服務(wù)程序/void timer0(void) interrupt 1 using 1 TH0=-50

5、00/256; TL0=-5000%256; BUFFER0=BUFFER0+1; if(BUFFER0=100) L3=!L3; L2=!L2; L1=!L1; L0=!L0; 測試程序流水燈2:/此程序?yàn)榱俗龌恿魉疅舻?采用了C的宏定義 X 可以實(shí)現(xiàn)一改全改#include#include#define unit unsigned int #define unchar unsigned char #define X 16 /unsigned int time=0;unsigned int aX= 0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80, 0X18,

6、0X24,0X42,0X81,0X42,0X24,0X18,0X00, ;void main(void) P1=0X0f; EA=1; IT0=1; ET0=1; TMOD=0X01; TH0=9000/256; TL0=9000%256; TR0=1; while(1) P1=atime; ;/定時(shí)器0中斷服務(wù)程序/void timer0(void) interrupt 1 using 1 TH0=9000/256; TL0=9000%256; time+; if(time=X) time=0; /此程序來測試數(shù)碼管/P0.0-P0.7 A B C D E F G dp/P2.0-P2.7

7、C0M0-C0M8#include#include#define unit unsigned int #define unchar unsigned char unsigned char data BUFFER1=0;unsigned char X=0;/共陽極碼表數(shù)碼管unsigned char leddata= 0 xC0, /0 0 xF9, /1 0 xA4, /2 0 xB0, /3 0 x99, /4 0 x92, /5 0 x82, /6 0 xF8, /7 0 x80, /8 0 x90, /9 0 x88, /A 0 x83, /B 0 xC6, /C 0 xA1, /D 0

8、 x86, /E 0 x8E, /F 0 x89, /H 0 xC7, /L 0 xC8, /n 0 xC1, /u 0 x8C, /P 0 xA3, /o 0 xBF, /- 0 xFF, /熄滅 0 xFF /自定義 ;unsigned char com=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80,;void Delay(unsigned char cnt) while(cnt-);void xian_shi(unsigned char cp) unsigned char i; unsigned int z=cp; for(i=0;i8;

9、i+) P0=leddataz%10; P2=comi; Delay(200); z=z/10; void main(void) P0=0X00; P2=0Xff; EX0=1; IT0=1; EA=1; while(1) xian_shi(X); ;/定時(shí)器0中斷服務(wù)程序/void timer0(void) interrupt 1 using 1 X+; if(X=25) X=0; 此程序測試鍵盤/P3.0-P3.3 L0-L3/從左到有顯示為 0 1 2 3 P3.4/上/ 4 5 6 7 P3.5/到/ 8 9 A B P3.6/ /下/ C D E F P3.7/ /P3.4-=P3.

10、7 H0-H3 #include #define uchar unsigned char#define uint unsigned intunsigned char led_data= 0 xC0, /0 0 xF9, /1 0 xA4, /2 0 xB0, /3 0 x99, /4 0 x92, /5 0 x82, /6 0 xF8, /7 0 x80, /8 0 x90, /9 0 x88, /A 0 x83, /B 0 xC6, /C 0 xA1, /D 0 x86, /E 0 x8E, /F 0 x89, /H 0 xC7, /L 0 xC8, /n 0 xC1, /u 0 x8C,

11、/P 0 xA3, /o 0 xBF, /- 0 xFF, /熄滅 0 xFF /自定義 ;void delay(uint i) while(i-);uchar keyscan(void) / uchar cord_h,cord_l;/行列值中間變量 P3=0 x0f; /行線輸出全為0 cord_h=P3&0 x0f; /讀入列線值 if(cord_h!=0 x0f) /先檢測有無按鍵按下 delay(100); /去抖 if(cord_h!=0 x0f) cord_h=P3&0 x0f; /讀入列線值 P3=cord_h|0 xf0; /輸出當(dāng)前列線值 cord_l=P3&0 xf0; /

12、讀入行線值 return(cord_h+cord_l);/鍵盤最后組合碼值 return 0 xFF;void main() uchar key; P2=0 xbb; /1數(shù)碼管亮 按相應(yīng)的按鍵,會(huì)顯示按鍵上的字符 while(1) key=keyscan(); /調(diào)用鍵盤掃描, switch(key) case 0 xEE:P0=led_data0;break;/0 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 case 0 xED:P0=led_data1;break;/1 case 0 xEB:P0=led_data2;break;/2 case 0 xE7:P0=led_data3;break;/3

13、case 0 xDE:P0=led_data4;break;/4 case 0 xDD:P0=led_data5;break;/5 case 0 xDB:P0=led_data6;break;/6 case 0 xD7:P0=led_data7;break;/7 case 0 xBE:P0=led_data8;break;/8 case 0 xBD:P0=led_data9;break;/9 case 0 xBB:P0=led_data10;break;/a case 0 xB7:P0=led_data11;break;/b case 0 x7E:P0=led_data12;break;/c

14、case 0 x7D:P0=led_data13;break;/d case 0 x7B:P0=led_data14;break;/e case 0 x77:P0=led_data15;break;/f /此程序用來測試中斷鍵盤P3.2 INT0/下跳沿觸發(fā)/#include#include#define unit unsigned int #define unchar unsigned char sbit L0=P10;sbit L1=P11;sbit L2=P12;sbit L3=P13;unsigned int times=0;void delay(unsigned int cp) un

15、signed int i=cp; while(i-); unsigned char leddata= 0 xC0, /0 0 xF9, /1 0 xA4, /2 0 xB0, /3 0 x99, /4 0 x92, /5 0 x82, /6 0 xF8, /7 0 x80, /8 0 x90, /9 0 x88, /A 0 x83, /B 0 xC6, /C 0 xA1, /D 0 x86, /E 0 x8E, /F 0 x89, /H 0 xC7, /L 0 xC8, /n 0 xC1, /u 0 x8C, /P 0 xA3, /o 0 xBF, /- 0 xFF, /熄滅 0 xFF /自

16、定義 ;unsigned char com=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80,;void xian_shi(unsigned char cp) unsigned char i; unsigned int z=cp; for(i=0;i8;i+) P0=leddataz%10; P2=comi; delay(200); z=z/10; void main(void) P1=0Xdd; EX0=1; IT0=1; EA=1; while(1) xian_shi(times); ;/INT0低電平中斷服務(wù)程序/void intersvr0

17、(void) interrupt 0 using 1 L0=!L0; L1=!L1; L2=!L2; L3=!L3; times +; /最簡單的24小時(shí)顯示#include#include#define unit unsigned int #define unchar unsigned char unsigned char data BUFFER1=0;unsigned char time3=0;unsigned char leddata= 0 xC0, /0 0 xF9, /1 0 xA4, /2 0 xB0, /3 0 x99, /4 0 x92, /5 0 x82, /6 0 xF8,

18、 /7 0 x80, /8 0 x90, /9 0 x88, /A 0 x83, /B 0 xC6, /C 0 xA1, /D 0 x86, /E 0 x8E, /F 0 x89, /H 0 xC7, /L 0 xC8, /n 0 xC1, /u 0 x8C, /P 0 xA3, /o 0 xBF, /- 0 xFF, /熄滅 0 xFF /自定義 ;unsigned char com=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80,;void Delay(unsigned char cnt) while(cnt-);void xian_shi(

19、void) unsigned char i; unsigned int SS=time0+100*time1+10000*time2; for(i=0;i6;i+) P0=leddataSS%10; P2=comi; Delay(200); SS=SS/10; void main(void) P0=0X00; P2=0Xff; EA=1; IT0=1; ET0=1; TMOD=0X01; TH0=0 xec; TL0=0 x78; TR0=1; while(1) xian_shi(); ;/定時(shí)器0中斷服務(wù)程序/void timer0(void) interrupt 1 using 1 TH0

20、=0 xec; TL0=0 x78; BUFFER0=BUFFER0+1; if(BUFFER0=100) time0+; BUFFER0=0; if(time0=60) time0=0; time1+; if(time1=60) time1=0; if(time1=60) time1=0; time2+; if( time2=24) time2=0; 七、實(shí)訓(xùn)心得 高職高專教育培養(yǎng)的是技術(shù)應(yīng)用型人才,學(xué)校為了陪養(yǎng)我們的創(chuàng)新精神和工程實(shí)踐能力,提高我們的綜合素質(zhì),我們進(jìn)行實(shí)訓(xùn),在實(shí)踐中相互學(xué)習(xí)和進(jìn)步。通過實(shí)踐我們更清楚的認(rèn)識(shí)了我們所學(xué)習(xí)專業(yè)在實(shí)踐中的運(yùn)用。也感覺到理論和實(shí)踐的差距。 八、附件單

21、片機(jī)最小系統(tǒng)生成原理圖 附錄資料:不需要的可以自行刪除測量平差程序設(shè)計(jì)角度(度分秒)到弧度AngleToRadian#define PI 3.14159265double AngleToRadian(double angle)int D,M;double S,radian,degree, angle,MS;D=int(angle+0.3);MS=angle-D;M=int(MS)*100+0.3);S=(MS*100-M)*100;degree=D+M/60.0+S/3600.0;radian=degree*PI/180.0;return radian;注意:防止數(shù)據(jù)溢出,要加個(gè)微小量,例如0

22、.3.弧度換角度(度分秒) RadianToAngle#define PI 3.14159265double RadianToAngle(double radian)int D,M;double S,radian,degree,MS,angle;degree=radian*180/PI;D=int(degree);MS=degree-D;M=int(MS*60);S=(MS*60-M)*60;angle=D+M/100.0+S/10000.0;return angle;已知兩點(diǎn)求坐標(biāo)方位角Azimuth#include double Azimuth(double xi,double yi,do

23、uble xj,double yj)double Dx,Dy,S,T;Dx=xj-xi;Dy=yj-yi;S=sqrt(Dx*Dx+Dy*Dy);if(S1e-10) return 0;T=asin(Dy/S);if(Dx0&(Dy0)|T0) T=2*PI+T;return T;4.開辟二維數(shù)組的動(dòng)態(tài)空間的宏#include #define NewArray2D(type,A,i,n,m)A=(type*)malloc(n*sizeof(type*); for(i=0;im;i+) Ai=(type*)malloc(m*sizeof(type); 5.釋放開辟的二維數(shù)組的空間#define

24、FreeSpace(A,i,m)for(i=0;im;i+) free(Ai); free(A); 注意:釋放空間與開辟空間相反,釋放空間是先釋放列,后釋放行.6.矩陣求轉(zhuǎn)置transformmatrixvoid transformmatrix(double *A,double *B,int i,int j)int m,n;for(m=0;m=i;m+)for(n=0;n=j;n+)Bnm=Amn:7.矩陣相乘(mulmatrix)void mulmatrix(double *A,double *B,double *C,int i,int j,int k)int m,n,p;for(m=0;m

25、i;m+)for(n=0;nj;n+)Cmn=0;for(p=0;pk;p+)Cmn+=Amp*Bpn:8.矩陣求逆(countermatrix)#include void countermatrix(double *T, double *s, double *r, double *Q,double *N, double *rt,int n)for(i=0;in;i+)s=Nii;for(k=0;ki;k+)s-=Tki*Tki;Tii=sqrt(s)for(j=i+1;jn;j+)s=Nij;for(k=0;ki;k+)s-=Tki*Tkj;Tij=s/Tii;for(i=0;in;i+)f

26、or(j=0;j=0;i+)rii=1/Tii;for(j=i+1;jn;j+)s=0;for(k=i;kj-1;k+)s-=rik*Tkj;rij=s/Tii;for(i=0;in;i+)for(j=0;jn;j+)rij=0;transformmatrix(r,rt,n,n)mulmatrix(r,rt,Q,n,n)9.平差主程序之讀入數(shù)據(jù)typedef struct POINTchar name8;double x,y;int type;POINT;typedef struct READVALUEPOINT *begin;POINT *end;double value;READVALUE

27、;POINT *GETPOINT(char *name,POINT *pPoint,int nPoint)int i;for(i=0;inPoint;i+)if (strcmp(pP,name)=0)return (pPoint+i) for(i=0;i0)pPoint=(POINT*)malloc(nDirect*sizeof(POINT);if(nDirect0)pDirect=(READVALUE*)malloc(nDirect*sizeof(READVALUE);if(nDistance0)pDistance=(READVALUE*)malloc(nDistance

28、*sizeof(RAADVALUE);fscanf(fp,”%lf,%lf,%lfn”,&mo,&mf,&ms);for(i=0;inKnownPoint;i+)fscanf(fp,”%s,%lf,%lfn”,pP,&pPointi.x,&pPointi.y);type=1;for( ;inPoint;i+)pP=NULL; pPointi.x=0;pPointi.y=0;pPointi.type=0; for(i=0;inDirect;i+)fscanf(fp,”%s,%s,%lfn”,begin,end,&pDirecti.value);pDirec

29、ti.begin=GetPoint(begin,pPoint,nPoint);pDirecti.end=GetPoint(end,pPoint,nPoint);for(i=0;inDistance;i+)fscanf(fp,”%s,%s,%lfn”,begin,end,&pDistancei.value);pDistancei.begin=GetPoint(begin,pPoint,nPoint);pDistancei.end=GetPoint(end,pPoint,nPoint);fclose(fp);10.角度檢驗(yàn)(checkangle)#include int checkangle(do

30、uble angle)int M,S;double MS;if(angle=0&angle360)MS=angle-(int)(angle);if(M6)S=(int)(MS*1000);if(S%106)return 1;return 0;11.前方交會(huì)#define PI=3014159265/*此處調(diào)用程序角度換弧度AngleToRadian*/Qianfang(double XE, double YE, double XF, double YF, doubleDEG, double DEF, double DFG, double DFE, double *DFE, double *DF

31、G)double C,A,B;C=DGE-DGF;A=DEF-DEG;B=DFG-DFE;if(C-2*PI)|(C0&C-PI&CPI&C2*PI)XG=(XE/tan(B)+XF/tan(A)+YE-YF)/(1/tan(A)+ 1/tan(B);YG=(YE/tan(B)+YF/tan(A)-XE+XF)/ (1/tan(A)+ 1/tan(B);12.坐標(biāo)概算全方向法子函數(shù)取出觀測方向GetAllDirectint GetAllDirect(char *name,int nDirect,READVALUE *pDirect, READVALUE *pStation)int i,nCou

32、nt=0;for(i=0;iname,name)=0)pStationnCount.begin=p(pDirectnCount.begin;pStationnCount.end=p(pDirectnCount.end;pStationnCount.value=p(pDirectnCount.value; nCount+;return nCount;坐標(biāo)概算全方向法子程序?qū)崿F(xiàn)流程(coordinate)coordinate (入口參數(shù)設(shè)置)READVALUE pStation50,pObject50;int nCount,i,j,k,m,n,p,nobject;for(i=0;i1)|( nCo

33、unt=1)for(j=0;jtype=1)for(k=0;ktype=0) nobject=GetAllDirect(pStationj.end-name,nDirect,pDirect,pobject)m=-1;n=-1;for(p=0;pname,pP)=0)m=p; if(strcmp(pobjectp.end-name,pStationk.end-name)=0)n=p;if(m=0&n=0)pPointi=pStationk.end-pStationj.end;pStationj.end=pObjectm.value-pObjectn.value; Xe=pPo

34、inti.x; Ye=pPointi.y; Xf=pStationj.end-x; Yf=pStationj.end-y; Lef=pStationj.value; Leg=pStationk.value; Lfe=pObjectm.value; Lfg=pObjectn.value; Qianfang(Xe,Xf,Ye,Yf,Lef,Leg,Lfe,Lfg,*Xg,*Yg;) pStationk.end-x=*xg; pStationk.end-y=*yg; pStationk.end.type=2; 13.坐標(biāo)增量法(calcoordinate)子函數(shù)由端點(diǎn)名稱得邊長值的函數(shù)GetDist

35、ancedouble GetDistance(char *begin,char *end,int nDistance,READVALUE *pDistance)int i;for(i=0;iname,begin)=0&strcmp(pDistancei.end-name,end=0)|(strcmp(pDistancei.begin-name,end)=0&strcmp(pDistancei.end,begin)=0)return pDistancei.value;return -1;/*函數(shù)取出觀測方向GetAllDirect*/void calcoordinate(int nDirect,

36、READVALUE *pDirect,int nDistace,READVALUE *pDistance,int nPoint,POINT *pPoint) int nPoint,nCount,nDirect,nDistance; int m=-1,i,j,k; double x1,y1,x2,y2,A0,A,S,dx,dy; READVALUE*pDirect=NULL; READVALUE pStation50; for(i=0;i0) nCount=GetAllDirect(pP,nDirect,pDirect,pStation50); for(j=0;jtype0)

37、m=j; if(m!=-1) for(k=0;ktype=0) x1=pPointi.x; y1=pPointi.y; x2=pStationj.end-x; y2=pStationj.end-y; A0=Bearing(x1,y1,x2,y2); A=A0-(DMSToRAD(pStationm.value)-DMSToRAD(pStationk.value); if(A2*PI)A=A-2*PI; S=GetDistance(pPointi,pStationk.end,nDistance,pDistance); if(Sx=pPointi.x+dx; pStationk.end-y=pPo

38、inti.y+dy; pStationk.end-type=2; 14.高斯正反算高斯正算:#include #include #define PI 3.14159265double DMSToRAD(double dDMS)int L1,L2;double T,L3;L1=(int)(dDMS+0.3);L2=(int)(dDMS-L1)*100+0.3);L3=(dDMS-L1)*100-L2)*100;T=(L1+L2/60.0+L3/3600.0)*PI/180.0;return T;void PreGausePositive(double B,double L,double L0, double a, double b, double *N, double *l, double *c, double *t, double *X,double *B1) double

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論