dsp元器件串行eeprom的接口編程_第1頁
dsp元器件串行eeprom的接口編程_第2頁
dsp元器件串行eeprom的接口編程_第3頁
dsp元器件串行eeprom的接口編程_第4頁
dsp元器件串行eeprom的接口編程_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、串行 EEPROM 的接口編程(ASM 語言); 宏定義SBIT0:macro LACC AND #(0 SACL.endm macroLACCDMA,MASK DMAFh-MASK)DMA;清除 DMA 單元的 MASK 位SBIT1:DMA,MASKDMA;置位 DMA 單元的 MASK 位OR #MASKSACL.endmDMAB15_MSK B14_MSK B13_MSK B12_MSK B11_MSK B10_MSK B9_MSK B8_MSK B7_MSK B6_MSK B5_MSK B4_MSK B3_MSK B2_MSK B1_MSKB0_MSK.set.set.set.set

2、.set.set.set.set.set.set.set.set.set.set.set.set8000h4000h2000h1000h0800h0400h0200h0100h0080h0040h0020h0010h0008h0004h0002h0001h;常數定義; 端口初始化LDP SBIT0 SBIT0 SBIT0 SBIT1SBIT1#225MCRB,B3_MSK MCRC,B0_MSK MCRC,B7_MSK PCDATDIR,B11_MSKPEDATDIR,B8_MSK;7080h70FFh;設置 IOPC3 為I/O 口;設置 IOPE0 為I/O 口;設置 IOPE7 為I/O

3、 口;設置 IOPC3 為輸出口;設置 IOPE0 為輸出口2通用讀寫 24LC16B 子程序EEPROM: LDPLAR SBRK MAREEPROM1:CALLLACL AND SACL CALL CALL BCND LACL BEEPROM2:SBRKCALL CALL BCND LACL BEEPROM3:ADRKBIT BCND SBIT0 SBRK LAREEPROM31:CALLCALL BCND LACL BEEPROM30:ADRKMAR BANZSBIT1#225;7080h70FFh;AR0:讀寫的字節數, AR1:指向控制字節AR0,*-,AR0#1*,AR1I2CSt

4、art*+ #0FEH* I2CSendByte I2CRecAckEEPROM2,EQ #1 EEPROMRET #2I2CSendByte I2CRecAck EEPROM3,EQ #1 EEPROMRET #1*,15EEPROM4,TC PCDATDIR,B3_MSK #2AR1,*I2CSendByte I2CRecAck EEPROM30,EQ #1 EEPROMRET #1*,AR0 EEPROM31,AR1PCDATDIR,B3_MSK;設置開始狀態;AR1:臨時單元;清除控制字節的第 0 位;送出控制字節(R/W=0);檢查應答;出錯;AR1: 24LC16B 的塊內地址;送

5、出 24LC16B 的塊內地址;檢查應答;出錯;AR1:控制字節;讀/寫操作判斷;寫操作,設置寫允許:WP=0;AR1:輸出數據緩沖區;寫出一個字節數據;檢查應答;出錯;指向下一個字節待寫數據;寫操作完成,寫保護:WP=1BEEPROM5EEPROM4:CALL CALL CALL BCND LACL BEEPROM40:SBRKLAR EEPROM43:BANZB EEPROM41:CALLCALL MAR BEEPROM42:CALLCALL EEPROM5: CALLLACL EEPROMRET:RET;讀操作;設置開始狀態;送出控制字節(R/W=1);檢查應答I2CStart I2CS

6、endByte I2CRecAck EEPROM40,EQ #1 EEPROMRET #2AR1,*,AR0 EEPROM41,AR1 EEPROM42I2CRecByte I2CAck*,AR0 EEPROM43I2CRecByte I2CNoAck I2CStop#0;出錯;AR1:輸入數據緩沖區;接收一個字節數據;產生應答信號;接收最后一個字節數據;不產生應答信號;設置結束狀態;成功操作標志; 啟動 I2C 總線I2CStart:SBIT0 SBIT1 SBIT1 SBIT1 RPT NOP SBIT0 RPT NOP SBIT0 SBIT1RETPEDATDIR,B0_MSK PEDA

