時間控制模塊-DS1302芯片的控制編程課件_第1頁
時間控制模塊-DS1302芯片的控制編程課件_第2頁
時間控制模塊-DS1302芯片的控制編程課件_第3頁
時間控制模塊-DS1302芯片的控制編程課件_第4頁
時間控制模塊-DS1302芯片的控制編程課件_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

模塊電路功能編程(下)時間控制模塊—DS1302芯片的控制編程雙C工作室復(fù)習(xí)1.實驗板的電路圖控制編程--針對實驗板所有的元器件控制--要查看電路圖--確定要它們是由哪些端口或哪些接口來控制2.實驗板上控制數(shù)碼管用SPI發(fā)送數(shù)據(jù)到74HC595上,PB端口的高四位作為數(shù)碼管選通通道3.SPI的控制流程4.怎么通過閱讀74HC595的芯片資料,來使用它?。。∪蝿?wù)分析:1.控制實驗板上的發(fā)光二極管亮滅; 電路連接如何?使用的是I/O的哪個端口?2.精確實現(xiàn)1s;定時器如何控制實現(xiàn)1s。3.在軟件中編碼、調(diào)試;4.下載到實驗板中觀察現(xiàn)象。案例1:控制控制LED發(fā)光二極管閃爍,亮滅時間間隔為1s。任務(wù)分析:1.控制實驗板上的數(shù)碼管顯示; 電路連接如何?使用的是I/O的哪個端口?涉及到哪里其他控制模塊?數(shù)碼管顯示時需要注意哪些地方?2.精確實現(xiàn)1s;定時器如何控制實現(xiàn)1s。3.在軟件中編碼、調(diào)試;4.下載到實驗板中觀察現(xiàn)象。案例2:控制實驗板的數(shù)碼管實現(xiàn)秒表SPI總線74HC595電路連接數(shù)碼管動態(tài)顯示(1)選通通道;(2)發(fā)送顯示數(shù)據(jù),并延時(幾毫秒);(3)關(guān)閉通道;(4)消影。參考代碼:……PORTB&=~(1<<PB4);SPI_SN74595_7SegLed(disp[ones]);_delay_ms(6);PORTB|=(1<<PB4);SPI_SN74595_7SegLed(0XFF);//硬件中,消影效果比較好……SPI總線74HC595電路連接第二功能:INT5SPI總線74HC595電路連接一、定時器模塊

