ARM設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
ARM設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
ARM設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
ARM設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
ARM設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

目錄實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)軟件,硬件實(shí)驗(yàn)題目及要求(設(shè)計(jì)要求)軟件時(shí)鐘設(shè)計(jì)總體方案軟件時(shí)鐘的電路原理圖程序流程圖及C程序(軟件部分)Proteus仿真圖(硬件部分)一實(shí)驗(yàn)?zāi)康?。?yīng)用所學(xué)的ARM知識(shí)設(shè)計(jì)一個(gè)實(shí)時(shí)時(shí)鐘掌握LPC2106中斷處理,RTC的使用。二實(shí)驗(yàn)軟件,硬件。軟件:proteus6.9仿真軟件,ARM開發(fā)環(huán)境ADS.硬件:WINDOW2000/XPPC機(jī)一臺(tái)。三實(shí)驗(yàn)題目及要求(設(shè)計(jì)要求)。題目:帶報(bào)警功能并且可以調(diào)節(jié)時(shí)間的實(shí)時(shí)時(shí)鐘。要求:1,實(shí)時(shí)時(shí)間可通過(guò)按鍵選擇調(diào)節(jié)。2,可以通過(guò)按鍵設(shè)定報(bào)警時(shí)間。3,當(dāng)達(dá)到報(bào)警時(shí)間時(shí),蜂鳴器響一下,LED燈點(diǎn)亮。4,報(bào)警時(shí)間和實(shí)時(shí)時(shí)間通過(guò)液晶模塊LCD1602顯示四軟件時(shí)鐘設(shè)計(jì)總體方案本實(shí)驗(yàn)是基于LPC2106ARM處理器而設(shè)計(jì)的實(shí)時(shí)時(shí)鐘,綜合性較強(qiáng),涉及到RTC外部中斷,引腳的GPIO功能,C語(yǔ)言編程等知識(shí)。首先要定義P0口為基本I\O功能,然后通過(guò)引腳功能選擇寄存器PINSEL0及PINSEL1定義輸入輸出外部中斷口所在的位,另外還要對(duì)外部中斷進(jìn)行初始化,其中有規(guī)定他們的優(yōu)先級(jí),中斷觸發(fā)方式,中斷地址分配,本實(shí)驗(yàn)采用液晶模塊LCD1602同時(shí)顯示實(shí)時(shí)時(shí)間和報(bào)警時(shí)間,同樣要對(duì)他們進(jìn)行初始化,包括檢查總線忙與閑,傳送地址,傳送數(shù)據(jù)及顯示函數(shù)的編程、LPC2106微控制器自帶有一個(gè)實(shí)時(shí)時(shí)鐘RTC帶日歷和時(shí)鐘功能,要使用它也要進(jìn)行一下的基本操作:設(shè)置RTC基準(zhǔn)時(shí)鐘分頻器初始化RTC的時(shí)鐘值如,YEAR,MONTH,HOUR等啟動(dòng)RTC即CCR的CLKEN位職位讀取完整時(shí)間寄存器值或等待中斷。陳述完以上的模塊初始化后,下面簡(jiǎn)要說(shuō)明一下程序的流程先調(diào)用以上各個(gè)模塊的初始化函數(shù)lcd_int(),RTCint()然后開啟RTC時(shí)鐘,并調(diào)用LCD顯示函數(shù)SendTimetRtc(),如果沒(méi)用中斷發(fā)生就判斷實(shí)時(shí)時(shí)間是否與以設(shè)定的報(bào)警時(shí)間相同,如果相同就馬上接通蜂鳴器報(bào)警并且點(diǎn)亮LED燈。假如有中斷發(fā)生,在無(wú)效狀態(tài)下,馬上給中斷標(biāo)志寄存器EXTINT對(duì)應(yīng)位,然后寫1清零,然后轉(zhuǎn)到中斷服務(wù)程序。本實(shí)驗(yàn)設(shè)定7種系統(tǒng)狀態(tài)正常運(yùn)行:0態(tài)設(shè)定RTC的HOUR1態(tài)SEC2態(tài)MIN3態(tài)ALHOUR4態(tài)ALSEC5態(tài)ALMIN6態(tài)電路中通過(guò)三個(gè)按鈕開關(guān)與三個(gè)中斷eint的輸入端相連,對(duì)應(yīng)也有eint0,eint1,eint3三個(gè)中斷服務(wù)程序,當(dāng)eint2