7、TDIR,B15_MSK PEDATDIR,B7_MSK PEDATDIR,B0_MSK#14;SCL=0;設置 IOPE7 為輸出口;SDA=1;SCL=1;600 ns;SDA=0PEDATDIR,B7_MSK#14PEDATDIR,B0_MSKPEDATDIR,B7_MSK;SCL=0;SDA=1; 停止 I2C 總線I2CStop:SBIT0PEDATDIR,B0_MSK;SCL=0SBIT1 SBIT0 SBIT1 RPT NOP SBIT1 RPT NOP SBIT0RETPEDATDIR,B15_MSK PEDATDIR,B7_MSK PEDATDIR,B0_MSK#14;設置

8、IOPE7 為輸出口;SDA=0;SCL=1PEDATDIR,B7_MSK#14;SDA=1PEDATDIR,B0_MSK;SCL=0; 檢查應答位I2CRecAck:SBIT0SBIT1 SBIT1 SBIT1 RPT NOP SBIT0 NOP SBIT0 LACL ANDRETPEDATDIR,B0_MSK PEDATDIR,B15_MSK PEDATDIR,B7_MSK PEDATDIR,B0_MSK#14;SCL=0;設置 IOPE7 為輸出口;SDA=1;SCL=1PEDATDIR,B15_MSK;設置 IOPE7 為輸PEDATDIR,B0_MSK PEDATDIR#80H;SC

9、L=0;返回在 ACC 中; 對I2C 總線產生應答I2CAck:SBIT1 SBIT0 SBIT1 RPT NOP SBIT0 NOP SBIT1RETPEDATDIR,B15_MSK PEDATDIR,B7_MSK PEDATDIR,B0_MSK#14;設置 IOPE7 為輸出口;SDA=0;SCL=1PEDATDIR,B0_MSK;SCL=0PEDATDIR,B7_MSK;SDA=1; 不對 I2C 總線產生應答I2CNoAck: SBIT1SBIT1 SBIT1PEDATDIR,B15_MSK PEDATDIR,B7_MSKPEDATDIR,B0_MSK;設置 IOPE7 為輸出口;S

10、DA=1;SCL=1RPT NOP SBIT0RET#14PEDATDIR,B0_MSK;SCL=0; 向I2C 總線寫入數據I2CSendByte: LARLACL RPT SFL SACLSBIT1AR2,#7* #7;位計數器:8 位;AR1:指向待寫的數據* PEDATDIR,B15_MSK PEDATDIR,B0_MSK*,16;設置 IOPE7 為輸出口;SCL=0I2CS3:SBIT0 LACC SFL SACH BCND SBIT0 B SBIT1 SBIT1 BANZ SBIT0RET*,AR2 I2CS1,CPEDATDIR,B7_MSK I2CS2 PEDATDIR,B7

11、_MSK PEDATDIR,B0_MSK I2CS3,AR1PEDATDIR,B0_MSK;SDA=0I2CS1:I2CS2:;SDA=1;SCL=1;SCL=0; 從I2C 總線數據;位計數器:8 位;設置 IOPE7 為輸;SCL=0I2CRecBy AR SBIT0 SBIT0SPLKAR2,#7 PEDATDIR,B15_MSK PEDATDIR,B0_MSK #0,* PEDATDIR,B0_MSK*I2CR1:SBIT1 LACL SFL SACL LACL RPT SFR AND #1OR;SCL=1* PEDATDIR#6*SACL SBIT0 BANZ ADRKRET*,AR

12、2 PEDATDIR,B0_MSK I2CR1,AR1#1;SCL=0;AR1:指向下一個單元3 通用讀寫 24LC16B 子程序調用實例MAR LAR SPLK SPLK SPLK SPLKCALL*,AR1 AR1,#STACK #200H,*+ #00,*+ #0A0H,*+ #10,*EEPROM;AR1:堆棧指針;待寫數據存放空間的首地址;24LC16B 的塊內地址;控制字節(R/W=0);待寫數據字節數;調用通用讀寫 24LC16B 子程序12.4.624LC256 的應用編程1 初始化子程序;宏定義SBIT0: macroDMA,MASK;該宏用于清除 DMA 單元的 MASK

13、位LACC AND SACL.endmDMA#(0FH-MASK)DMASBIT1: macro DMA,MASK;該宏用于置位 DMA 單元的 MASK 位LACC OR SACL.endmDMA #MASKDMA;常數的定義B15_MSK B14_MSK B13_MSK B12_MSK B11_MSK B10_MSK B9_MSKB8_MSK.set.set.set.set.set.set.set.set8000h4000h2000h1000h0800h0400h0200h0100hB7_MSK B6_MSK B5_MSK B4_MSK B3_MSK B2_MSK B1_MSK B0_MS