1.實驗板上的主控芯片AVRATMega128:有四個定時器/計數(shù)器兩個具有獨立預(yù)分頻器、比較器功能、PWM輸出的8位定時器/計數(shù)器(T/C0,T/C2)兩個具有預(yù)分頻器、比較器功能、PWM輸出、捕捉功能的16位定時器/計數(shù)器(T/C1,T/C3)本堂課主要討論定時器/計數(shù)器12.T/C1精確定時所用到的相關(guān)寄存器定時器/計數(shù)器1控制寄存器A(TCCR1A)通道A的比較輸出模式波形發(fā)生器模式(1)定時器/計數(shù)器1控制寄存器B(TCCR1B)輸入捕捉噪聲抑制器輸入捕捉觸發(fā)沿選擇波形發(fā)生器模式(2)時鐘選擇(選擇T/C的時鐘源)波形發(fā)生器模式由TCCR1A和TCCR1B中的WGM13:10共同確定(工作模式)。定時器/計數(shù)器1-TCNT1H和TCNT1LTCNT1H和TCNT1L組成了T/C的數(shù)據(jù)寄存器TCNT1。定時器/計數(shù)器中斷標(biāo)志寄存器-TIFRT/C1輸入捕捉標(biāo)志位T/C1輸出比較A匹配標(biāo)志位T/C1輸出比較B匹配標(biāo)志位T/C1溢出標(biāo)志(普通模式和CTC模式時)如何寫表達(dá)式判斷是否有溢出?TIFR&(1<<TOV1)voidTIMER1_Init(){ TCCR1B=(1<<CS12)|(1<<CS10);//選擇定時器時鐘分頻CS12:11,1024分頻。 TCNT1H=(65536-977)/256; TCNT1L=(65536-977)%256; TCCR1A=0X00;//與TCCR1B的WGM3:0=0確定定時器為普通模式}不斷查詢TIFR的TOV1位是否為1。參考代碼: ……while(!(TIFR&(1<<TOV1))) { } //添加代碼:時間到達(dá)后所需做的事件 TCNT1H=(65536-977)/256; TCNT1L=(65536-977)%256; TIFR|=(1<<TOV1);//TOV1Flag強(qiáng)制清零。//寫1,自動清零?!?.查詢法判斷定時時間是否到達(dá)一定要注意:寫1才會將溢出標(biāo)志位TOV1清零。定時時間到時,即產(chǎn)生溢出時,TOV1被置為“1”。狀態(tài)寄存器SREG2.與本案例外部中斷有關(guān)的寄存器全局中斷使能外部中斷控制寄存器B(EICRB)外部中斷5敏感電平控制位外部中斷標(biāo)志寄存器(EIFR)外部中斷標(biāo)志5(INT5引腳電平發(fā)生跳變時觸發(fā)中斷請求,并置位INTF5。)3.外部中斷初始化(1)確定中斷電平控制位;(2)使能全局中斷;(3)使能當(dāng)前使用的中斷參考代碼voidEINT5_Init(){ EICRB=0X00;//利用的是外部中斷5,低電平有效//(0<<ISC51)|0<<ISC50) SREG=0XFF;//使能所有的中斷 EIMSK=(1<<INT5);//使能外部中斷5}4.中斷服務(wù)函數(shù)//外部中斷函數(shù)SIGNAL(SIG_INTERRUPT5){ second=0;//中斷發(fā)生后需做的事情}2.如何將年月日寫入DS1302中(1)如何將數(shù)據(jù)寫入DS1302;(2)如何將秒值寫入DS1302;(3)如何寫入出年月日;(1)如何將數(shù)據(jù)寫入DS1302;DS1302寫時序DS1302工作時為了對任何數(shù)據(jù)傳送進(jìn)行初始化,需要將復(fù)位腳(RST)置為高電平且將8位地址和命令信息裝入移位寄存器。數(shù)據(jù)在時鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時輸出數(shù)據(jù)。(1)如何將數(shù)據(jù)寫入DS1302(地址)#defineIO_OUT DDRD|=(1<<PD6)#defineSCK_SET PORTD|=(1<<PD5)#defineRST_SET PORTD|=(1<<PD7)RST_SET; /*啟動DS1302總線*/ /*寫入目標(biāo)地址:addr*/ IO_OUT; addr=addr&0xFE;/*最低位置零*/ for(i=0;i<8;i++){ if(addr&0x01) IO_SET; else IO_CLR; SCK_SET; SCK_CLR; addr=addr>>1;} (1)如何將數(shù)據(jù)寫入DS1302#defineSCK_CLR PORTD&=~(1<<PD5)#defineIO_CLR PORTD&=~(1<<PD6)#defineIO_SET PORTD|=(1<<PD6)#defineSCK_OUT DDRD|=(1<<PD5)/*寫入數(shù)據(jù):d*/IO_OUT;for(i=0;i<8;i++){ if(d&0x01)IO_SET; elseIO_CLR; SCK_SET; SCK_CLR; d=d>>1; } RST_CLR;/*停止DS1302總線*/(2)如何將秒值寫入DS1302;DS1302寄存器與控制命令為0時為寫入(2)如何將秒值寫入DS1302voidds1302_write_time(void){ds1302_write_byte(ds1302_control_add,0x00);//關(guān)閉寫保護(hù)ds1302_write_byte(ds1302_sec_add,0x80);//暫停ds1302_write_byte(ds1302_sec_add,time_buf[6]);//秒ds1302_write_byte(ds1302_day_add,time_buf[7]);//周ds1302_write_byte(ds1302_control_add,0x80); //打開寫保護(hù)

}(2)如何將秒值寫入DS1302;#defineds1302_sec_add 0x80//秒數(shù)據(jù)地址地址偶數(shù)為寫、奇數(shù)為讀(2)如何將秒值寫入DS1302DS1302寄存器與控制命令CH為1時,內(nèi)部時鐘不工作,暫停(3)如何將年月日寫入DS1302DS1302寄存器與控制命令(3)如何將年月日寫入DS1302voidds1302_write_time(void){ ds1302_write_byte(ds1302_control_add,0x00);//關(guān)閉寫保護(hù) ds1302_write_byte(ds1302_sec_add,0x80); //暫停 ds1302_write_byte(ds1302_year_add,time_buf[1]);//年 ds1302_write_byte(ds1302_month_add,time_buf[2]);//月 ds1302_write_byte(ds1302_date_add,time_buf[3]);//日 ds1302_write_byte(ds1302_day_add,time_buf[7]);//周 ds1302_write_byte(ds1302_hr_add,time_buf[4]);//時 ds1302_write_byte(ds1302_min_add,time_buf[5]);//分 ds1302_write_byte(ds1302_sec_add,time_buf[6]);//秒 ds1302_write_byte(ds1302_day_add,time_buf[7]);//周 ds1302_write_byte(ds1302_control_add,0x80);//打開寫保護(hù)}(3)如何將年月日寫入DS1302DS1302寄存器與控制命令3.如何將DS1302中的年月日讀出來(1)如何從DS1302中讀出數(shù)據(jù);(2)如何將秒從DS1302中讀出;(3)如何顯示出年月日;(1)如何從DS1302中讀出數(shù)據(jù)DS1302讀時序(1)如何從DS1302中讀出數(shù)據(jù)

