→ icemint:◆ 這一篇文章值 165 銀 140.129.37.29 06/07
其實(七),只是把資料區放在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