14、KCOUNT.set.set.set.set.set.set.set.set0080h0040h0020h0010h0008h0004h0002h0001h0325h.set;-系統初始化子程序-SYSINITIAL:SETC CLRC CLRC CLRC LDP SPLK SPLK LDP SPLK SPLK LDP SBIT0 SBIT0 SBIT0 SBIT1 SBIT1RETM SXM OVM CNF#SCSR17 #81FEH,SCSR1 #0E8H,WDCR #IMR7#0h,IMR;關閉總中斷;B0 被分配為數據空間;取得 SCSR1 所在的頁; CLKIN=6M,CLKOUT=

15、24M; 關閉 WDT;不使能所有中斷; 清除所有中斷標志#0#0E1hFh,IFRMCRB,B0_MSK MCRB,B3_MSKMCRB,B8_MSK;定義 IOPD0,IOPC3,IOPC0 為通用 I/O 口PCDATDIR,B11_MSK ;定義 IOPC3 口為輸出PDDATDIR,B8_MSK ;定義 IOPD0 口為輸出2 通用讀寫 24LC256 子程序.text;-通用讀寫 24LC256 子程序-EEPROM:LDP LARSBRK#225AR0,*-,AR0 #1;AR0:讀寫的字節數, AR1:指向控制字節,ARP=AR0;MAR*,AR1EEPROM1:CALLLAC

16、LI2Cstart*+;設置 I2C 總線的開始狀態;AR1:臨時單元;清除控制字節的第 0 位AND #0FEHSACL CALL CALL BCNDLACL* I2CsendByte I2CRECACKEEPROM2,EQ#1;送出控制字節(R/W=0);檢查應答位;出錯BEEPROMRETEEPROM2:SBRK#2;AR1:24LC256 的塊內地址的低字節;(在此之前 AR1 指向臨時單元,比控制字 adress 多 1)CALLI2CsendByte;送出 24LC256 的塊內地址的低字節;檢查應答位CALLI2CRECACKBCNDLACLHIGHBYTE,EQ#1;出錯BEE

17、PROMRETHIGHBYTE:SBRK CALL CALL BCNDLACL#1I2CsendByte I2CRECACK EEPROM3,EQ#1;AR1:24LC256 的塊內地址的高字節;送出 24LC256 的塊內地址的高字節;檢查應答位;出錯BEEPROMRETEEPROM3:ADRK BIT BCND SBIT0 SBRKLAR#2*,15EEPROM4,TC PDDATDIR,B0_MSK #3AR1,*;AR1 控制字節;讀/寫操作判斷;設置寫允許:WP=0;AR1:輸出數據緩沖區EEPROM31:CALL CALL BCND LACLBI2CSendByte I2CRECA

18、CK EEPROM30,EQ #1EEPROMRET;寫出一個字節數據;檢查應答位;出錯EEPROM30:ADRK#1;指向下一個字節待寫數據MAR*,AR0BANZBEEPROM31,AR1EEPROM5EEPROM4:;讀操作;設置 I2C 總線開始狀態;送出控制字節(R/W=1);檢查應答位;出錯CALL CALL CALL BCND LACLBI2CStart I2CSendByte I2CRECACK EEPROM40,EQ #1EEPROMRETEEPROM40:SBRKLAR#3AR1,*,AR0;AR1:輸入數據緩沖區EEPROM43:BANZBEEPROM41,AR1EEPR

19、OM42EEPROM41:CALLCALLI2CRecByteI2CAck;接收一個字節數據;產生應答信號MAR*,AR0BEEPROM43EEPROM42:CALLCALLI2CRecByteI2CNoAck;接收最后一個字節數據;不產生應答信號EEPROM5:CALLLACLI2CStop#0;設置結束狀態;成功標志,ACC=0EEPROMRET:RET;返回;啟動 I2C 總線子程序I2CStart: SBIT0 SBIT1 SBIT1SBIT1PCDATDIR,B3_MSK PCDATDIR,B8_MSK PCDATDIR,B0_MSKPCDATDIR,B3_MSK;SCL=0;IOP