RST_SET; /*啟動DS1302總線*/ /*寫入目標(biāo)地址:addr*/ IO_OUT; addr=addr|0x01;/*最低位置高*/ for(i=0;i<8;i++) { if(addr&0x01)IO_SET; elseIO_CLR; SCK_SET; SCK_CLR; addr=addr>>1; }

(1)如何從DS1302中讀出數(shù)據(jù)

/*輸出數(shù)據(jù):temp*/ IO_IN; for(i=0;i<8;i++) { temp=temp>>1; if(IO_R)temp|=0x80; else temp&=0x7F; SCK_SET; SCK_CLR; } RST_CLR; /*停止DS1302總線*/ returntemp;(2)如何從DS1302中讀出秒#defineds1302_sec_add 0x80 //秒數(shù)據(jù)地址地址偶數(shù)為寫、奇數(shù)為讀(2)如何從DS1302中讀出秒DS1302寄存器與控制命令(2)如何從DS1302中讀出秒voidds1302_read_time(void){time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;}(2)如何從DS1302中讀出秒DS1302寄存器與控制命令(2)如何從DS1302中讀出秒?如果顯示秒,我們應(yīng)該怎么寫代碼?time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;//存放秒鐘的值;(3)如何顯示出年月日;顯示年:time_buf[1]=ds1302_read_byte(ds1302_year_add);顯示月:time_buf[2]=ds1302_read_byte(ds1302_month_add); 顯示日:思考?DS1302內(nèi)部RAM

DS1302內(nèi)部的RAM分為兩類,一類是單個RAM單元,共31個,每個單元為一個8位的字節(jié),其命令控制字為COH~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。四、SPI總線技術(shù)簡介SPI,SerialPeripheralinterface的縮寫,串行外圍設(shè)備接口。SPI,是一種高速的,全雙工,同步的通信總線,總線技術(shù)是Motorola公司推出的一種同步串行接口。SPI在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議,比如P89LPC900.

SPI用于CPU與各種外圍器件進(jìn)行全雙工、同步串行通訊。SPI(SerialPeripheralinterface)SPI技術(shù)(1)從機(jī)選擇引腳SS(Slaveselect)若MCU的SPI工作于主機(jī)方式,置SS為高電平;若SPI工作于從機(jī)方式,當(dāng)SS=0時,表示主機(jī)選中了該從機(jī),反之則未選中該從機(jī)。(2)主出從入引腳MOSI(Masterout/slavein)(3)主入從出引腳MISO(Masterin/slaveout)(4)SPI串行時鐘引腳SPSCK(SPIserialclock)ATmega128提供的SPI接口(1)SPI的控制寄存器SPCRSPI將中斷使能位SPI使能數(shù)據(jù)次序主/從選擇時鐘極性時鐘相位SPI時鐘率選擇SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);SPI相關(guān)寄存器/*SPI接口初始化*/voidSPI_MasterInit(){ //設(shè)置(PB2)MOSI和(PB1)SCK,與SN74HC59連接的(PB0)CP為輸出,其他為輸入 DDRB|=(1<<PB2)|(1<<PB1)|(1<<PB0); //使能SPI(SPE),設(shè)為主機(jī)模式(MSTR),設(shè)置時鐘速率(fck/16) SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0);

}(2)SPDR數(shù)據(jù)寄存器(3)SPSR狀態(tài)寄存器SPI中斷標(biāo)志寫沖突標(biāo)志SPI倍數(shù)思考:SPSR&(1<<SPIF)的作用?voidSPI_MasterTransmit(charcData){ //直接把要傳送的數(shù)據(jù)發(fā)到SPI的數(shù)據(jù)寄存器 SPDR=cData; //等待數(shù)據(jù)傳送結(jié)束 while(!(SPSR&(1<<SPIF))) { }}SPI控制流程總結(jié)SPI初始化(1)寫控制字到SPCR,確定是否允許SPI接收中斷、SPI的工作方式、時鐘極性、時鐘相位、是否允許SPI等。(2)寫控制字到SPSR,確定SPI的波特率發(fā)送一個數(shù)據(jù)將數(shù)據(jù)送入SPDR,然后檢查SPSR的(SPIF位),如果該位為1,表示數(shù)據(jù)已經(jīng)送出。五、74HC595:8位串行輸入轉(zhuǎn)輸出移位寄存器引腳說明:Qa-Qh:八位并行數(shù)據(jù)D:串行數(shù)據(jù)輸入端EN:高電平禁止輸出CP:上升沿時

溫馨提示

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

最新文檔

評論

0/150

提交評論