




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(PCB實(shí)驗(yàn)報(bào)告目錄實(shí)驗(yàn)一、單片機(jī)間的多機(jī)通信................................................0實(shí)驗(yàn)二、I2C總線應(yīng)用技術(shù)..................................................8實(shí)驗(yàn)三、層次原理圖設(shè)計(jì)...................................................12實(shí)驗(yàn)四、元件封裝的創(chuàng)建...................................................15實(shí)驗(yàn)五、自動(dòng)布局.........................................................17實(shí)驗(yàn)六、開關(guān)控制LED.....................................................21實(shí)驗(yàn)七、中斷計(jì)數(shù)器.......................................................24實(shí)驗(yàn)八、UART.............................................................29實(shí)驗(yàn)一、單片機(jī)間的多機(jī)通信(1)實(shí)驗(yàn)題目采用C語言實(shí)現(xiàn)單片機(jī)間的多機(jī)通信。實(shí)現(xiàn)內(nèi)容:三個(gè)51單片機(jī)進(jìn)行多機(jī)通信。一個(gè)單片機(jī)用于溫度的采集(可采用可變電8個(gè)LED燈循環(huán)顯示,顯示的時(shí)間間隔從主機(jī)中獲得,主機(jī)用于發(fā)送溫度的大小值及循環(huán)顯示的時(shí)間給從機(jī)。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程掌握基于ARMc編程基礎(chǔ)(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;2.KeiluVision4(4)實(shí)驗(yàn)步驟1.1打開Proteus8,選擇isis繪制電路圖,點(diǎn)擊p添加元件AT89C51,BUTTON,CAP,CAP-ELEC,CRYSTAL,RES.1.2繪制電路圖如圖所示:2.1打開KeiluVision5,newproject和newfile2.2編寫代碼:(c語言)/************************************實(shí)驗(yàn)一*主機(jī)*發(fā)送循環(huán)顯示時(shí)間和溫度值給從機(jī)*************************************/#include<reg51.h>#include<string.h>#define_SUCC_0x0f//數(shù)據(jù)傳送成功#define_ERR_0xf0//數(shù)據(jù)傳送失敗#defineucharunsignedchar#defineuintunsignedintuintTime[]={0,1,2,3,4,5,6,7};//循環(huán)顯示時(shí)間間隔(s)uintT[]={22,33,66,77,88,99};sbitKEY1=P3^3;sbitKEY2=P3^5;ucharcount=0;//延時(shí)1ms函數(shù)voiddelay_1ms(uintt){uinty;while(t--)for(y=110;y>0;y--);}//串口初始化函數(shù)voidserial_init(){TMOD=0x20;//定時(shí)器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時(shí)器TI=0;RI=0;}//發(fā)送數(shù)據(jù)函數(shù)voidSEND_data(uint*Buff){TI=0;//發(fā)送數(shù)據(jù)長(zhǎng)度TB8=0;//發(fā)送數(shù)據(jù)幀P2=Buff[count];SBUF=Buff[count];while(!TI);TI=0;count++;count=count%5;}//向指定從機(jī)地址發(fā)送數(shù)據(jù)voidADDR_data(ucharaddr,uint*Buff){uchartemp=0xff;while(temp!=addr)//主機(jī)等待從機(jī)返回其地址作為應(yīng)答信號(hào){TI=0;//發(fā)送從機(jī)地址TB8=1;//發(fā)送地址幀SBUF=addr;while(!TI);TI=0;RI=0;while(!RI);temp=SBUF;RI=0;}SEND_data(Buff);}//main函數(shù)voidmain(){serial_init();while(1){if(KEY1==0){delay_1ms(5);if(KEY1==0){while(!KEY1);ADDR_data(0x01,Time);}}if(KEY2==0){delay_1ms(5);if(KEY2==0){while(!KEY2);ADDR_data(0x02,T);}}}}/************************************實(shí)驗(yàn)一*從機(jī)1*接收主機(jī)發(fā)送的溫度值*************************************/#include<reg51.h>#include<string.h>#include<intrins.h>#defineaddr0x02//從機(jī)2的地址#define_SUCC_0x0f//數(shù)據(jù)傳送成功#define_ERR_0xf0//數(shù)據(jù)傳送失敗#defineuintunsignedint#defineucharunsignedcharunsignedcharBuff[20];//數(shù)據(jù)緩沖區(qū)ucharflag=0;//請(qǐng)求標(biāo)志sbitcs=P1^0;sbitclk=P1^1;sbitdio=P1^2;//串口初始化函數(shù)voidserial_init(){TMOD=0x20;//定時(shí)器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時(shí)器TI=0;RI=0;}//----------------------------------//延時(shí)//-----------------------------------voiddelay(uintx){uinti;while(x--)for(i=0;i<120;i++);}//--------------------------------------//得到ad轉(zhuǎn)結(jié)果//-------------------------------------ucharget_ad_result(){uchari,dat1=0,dat2=0;cs=0;clk=0;dio=1;_nop_();_nop_();clk=1;_nop_();_nop_();clk=0;dio=1;_nop_();_nop_();clk=1;_nop_();_nop_();clk=0;dio=0;_nop_();_nop_();clk=1;dio=1;_nop_();_nop_();clk=0;dio=1;_nop_();_nop_();for(i=0;i<8;i++){clk=1;_nop_();_nop_();clk=0;_nop_();_nop_();dat1=dat1<<1|dio;}for(i=0;i<8;i++){dat2=dat2|((uchar)(dio)<<i);clk=1;_nop_();_nop_();clk=0;_nop_();_nop_();}cs=1;return(dat1==dat2)?dat1:0;}//------------------------------------//主函數(shù)//-------------------------------------voidmain(){uinti=0,j=0;uchartemp=0,temp2=0;ucharaa=0xff;serial_init();while(1){SM2=1;//接收地址幀aa=0xff;while(aa!=addr)//從機(jī)等待主機(jī)請(qǐng)求自己的地址{RI=0;while(!RI){temp=get_ad_result();//溫度采集結(jié)果if(temp!=temp2)P2=temp;}temp2=temp;aa=SBUF;RI=0;}TI=0;//一旦被請(qǐng)求,從機(jī)返回自己地址作為應(yīng)答,等待接收數(shù)據(jù)TB8=0;SBUF=addr;while(!TI);TI=0;SM2=0;//接收數(shù)據(jù)幀RI=0;while(!RI);Buff[i]=SBUF;//數(shù)據(jù)幀RI=0;P2=Buff[i];//查看接收到的數(shù)據(jù)}}/************************************實(shí)驗(yàn)一*從機(jī)2*接收主機(jī)發(fā)送的循環(huán)顯示時(shí)間*************************************/#include<reg51.h>#include<string.h>#include<intrins.h>#defineaddr0x01//從機(jī)2的地址#define_SUCC_0x0f//數(shù)據(jù)傳送成功#define_ERR_0xf0//數(shù)據(jù)傳送失敗#defineuintunsignedint#defineucharunsignedcharuintcodesTable[]={0,10,20,40,60,80,100,150};uintBuff[20];//數(shù)據(jù)緩沖區(qū)ucharlight=0x00;uintspeed=0;uinttcount=0;//串口初始化函數(shù)voidserial_init(){TMOD=0x20;//定時(shí)器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時(shí)器TI=0;RI=0;}//----------------------------------//延時(shí)//-----------------------------------voidT0_INT()interrupt1{if(tcount++<speed)return;tcount=0;P1=light;light=_crol_(light,1);}//------------------------------------//主函數(shù)//-------------------------------------voidmain(){uinti=0,j=0;uintm;ucharaa=0xff;serial_init();IE=0X82;TR0=1;while(1){SM2=1;//接收地址幀aa=0xff;while(aa!=addr)//從機(jī)等待主機(jī)請(qǐng)求自己的地址{RI=0;while(!RI);aa=SBUF;RI=0;}TI=0;//一旦被請(qǐng)求,從機(jī)返回自己地址作為應(yīng)答,等待接收數(shù)據(jù)TB8=0;SBUF=addr;while(!TI);TI=0;SM2=0;//接收數(shù)據(jù)幀RI=0;while(!RI);m=SBUF;//數(shù)據(jù)幀RI=0;speed=sTable[m];P2=m;//查看接收到的數(shù)據(jù)light=0x01;}}2.3compilefile,生成.HEX文件(5)實(shí)驗(yàn)小結(jié)本次實(shí)驗(yàn),實(shí)驗(yàn)二、I2C總線應(yīng)用技術(shù)(1)實(shí)驗(yàn)題目實(shí)驗(yàn)題目:采用C語言完成I2C的通信。實(shí)現(xiàn)內(nèi)容:放置兩個(gè)I2C芯片,一個(gè)是24C01存儲(chǔ)器,一個(gè)是24C02,分別向兩個(gè)芯片中寫入0~16,17~33。然后讀出相加并將值寫入單片機(jī)相關(guān)單元。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;2.KeiluVision5(4)實(shí)驗(yàn)步驟1.1打開Proteus8,選擇isis繪制電路圖,點(diǎn)擊p添加元件AT89C51,BUTTON,CAP,CAP-ELEC,CRYSTAL,RES.1.2繪制電路圖如圖所示:2.1打開KeiluVision5,newproject和newfile2.2編寫代碼:(c語言)//----------------------------------------------------//實(shí)驗(yàn)二、I2C總線應(yīng)用技術(shù)//采用C語言完成I2C的通信。//實(shí)現(xiàn)內(nèi)容:放置兩個(gè)I2C芯片,一個(gè)是24C01存儲(chǔ)器,一個(gè)是24C02,//分別向兩個(gè)芯片中寫入0~16,17~33。然后讀出相加并將值寫入單片機(jī)相關(guān)單元。//---------------------------------------------------#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineNOP4(){_nop_();_nop_();_nop_();_nop_();}sbitSCL=P3^0;sbitSDA=P3^1;uchar*ptr=0x30;//保存相加結(jié)果的地址//-------------------------------------//延時(shí)函數(shù)//-------------------------------------voiddelayms(uintx){uchari;while(x--)for(i=0;i<120;i++);}//--------------------------------//開始//--------------------------------voidstart(){SDA=1;SCL=1;NOP4();SDA=0;NOP4();SCL=0;}//-----------------------------------------//停止//-----------------------------------------voidstop(){SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;}//----------------------------------------------//寫完等待從器件應(yīng)答//----------------------------------------------bitACK(void){uchari;SCL=1;NOP4();i=SDA;SCL=1;NOP4();SCL=0;if(i==1)return0;elsereturn1;}//-----------------------------------------//讀完發(fā)送停止讀的信號(hào)//-----------------------------------------voidNO_ACK(){SDA=1;SCL=1;NOP4();SCL=0;SDA=0;}//-------------------------------------//寫字節(jié)//-------------------------------------voidI2C_writebyte(uchard){uinti;for(i=0;i<8;i++){d<<=1;SDA=CY;_nop_();SCL=1;NOP4();SCL=0;}ACK();}//---------------------------------//讀字節(jié)//--------------------------------ucharI2C_readbyte(){uchari,d;for(i=0;i<8;i++){SCL=1;d<<=1;d|=SDA;SCL=0;}returnd;}//--------------------------//寫地址及數(shù)據(jù)//--------------------------voidI2C_write_addr(ucharsl,ucharaddr,uchardat){start();I2C_writebyte(sl);I2C_writebyte(addr);I2C_writebyte(dat);stop();delayms(10);}//---------------------------//讀當(dāng)前地址的數(shù)據(jù)//-----------------------------ucharI2C_read_current(uchars){uchard;start();I2C_writebyte(s+0x01);d=I2C_readbyte();NO_ACK();stop();returnd;}//---------------------------//讀指定地址的數(shù)據(jù)//-----------------------------ucharI2C_read_random(ucharsl,ucharaddr){uchard;
start();I2C_writebyte(sl);I2C_writebyte(addr);d=I2C_read_current(sl);returnd;}//---------------------------//主函數(shù)//---------------------------voidmain(){uchari;uintdat1=0;uintdat2=17;ucharsl[]={0xa0,0xaE};for(i=0;i<16;i++){I2C_write_addr(sl[0],i,dat1);I2C_write_addr(sl[1],i,dat2);dat1++;dat2++;}for(i=0;i<16;i++){dat1=I2C_read_random(sl[0],i);dat2=I2C_read_random(sl[1],i);dat2=dat2+dat1;*ptr=dat2;P2=dat2;delayms(100);ptr++;}while(1);}2.3compilefile,生成.HEX文件2.4proteus下運(yùn)行仿真,暫停,查看cpu內(nèi)存:(6)實(shí)驗(yàn)小結(jié)本次實(shí)驗(yàn)?zāi)康?掌握I2C總線應(yīng)用技術(shù),用單片機(jī)通過總線控制2塊I2C芯片。難點(diǎn)是通過程序模擬I2CI2C設(shè)定每個(gè)芯片的地址,主機(jī)在發(fā)送的幀中包含地址信息(A2A1A0).實(shí)驗(yàn)三、層次原理圖設(shè)計(jì)(1)實(shí)驗(yàn)題目完成P126生成元件報(bào)表、網(wǎng)絡(luò)表。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus層次原理圖設(shè)計(jì)(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;(4)實(shí)驗(yàn)步驟原電路原理圖1.創(chuàng)建子電路經(jīng)過分析,決定對(duì)選取其中的一部分電路作為子電路進(jìn)行層次設(shè)計(jì)。使用子電路工具建立層次圖。2.“GotoChild默認(rèn)組合鍵為“Ctrl+C”),這時(shí)ISIS加載一空白的子圖頁3.編輯子電路4.子電路編輯完后,選擇菜單命令【Design】→【GotoSheet8-50所示對(duì)話框,選擇“Rootsheet1”,然后單擊“OK”按鈕,即使ISIS回到主設(shè)計(jì)圖頁。5.電氣規(guī)則檢查6.生成網(wǎng)絡(luò)表。(5)實(shí)驗(yàn)小結(jié)本次實(shí)驗(yàn),ISIS支持層次設(shè)計(jì)。對(duì)于一個(gè)較大、較復(fù)雜的電路圖,不可能一次完成,也不大提高設(shè)計(jì)速度,也就是將這種復(fù)雜的電路圖根據(jù)功能劃分為幾個(gè)模塊,由不同的人員來分別完成各個(gè)模塊,做到多層次并行設(shè)計(jì)。實(shí)驗(yàn)四、元件封裝的創(chuàng)建(1)實(shí)驗(yàn)題目完成實(shí)驗(yàn)二的PCB設(shè)計(jì),要求進(jìn)行元件的布局、手工布線。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;(4)實(shí)驗(yàn)步驟1.實(shí)驗(yàn)二電路原理圖2.生成網(wǎng)絡(luò)表3.在ARES中導(dǎo)入網(wǎng)絡(luò)表文件。4.ARES左側(cè)的工具箱中選擇口底部左下角下拉列表框中選擇“BoardEdge”(黃色),在適當(dāng)?shù)奈恢卯嬕粋€(gè)矩形,作為板框。5.自動(dòng)布局6.手工布線。(6)實(shí)驗(yàn)小結(jié)Proteus軟件提供自動(dòng)布局和手工布局兩種方式。在進(jìn)行布局時(shí),推薦使用自動(dòng)布局和手工布局相結(jié)合的方式,即先使用自動(dòng)布局,然后進(jìn)行手工調(diào)整實(shí)驗(yàn)五、自動(dòng)布局(1)實(shí)驗(yàn)題目完成實(shí)驗(yàn)一的PCB設(shè)計(jì)。要求進(jìn)行元件的布局、自動(dòng)布線。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;(4)實(shí)驗(yàn)步驟1.實(shí)驗(yàn)一電路原理圖:把單片機(jī)的時(shí)鐘復(fù)位電路設(shè)計(jì)成子電路2.為元器件指定相應(yīng)的封裝。2.1元件封裝的創(chuàng)建本次實(shí)驗(yàn)用到的8段數(shù)碼管在packagelibrary該器件的封裝并添加進(jìn)user庫。2.2給數(shù)碼管指定自己的封裝3.檢查電器規(guī)則4.生成元件列表(略)5.自動(dòng)布局6.手動(dòng)調(diào)整7.自動(dòng)布線(5)實(shí)驗(yàn)小結(jié)ProteusARES90°或45°在1~8層上布線。在電子世界最近的PCB軟件評(píng)論上排列A類。布線參數(shù)設(shè)置好ProteusARES提供擇【Tools】→【AutoRouter】菜單項(xiàng),或者單擊工具按鈕即可彈出如圖9-38所示的自動(dòng)布線設(shè)置對(duì)話框本次實(shí)驗(yàn)難點(diǎn)在于元器件封裝的創(chuàng)建和指定。因?yàn)閜roteus版本不同,功能有所變動(dòng),課件上的方法有些不適用,后來經(jīng)過查找資料最后成功完成。實(shí)驗(yàn)六、開關(guān)控制LED(1)實(shí)驗(yàn)題目ARM的P0.8口接按鈕,P0.9口接LED等,通過開關(guān)控制LED的亮、滅。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程掌握基于ARMc編程基礎(chǔ)(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;2.KeiluVision4(4)實(shí)驗(yàn)步驟1.1打開Proteus8,選擇isis繪制電路圖,點(diǎn)擊p添加元件LPC21011.2繪制電路圖如圖所示:2.1打開KeiluVision5,newproject和newfile2.2編寫代碼:(c語言)/***************************************************實(shí)驗(yàn)六、開關(guān)控制LED*ARM的P0.8口接按鈕,P0.9口接LED等,通過開關(guān)控制LED的亮、滅。***************************************************/#include<LPC21XX.H>#defineP0_10X100;//----------------------//延時(shí)//----------------------voiddelay(){unsignedvolatilelongi;for(i=0;i<10000;i++);}intmain(){intp01state;PINSEL0=0;IO0DIR=0X000200;IO0SET=0X000200;while(1){p01state=IO0PIN&P0_1;if(p01state==0){IO0CLR=0X000200;delay();}else{IO0SET=0x000200;delay();}}}2.3compilefile,生成.HEX文件(5)實(shí)驗(yàn)小結(jié)ARM需要初始化很多的功率寄存器和引腳設(shè)置的寄存器這在STC的51上都是沒有的但是在啟動(dòng)代碼里都幫你做好了編程的時(shí)候只需要對(duì)引腳和外設(shè)進(jìn)行初始化就可以如果需要改變運(yùn)行的頻率再去該功率寄存器。首選你需要設(shè)置引腳的功能模塊ARM很多引腳功能都是復(fù)用的你要用UART或者普通IO的功能必須要設(shè)置引腳的功能模塊在UART中你也需要設(shè)置UART相應(yīng)的寄存器比如速度模式等寄存器另外如果你選用新的一些ARM芯片例如CORTEXM系列的那么你還必須要設(shè)置使能這個(gè)IOCONGPIOUART功能的時(shí)鐘舉個(gè)例子sbitled=P2^0;這句在ARM里就需要首先設(shè)置引腳為GPIO功能在設(shè)置它為輸出功能再給它高電平才能實(shí)現(xiàn)首先來說說PINSEL0和PINSEL1時(shí)使用,所以就需要選擇引腳功能,用的就是這兩個(gè)寄存器,具體細(xì)節(jié)就不說了,自己看Datasheet吧…LPC2103中PINSEL0管PIN0.0-PIN0.15,PINSEL1管PIN0.16-PIN0.31。值的設(shè)定基本是00GPIO01第一復(fù)用功能02第二復(fù)用功能03第三復(fù)用功能這兩個(gè)寄存器的復(fù)位值都是0×00000000,也就是所有引腳復(fù)位都是做GPIO用的。再下來是GPIO的控制寄存器了。IOPIN管腳值寄存器??梢杂脕碜x取當(dāng)前的管腳值,賦值也可以控制管腳輸出。IOSET用來管腳置位的寄存器。寫0無效,寫1管腳置高電平。IOCLR用來管腳清除的寄存器。寫0無效,寫1管腳置低電平。IODIR管腳方向控制寄存器。0對(duì)應(yīng)輸入,1對(duì)應(yīng)輸出。復(fù)位值:0×00000000(所有管腳復(fù)位為輸入)#defineLED1(1<<17)ARM中操作單個(gè)IO不能逐位操作只能通過與運(yùn)算和或運(yùn)算操作(1<<5)代表1向左移五位二進(jìn)制00000001左移5位后變成00100000這樣就GPIO的第5位輸出1其他輸出0向外輸出通過GPIO_PB|=(1<<5)來只把第5位置1,不影響其他位。通過GPIO_PB&=~(1<<5)來清零第5位同理可以用于其他IO操作實(shí)驗(yàn)七、中斷計(jì)數(shù)器(1)實(shí)驗(yàn)題目將三個(gè)按鈕接到LPC2106的三個(gè)中斷EINT0、EINT1和EINT2上,通過LED顯示顯示中斷發(fā)生的次數(shù)。當(dāng)外部中斷0有效時(shí),進(jìn)行加11有效時(shí),進(jìn)行減1操作;當(dāng)外部中斷2有效時(shí),進(jìn)行清零操作。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程掌握基于ARMc編程基礎(chǔ)(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;2.KeiluVision4(4)實(shí)驗(yàn)步驟1.1打開Proteus8,選擇isis繪制電路圖,點(diǎn)擊p添加元件LPC21011.2繪制電路圖如圖所示:2.1打開KeiluVision5,newproject和newfile2.2編寫代碼:(c語言)/***************************實(shí)驗(yàn)七、中斷計(jì)數(shù)器*將三個(gè)按鈕接到LPC2106的三個(gè)中斷EINT0EINT1和EINT2LED顯示顯示中斷發(fā)生的次數(shù)。*當(dāng)外部中斷0有效時(shí),進(jìn)行加1操作;當(dāng)外部中斷1有效時(shí),進(jìn)行減1操作;當(dāng)外部中斷2有效時(shí),進(jìn)行清零操作。*************************/#include"LPC21XX.h"#defineuint32int#defineuint8unsignedchar#defineSPI_CS0x00000100/*P0.8*/#defineSPI_DATA0x00000040/*P0.6*/#defineSPI_CLK0x00000010/*P0.4*/#defineSPI_IOCON0x00000150/*SPI接口的I/O設(shè)置字也就是將P0.4、P0.6、P0.6設(shè)置為輸出*/#defineLEDCON0x00002000//P0.13intcount=5;//初始計(jì)數(shù)值voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<25000;i++);}/*向74HC595發(fā)送一個(gè)字節(jié)數(shù)據(jù);發(fā)送數(shù)據(jù)時(shí),高位先發(fā)送*/voidHC595_SendData(uint8dat){uint8i;IOCLR0=SPI_CS;//SPI_CS=0;for(i=0;i<8;i++)//發(fā)送8位數(shù)據(jù){IOCLR0=SPI_CLK;//SPI_CLK=0/*設(shè)置SPI的DATA輸出值*/if((dat&0x80)!=0)IOSET0=SPI_DATA;elseIOCLR0=SPI_DATA;dat=dat<<1;IOSET0=SPI_CLK;//SPI_CLK=1}IOSET0=SPI_CS;//SPI_CS=1,輸出顯示數(shù)據(jù)}void__irqIRQ_Eint1(void){uint32i;//i=VICIRQStatus;//*p=i;i=IO0PIN;if((i&LEDCON)==0){IOSET0=LEDCON;}else{IOCLR0=LEDCON;}count--;while((EXTINT&0x02)!=0)//等待外部中斷信號(hào)恢復(fù)為高電平(若信號(hào)為低,則中斷標(biāo)志會(huì)一直置位){EXTINT=0x02;}VICVectAddr=0x00;//在終端發(fā)生時(shí)硬件會(huì)自動(dòng)將對(duì)應(yīng)的地址VICVectAddr?裝入VICVectAddr,故退出時(shí)要清零/*在退出中斷服務(wù)程序時(shí)要清零相應(yīng)外設(shè)的中斷標(biāo)VICVectAddr寄存器,為響應(yīng)下次中斷作好準(zhǔn)備。*/}void__irqIRQ_Eint2(void){uint32i;//i=VICIRQStatus;//*p=i;i=IO0PIN;if((i&LEDCON)==0){IOSET0=LEDCON;}else{IOCLR0=LEDCON;}count=0;while((EXTINT&0x04)!=0)//等待外部中斷信號(hào)恢復(fù)為高電平(若信號(hào)為低,則中斷標(biāo)志會(huì)一直置位){EXTINT=0x04;}VICVectAddr=0x00;//在終端發(fā)生時(shí)硬件會(huì)自動(dòng)將對(duì)應(yīng)的地址VICVectAddr?裝入VICVectAddr,故退出時(shí)要清零/*在退出中斷服務(wù)程序時(shí)要清零相應(yīng)外設(shè)的中斷標(biāo)VICVectAddr寄存器,為響應(yīng)下次中斷作好準(zhǔn)備。*/}void__irqIRQ_Eint0(void){uint32i;//i=VICIRQStatus;//*p=i;i=IO0PIN;if((i&LEDCON)==0){IOSET0=LEDCON;}else{IOCLR0=LEDCON;}count++;while((EXTINT&0x01)!=0)//等待外部中斷信號(hào)恢復(fù)為高電平(若信號(hào)為低,則中斷標(biāo)志會(huì)一直置位){EXTINT=0x01;}VICVectAddr=0x00;//在終端發(fā)生時(shí)硬件會(huì)自動(dòng)將對(duì)應(yīng)的地址VICVectAddr?裝入VICVectAddr,故退出時(shí)要清零/*在退出中斷服務(wù)程序時(shí)要清零相應(yīng)外設(shè)的中斷標(biāo)VICVectAddr寄存器,為響應(yīng)下次中斷作好準(zhǔn)備。*/}intmain(void){Constuint8DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};PINSEL0=0xa0000000;//設(shè)置所有引腳連接GPIOPINSEL1=0x00000001;IO0DIR=LEDCON|SPI_IOCON;//設(shè)置SPI控制口為輸出IO0CLR=LEDCON;IO0SET=LEDCON;EXTMODE=EXTMODE|0x01;//邊緣觸發(fā)EXTPOLAR=EXTPOLAR&0x0e;//下降沿觸發(fā)*//****************設(shè)置向量中斷控制器****************************/VICIntSelect=VICIntSelect&(~(7<<14));//EINT120中斷分配為IRQ中斷VICVectCntl1=0x20|15;//EINT1中斷分配為向量IRQ通道1VICVectCntl2=0x20|16;VICVectCntl3=0x20|14;VICVectAddr1=(uint32)IRQ_Eint1;//向量IRQ通道1的中斷服務(wù)程序地址為Eint1_ISRVICVectAddr2=(uint32)IRQ_Eint2;VICVectAddr3=(uint32)IRQ_Eint0;VICIntEnable=(7<<14);//EINT1中斷使能while(1){HC595_SendData(DISP_TAB[count]);//輸出LED顯示數(shù)據(jù)DelayNS(5);}return0;}//在project選項(xiàng)里面勾選usememorylayoutfromtargetdialog!2.3compilefile,生成.HEX文件(5)實(shí)驗(yàn)小結(jié)74HC595簡(jiǎn)介引腳說明:1、Q0…Q7為8位并行數(shù)據(jù)輸出2、Q7’第9腳,串行數(shù)據(jù)輸出,用于級(jí)聯(lián)3、MR第10腳主復(fù)位(低電平)4、SH_CP第11腳移位寄存器時(shí)鐘輸入5、ST_CP第12腳存儲(chǔ)寄存器時(shí)鐘輸入6、OE第13腳輸出有效(低電平)7、DS第14腳串行數(shù)據(jù)輸入LPC21XX外部中斷輸入概述LPC2106具有3路外部中斷,可以設(shè)置為2種類型:邊沿觸發(fā):上升沿觸發(fā)下降沿觸發(fā)電平觸發(fā):高電平觸發(fā)低電平觸發(fā)本次實(shí)驗(yàn)用到一些比較難懂的中斷寄存器:中斷選擇寄存器(VICIntSelect):位31…1817…210功能保留A/D轉(zhuǎn)外部ARM內(nèi)—WDT換器中斷3核寄存器中每一位控制著一個(gè)中斷源,各中斷源的位置與中斷源列表所示相同。向某位寫入1時(shí),對(duì)應(yīng)中斷源產(chǎn)生的中斷為FIQ中斷,否則為IRQ中斷向量IRQ中斷相關(guān)寄存器向量地址寄存器(VICVectAddr0~15):該寄存器中存放對(duì)應(yīng)優(yōu)先級(jí)向量IRQ中斷服務(wù)程序的入口地址。位765[4..0]功能--EN中斷源序號(hào)VICVectCntlx[4:0]:分配給此優(yōu)先級(jí)向量IRQ中斷的中斷源序號(hào);VICVectCntlx[5]:該位為1,使能當(dāng)前優(yōu)先級(jí)的向量IRQ中斷。否則為禁止。向量控制寄存器(VICVectCntl0~15):位[31:0]功能中斷服務(wù)程序入口地址使用VIC的注意要點(diǎn)如果在片內(nèi)RAM部RAM模式;將多個(gè)中斷源設(shè)置為FIQ,將增加中斷響應(yīng)延時(shí),所以建議FIQ中斷只有一個(gè)中斷源;ADS1.2規(guī)定在定義中斷服務(wù)函數(shù)時(shí)必須加入關(guān)鍵字“__irq”,保證函數(shù)返回時(shí)會(huì)切換處理器模式;在退出中斷服務(wù)程序時(shí)要清零相應(yīng)外設(shè)的中斷標(biāo)志,以及VICVectAddr寄存器,為響應(yīng)下次中斷作好準(zhǔn)備實(shí)驗(yàn)八、UART(1)實(shí)驗(yàn)題目采用中斷實(shí)現(xiàn)通過串口0發(fā)送“HelloWorld!”,然后在虛擬終端接收器上查看。(2)實(shí)驗(yàn)?zāi)康恼莆誴roteus和軟件環(huán)境——keilC的聯(lián)機(jī)調(diào)試過程掌握基于ARMUART編程基礎(chǔ)(3)實(shí)驗(yàn)設(shè)備1.Proteus8Professional仿真開發(fā)環(huán)境;2.KeiluVision4(4)實(shí)驗(yàn)步驟1.1打開Proteus8,選擇isis繪制電路圖,點(diǎn)擊p添加元件LPC21011.2繪制電路圖如圖所示:2.1打開KeiluVision5,newproject和newfile2.2編寫代碼:(c語言)/**************************實(shí)驗(yàn)八、UART*采用中斷實(shí)現(xiàn)通過串口0發(fā)送“HelloWorld!”,然后在虛擬終端接收器上查看。*************************/#include"lPC21XX.H"/*============================================================LPC21XX串口使用接收發(fā)送中斷==============================================================*/#defineFosc11059200//晶振頻率,10MHz~25MHz,應(yīng)當(dāng)與實(shí)際一至#defineFcclk(Fosc*5)//Fosc的整數(shù)倍(1~32)<=60MHZ#defineFcco(Fcclk*4)//CCOFcclk的24816156MHz~320MHz#defineFpclk(Fcc
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度跨境電商商業(yè)合作保密協(xié)議書
- 二零二五年度醫(yī)藥研發(fā)中心研究員勞動(dòng)合同
- 小學(xué)英語亮點(diǎn)大試卷上冊(cè)
- 2025至2031年中國(guó)通過式擠水機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 新收入準(zhǔn)則-會(huì)計(jì)與“合同”法共舞【會(huì)計(jì)實(shí)務(wù)經(jīng)驗(yàn)之談】
- 小學(xué)英語AENT測(cè)試卷
- 2025至2031年中國(guó)經(jīng)濟(jì)型油泵牙科椅行業(yè)投資前景及策略咨詢研究報(bào)告
- 送甲醇合同范本
- 造價(jià)咨詢工作合同范本
- 分級(jí)基金合同范本
- 土木工程材料課件(精選優(yōu)秀)
- 兒童期創(chuàng)傷量表
- 拗九節(jié)班會(huì)方案
- 2022年八大員的勞務(wù)員考試題及答案
- DLT5210.4-2018熱工施工質(zhì)量驗(yàn)收表格
- 醫(yī)院實(shí)習(xí)護(hù)士轉(zhuǎn)科表
- 2023年最新的郭氏宗祠的對(duì)聯(lián)大全
- 《中國(guó)古代文學(xué)史》宋代文學(xué)完整教學(xué)課件
- 新部編人教版四年級(jí)下冊(cè)道德與法治全冊(cè)教案(教學(xué)設(shè)計(jì))
- 物業(yè)服務(wù)企業(yè)市場(chǎng)拓展戰(zhàn)略規(guī)劃課件
- 2018年青海大學(xué)碩士論文格式模板
評(píng)論
0/150
提交評(píng)論