20、C0(SDA 為輸出);SDA=1,SCL=1RPT NOP SBIT0 RPT NOP SBIT0 SBIT1RET#14;延時 600ns;SDA=0PCDATDIR,B0_MSK#14;延時 600ns;SCL=0;SDA=1PCDATDIR,B3_MSKPCDATDIR,B0_MSK;-向I2C 總線寫入數據子程序-I2CSendByte:LAR LACL RPT SFL SACL SBIT1 I2CS3: SBIT0 LACC SFL SACH BCNDSBIT0AR2,#7* #7;位計數器為 8;AR1 指向待寫的數據*PCDATDIR,B8_MSK;設置 IOPC0 為輸出口P

21、CDATDIR,B3_MSK*,16;SCL=0*,AR2 I2CS1,CPCDATDIR,B0_MSK;SDA=0,(該位為 0)BI2CS2I2CS1: SBIT1 I2CS2:SBIT1PCDATDIR,B0_MSK;SDA=1,(該位為 1)PCDATDIR,B3_MSK;SCL=1,在 SCL=1 期間數據線上的;狀態必須保持不變BANZ SBIT0RETI2CS3,AR1PCDATDIR,B3_MSK;SCL=0;-檢查應答位子程序-I2CRECACK:SBIT0 SBIT1RPTPCDATDIR,B3_MSK PCDATDIR,B3_MSK#14;SCL=0;SCL=1NOP S

22、BIT0 NOP NOP LACLANDPCDATDIR,B8_MSK;IOPC0(SDA 為輸入)PCDATDIR#01H;返回在 ACC 中,若 ACC=0 表示操作成功,;若 ACC=1 表示操作失敗RET;從I2C 總線I2CRecByte:數據-LAR SBIT0 SBIT0 SPLK I2CR1: SBIT1 LACLSFL SACL LACL AND OR SACL SBIT0 BANZ ADRKRETAR2,#7 PCDATDIR,B8_MSK PCDATDIR,B3_MSK#0,*;位計數器為 8;設置 IOPC0 為輸;SCL=0PCDATDIR,B3_MSK*;SCL=1

23、*PCDATDIR;IOPC0 上的數據#1*,AR2 PCDATDIR,B3_MSK;SCL=0 I2CR1,AR1#1;AR1:指向下一個單元;-對I2C 總線產生應答-I2CAck:SBIT1 SBIT0 SBIT1 RPT NOP SBIT0 NOPSBIT1PCDATDIR,B8_MSK PCDATDIR,B0_MSKPCDATDIR,B3_MSK#14;設置 IOPC0 為輸出口;SDA=0;SCL=1;延時 600ns;SCL=0PCDATDIR,B3_MSKPCDATDIR,B0_MSK;SDA=1,數據線恢復為 1,但此時;SCL=0,SDA 在后來可以改變RET;-不對 I

24、2C 總線產生應答-oAck:SBIT1 SBIT1 SBIT1 RPT NOP SBIT0 RET;PCDATDIR,B8_MSK PCDATDIR,B0_MSKPCDATDIR,B3_MSK#14;設置 IOPC0 為輸出口;SDA=1;SCL=1;延時 600nsPCDATDIR,B3_MSK ;SCL=0停止 I2C 總線I2CStop: SBIT0 SBIT1 SBIT0 SBIT1RPT NOP SBIT1 RPT NOP SBIT0RETPCDATDIR,B3_MSK PCDATDIR,B8_MSK PCDATDIR,B0_MSKPCDATDIR,B3_MSK#14;SCL=0;

25、設置 IOPC0 為輸出口;SDA=0;SCL=1PCDATDIR,B0_MSK#14;SDA=1PCDATDIR,B3_MSK;SCL=0;返回3 通用讀寫 24LC16B 子程序調用實例;-系統初始化子程序-SYSINITIAL:SETC CLRC CLRC CLRC LDP SPLK SPLK LDP SPLKSPLKM SXM OVM CNF#SCSR17 #81FEH,SCSR1 #0E8H,WDCR #IMR7#0h,IMR;關閉總中斷;B0 被分配為數據空間;取得 SCSR1 所在的頁; CLKIN=6M,CLKOUT=24M; 關閉 WDT;關閉所有中斷;清除所有中斷標志#0Fh,IFRLDP SBIT0 SBIT0 SBIT0 SBIT1 SBIT1

溫馨提示

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

評論

0/150

提交評論