看板 TTU-I90B 關於我們 聯絡資訊
其實(七),只是把資料區放在EEPROM! 用老師給的程式碼,就很好做! 所以這邊我只說明一下老師的程式碼! 其實下面是兩組程式碼,一組是資料的寫入讀出,然後沒有移動指標。 一組有移動指標就這樣,所以我們使用seq的 因為我們要一直讀取!就這樣……… 建議去看英文那本的p.39頁,說的很詳細…而且才兩面! 看完下面這個程式碼就看的懂啦! 其實就是寫入讀取,只是放在EEPROM裡面,所以使用的方法一點小不同! 所以,我也不知道要說明啥。自己看英文那本比較快! 主要是EEARH,EEARL,這兩個是EEPROM的位址暫存器,EEPROM Address Register EEDR-EEPROM的資料暫存器,EEPROM Data Register EECR-EEPROM的控制暫存器,EEPROM Control Register 把這些看一下吧! .nolist .include "8515def.inc" .list rjmp RESET ;AVR重設定址 ;***** Code .cseg .org 0x10 ;程式起始於0010H 位址 .def EEdwr =r16 ;存放要寫入EEPROM 的資料暫存器 .def EEawrl =r17 ;存放要寫入EEPROM 的低位定址暫存器 .def EEawrh =r18 ;存放要寫入EEPROM 的高位定址暫存器 EEWrite: sbic EECR,EEWE ;檢測EEWE 是否為0 閒置態可作讀寫 rjmp EEWrite ;若EEWE=1 忙線中則跳回EEWrite 等待 out EEARL,EEawrl ;非忙線則將所需寫入資料的定址EEawrl out EEARH,EEawrh ;及EEawrh 分別輸出到EEARL,EEARH 定址 out EEDR,EEdwr ;將要寫入資料EEdwr 置入EEDR 暫存器內 cli ;Disable Global Interrupt sbi EECR,EEMWE ;令EEMWE 設定為1 作寫入設定 sbi EECR,EEWE ;令 EEPROM 的EEWE=1 作資料栓鎖 sei ;Enable Global Interrupt ret ;回主程式 .def EEdrd =r0 ;讀取EEDR 資料存放暫存器 .def EEardl =r16 ;存放要讀取EEPROM 的低位定址暫存器 .def EEardh =r17 ;存放要讀取EEPROM 的高位定址暫存器 EERead: sbic EECR,EEWE ;檢測EEWE 是否為0 閒置態可作讀寫 rjmp EERead ;若EEWE=1 忙線中則跳回EEWrite 等待 out EEARL,EEardl ;非忙線則將所需寫入資料的定址EEardl out EEARH,EEardh ;及EEardh 分別輸出到EEARL,EEARH 定址 sbi EECR,EERE ;令 EEPROM 的EERE=1 作資料讀取致能 in EEdrd,EEDR ;將EEDR 內含讀入EEdrd 暫存器內 ret ;回主程式 .def EEdwr_s =r16 ;資料寫入EEPROM 的暫存器 .EQU EEMWE =02 EEWrite_seq: sbic EECR,EEWE ;檢測EEPROM 是否處於正寫入資料態之 rjmp EEWrite_seq ;EEWE=1 則跳回等待EEWE=0 之可作讀寫處理 in XL,EEARL ;將EEAR 定址EEARL 放入XL 內 in XH,EEARH ;將EEAR 定址EEARH 放入XH 內 LD R0,X+ ;將X 所指SRAM 內含放入R0 並令X 加1 out EEARL,XL ;將XL 放回EEAR 定址EEARL 內 out EEARH,XH ;將XH 放回EEAR 定址EEARH 內 out EEDR,EEdwr_s ;令EEdwr_s 輸出資料到EEDR cli ;Disable Global Interrupt sbi EECR,EEMWE ;令EEMWE 設定為1 作寫入設定 sbi EECR,EEWE ;set EEPROM Write strobe sei ;Enable Global Interrupt ret .def EEdrd_s =r20 ; EERead_seq: sbic EECR,EEWE ;檢測EEPROM 是否處於正寫入資料態之 rjmp EERead_seq ;EEWE=1 則跳回等待EEWE=0 之可作讀寫處理 mov XL,EEardl ;將EEAR 定址EEARL 放入XL 內 mov XH,EEardh ;將EEAR 定址EEARH 放入XH 內 LD R0,X+ ;令X 加1 mov EEardl,XL ;將XL 放回EEAR 定址暫存器內 mov EEardh,XH ;將XL 放回EEAR 定址暫存器內 out EEARL,XL ;將XL 放回EEAR 定址EEARL 內 out EEARH,XH ;將XH 放回EEAR 定址EEARH 內 sbi EECR,EERE ;EERE=1 作EEPROM 資料讀取栓鎖入EEDR 內 in EEdrd_s,EEDR ;將讀取栓鎖於EEDR 資料放入EEdrd_s 內 ret ;回主程式 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.125.121
icemint:◆ 這一篇文章值 165 銀 140.129.37.29 06/07