端按下時(shí),就轉(zhuǎn)到eint2中斷服務(wù)程序,它的功能就是設(shè)定系統(tǒng)當(dāng)前所取的狀態(tài),也就是所選擇實(shí)時(shí)時(shí)鐘和報(bào)警時(shí)間的時(shí),分,秒,按一下,狀態(tài)就自增一,eint0,eint1的中斷服務(wù)程序都是調(diào)節(jié)時(shí)間不同的是一個(gè)以加1調(diào)節(jié),一個(gè)以減2調(diào)節(jié)。按下一次就加一次時(shí)間值,但具體是對(duì)HOUR,SEL,MIN,ALHOUR,ALMIN,ALSEL中的哪一個(gè)調(diào)節(jié)那還得看eint2觸發(fā)下系統(tǒng)所處的狀態(tài)所以只有在eint2發(fā)生的基礎(chǔ)上eint0,eint1發(fā)生才有意義。在判斷狀態(tài)是我靈活的使用了C語(yǔ)言開關(guān)語(yǔ)句——switch,可以優(yōu)化程序使程序看起來(lái)更緊湊,一目了然。五軟件時(shí)鐘的電路原理圖六程序流程圖及C程序(軟件部分)#include"config.h"#definers(1<<8)#definerw(1<<9)#defineen(1<<10)#definebusy(1<<7)#defineFPCLK2764800Luint8change;uint8txt[]={"ALM:"};uint8MESSAGE[]={"RTC:"};/**********************************外部中斷*************************************/void__irqeint0(void)//向量中斷開始,說(shuō)明有外部中斷 { switch(change) { case1:{while(EXTINT&(1<<0))EXTINT=1<<0;VICVectAddr=0;ALSEC++;if(ALSEC>59)ALSEC=0;break;} case2:{while(EXTINT&(1<<0))EXTINT=1<<0;VICVectAddr=0;ALMIN++;if(ALMIN>59)ALMIN=0;break;} case3:{while(EXTINT&(1<<0))EXTINT=1<<0;VICVectAddr=0;ALHOUR++;if(ALHOUR>23)ALHOUR=0;break;} case4:{while(EXTINT&(1<<0))EXTINT=1<<0;VICVectAddr=0;SEC++;if(SEC>23)SEC=0;break;} case5:{while(EXTINT&(1<<0))EXTINT=1<<0;VICVectAddr=0;MIN++;if(MIN>23)MIN=0;break;} case6:{while(EXTINT&(1<<0))EXTINT=1<<0;VICVectAddr=0;HOUR++;if(HOUR>23)HOUR=0;break;} } } void__irqeint1(void)//向量中斷開始,說(shuō)明有外部中斷 { switch(change) { case1:{while(EXTINT&(1<<1))EXTINT=1<<1;VICVectAddr=0;ALSEC--;if(ALSEC==0XFF)ALSEC=59;break;} case2:{while(EXTINT&(1<<1))EXTINT=1<<1;VICVectAddr=0;ALMIN--;if(ALMIN==0XFF)ALMIN=59;break;} case3:{while(EXTINT&(1<<1))EXTINT=1<<1;VICVectAddr=0;ALHOUR--;if(ALHOUR==0XFF)ALHOUR=23;break;} case4:{while(EXTINT&(1<<1))EXTINT=1<<1;VICVectAddr=0;SEC--;if(SEC==0XFF)SEC=59;break;} case5:{while(EXTINT&(1<<1))EXTINT=1<<1;VICVectAddr=0;MIN--;if(MIN==0XFF)MIN=59;break;} case6:{while(EXTINT&(1<<1))EXTINT=1<<1;VICVectAddr=0;HOUR--;if(HOUR==0XFF)HOUR=23;break;} } }void__irqeint2(void) //向量中斷開始,說(shuō)明有外部中斷 { change++; if(change>6) change=0; while(EXTINT&(1<<2))//等待extint[2]變成1 EXTINT=1<<2; //往extint[1]寫1清除中斷 VICVectAddr=0; //向量中斷結(jié)束 }/****************************LCD**************************************//*****************************************************************************名稱:WrOp()*功能:寫函數(shù)****************************************************************************/voidChkBusy(){ IODIR=0x700; //設(shè)置P0.8~P0.10為輸出 while(1) { IOCLR=rs; //命令選擇 IOSET=rw; //寫操作 IOSET=en; //使能有效 if(!(IOPIN&busy))break; IOCLR=en; //使能無(wú)效 } IODIR=0x7ff; //設(shè)置P0.0~P0.10為輸出}/*****************************************************************************名稱:WrOp()*功能:寫命令函數(shù)****************************************************************************/voidWrOp(uint8dat){ ChkBusy(); //判忙 IOCLR=rs; //全部清零,命令選擇 IOCLR=rw; //寫選擇 IOCLR=0xff; //先清零 IOSET=dat; //再送數(shù) IOSET=en; //使能有效 IOCLR=en; //使能無(wú)效}/*****************************************************************************名稱:WrDat()*功能:寫數(shù)據(jù)函數(shù)****************************************************************************/voidWrDat(uint8dat) { ChkBusy(); //判忙 IOSET=rs; //數(shù)據(jù)選擇 IOCLR=rw; //寫選擇 IOCLR=0xff; //先清零 IOSET=dat; //再送數(shù) IOSET=en; //使能有效 IOCLR=en; //使能無(wú)效}/*****************************************************************************名稱:lcd_init()*功能:lcd初始化函數(shù)****************************************************************************/voidlcd_init(void){ WrOp(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣 WrOp(0x06); //讀/寫后地址加一,光標(biāo)加一 WrOp(0x0c); //開顯示,不顯示光標(biāo),光標(biāo)不閃爍}voidDisText(uint8addr,uint8*p){ WrOp(addr); //調(diào)用寫命令函數(shù) while(*p!='\0')WrDat(*(p++));}/******************************************************//函數(shù)名稱:voidlcd_string(uchar*p,ucharflag)//函數(shù)功能:1602LCD顯示函數(shù)//參數(shù)功能:*p--顯示數(shù)據(jù)首地址;// flag--顯示行數(shù)******************************************************/voidlcd_string(uint8*p,uint8flag){ if(flag==1) { DisText(0x80,p); //指定顯示地址,第一行顯示 } if(flag==2) { DisText(0xc0,p); //指定顯示地址,第二行顯示 }}/*****************************RTC**********************************/voidRTCIni(void){PREINT=FPCLK/32768-1;//設(shè)置預(yù)分頻器PREFRAC=FPCLK-(FPCLK/32768)*32768;YEAR=2005;//初始化年MONTH=6;//初始化月DOM=10;//初始化日HOUR=8;MIN=30;SEC=0;ALHOUR=8;ALMIN=50;ALSEC=37;AMR=0xf8;CIIR=0x01;//設(shè)置秒值的增量產(chǎn)生一次中斷CCR=0x01;//啟動(dòng)RTC}/********************************************************************************名稱:SendTimeRtc()*功能:讀取RTC的時(shí)間值,并將讀出的時(shí)分秒值由lcd1602顯示,顯示報(bào)警時(shí)間*******************************************************************************/voidSendTimeRtc(void){MESSAGE[4]=HOUR/10+'0'; //時(shí)的值MESSAGE[5]=HOUR%10+'0';MESSAGE[6]=':';MESSAGE[7]=MIN/10+'0';//取得分的值MESSAGE[8]=MIN%10+'0';MESSAGE[9]=':';MESSAGE[10]=SEC/10+'0';//取得秒的值MESSAGE[11]=SEC%10+'0';lcd_string(MESSAGE,1);txt[4]=ALHOUR/10+'0'; //時(shí)的報(bào)警值txt[5]=ALHOUR%10+'0';txt[6]=':';txt[7]=ALMIN/10+'0'; //分的報(bào)警值txt[8]=ALMIN%10+'0';txt[9]=':';txt[10]=ALSEC/10+'0'; //秒的報(bào)警值txt[11]=ALSEC%10+'0';lcd_string(txt,2);}voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<500;i++);}/************************************************************************************************主函數(shù)**************************************/intmain(){ lcd_init(); //LCD初始化 RTCIni(); //RTC初始化 PINSEL0=PINSEL0|0XA0000000; //選擇外部中斷1,2 PINSEL1=PINSEL1|0X00000001; //選擇外部中斷0 //EXTPOLAR=0X00; //低電平或下降沿 //EXTMODE=0X07; //下降沿 VICIntSelect=0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論