亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 25045操作標準子程序集41.c

?? MCS-51系列單片機Keil C語言源程序集
?? C
字號:
/*
;程 序 最 后 修 改 時 間  0-4-3 23:43
;軟 件 標 題:25045操作標準子程序集41
;軟 件 說 明:25045 I2C 串行EEPROM 驅(qū)動
;_________________________________________

;原作者:	龐波     
;程序修改人:
;版本號:
;_________________________________________
*/


/*到現(xiàn)在為止所有的問題都已經(jīng)解決,此版本已經(jīng)較為完善*/
# include <stdio.h>
# include <reg52.h>
# define uchar unsigned char
# define uint unsigned int
 sbit SO=P1^1;/*25045輸出*/
 sbit SI=P1^2;/*25045輸入*/
 sbit SCK=P1^3;/*25045時鐘*/
 sbit CS=P1^4;/*25045片選*/
 uchar code WREN_INST=0X06;
 /* Write enable latch instruction (WREN)*/
 uchar code WRDI_INST=0X04;
 /* Write disable latch instruction (WRDI)*/
 uchar code WRSR_INST=0X01;
 /* Write status register instruction (WRSR)*/
 uchar code RDSR_INST=0X05;
 /* Read status register instruction (RDSR)*/
 uchar code WRITE_INST=0X02;
 /* Write memory instruction (WRITE)*/
 /*寫入25045的先導字,應當為0000A010,其中的A為寫入25045的高位地址
 將此WRITE_INST和寫入高位地址相或后即為正確的寫先導字*/
 uchar code READ_INST=0X03;
 /* Read memory instruction (READ)*/
 /*讀出25045的先導字,應當為0000A011,其中的A為讀出25045的高位地址
 將此READ_INST和讀出高位地址相或后即為正確的讀先導字*/
 uint code BYTE_ADDR=0X55;
 /* Memory address for byte mode operations*/
 uchar code BYTE_DATA=0X11;
 /*Data byte for byte write operation*/
 uint  code PAGE_ADDR=0X1F;
 /* Memory address for page mode operations*/
 /*頁面寫入的其始地址*/
 uchar code PAGE_DATA1=0X22;
 /* 1st data byte for page write operation*/
 uchar code PAGE_DATA2=0X33;
 /* 2nd data byte for page write operation*/
 uchar code PAGE_DATA3=0X44;
 /* 3rd data byte for page write operation*/
 uchar code STATUS_REG=0X20;
 /* Status register,設置DOG時間設置為200毫秒,無寫保護*/
 /*這是狀態(tài)寄存器的值,他的意義在于第5,第4位為WDI1,WDI0代表DOG的時間,00為1.4秒,01為600毫秒,10為200毫秒,00為disabled
 第3位和第2位為BL1,BL0,是寫保護設置位,00為無保護,01為保護180-1FF,10為保護100-1FF,11為保護000-1FF.第1位為WEL,
 當他為1時代表已經(jīng)"寫使能"設置了,現(xiàn)在可以寫了,只讀位.第0位為WIP,當他為1時代表正在進行寫操作,是只讀*/
 uchar code  MAX_POLL=0x99;
 /* Maximum number of polls*/
 /*最大寫過程時間,確定25045的最大的寫入過程的時間*/
 uchar code INIT_STATE=0x09;
 /* Initialization value for control ports*/
 uint code SLIC=0x30;
 /* Address location of SLIC*/
 void wren_cmd(void);/*寫使能子程序*/
 void wrdi_cmd(void);/*寫使能復位*/ 
 void wrsr_cmd(void);/*復位時間位和數(shù)據(jù)保護位寫入狀態(tài)寄存器*/ 
 uchar rdsr_cmd(void);/*讀狀態(tài)寄存器*/
 void byte_write(uchar aa,uint dd);/*字節(jié)寫入,aa為寫入的數(shù)據(jù),dd為寫入的地址*/
 uchar byte_read(uint dd);/*字節(jié)讀出,dd為讀出的地址,返回讀出的數(shù)據(jù)*/
 void page_write(uchar aa1,uchar aa2,uchar aa3,uchar aa4,uint dd);/*頁寫入*/
 void sequ_read(void);/*連續(xù)讀出*/ 
 void rst_wdog(void);/*DOG復位*/
 void outbyt(uchar aa);/*輸出一個字節(jié)到25045中,不包括先導字等*/
 uchar inputbyt();/*由25045輸入一個字節(jié),不包括先導字等額外的東西*/ 
 void wip_poll(void);/*檢查寫入過程是否結(jié)束*/
 
 
/*25045操作子程序集*/
/*;*******************************************************************************************
*
;* Name: WREN_CMD
;* Description: Set write enable latch
;* Function: This routine sends the command to enable writes to the EEPROM memory array or
;* status register
;* Calls: outbyt
;* Input: None
;* Outputs: None
;* Register Usage: A
;*******************************************************************************************
*/
/*寫使能子程序*/
void wren_cmd(void)
{
 uchar aa;
 SCK=0;/* Bring SCK low */
 CS=0;/* Bring /CS low */
 aa=WREN_INST;
 outbyt(aa);/* Send WREN instruction */
 SCK=0;/* Bring SCK low */
 CS=1;/* Bring /CS high */
}

/*;*******************************************************************************************
*
;* Name: WRDI_CMD
;* Description: Reset write enable latch
;* Function: This routine sends the command to disable writes to the EEPROM memory array or
;* status register
;* Calls: outbyt
;* Input: None
;* Outputs: None
;* Register Usage: A
;*******************************************************************************************
*/
/*寫使能復位子程序*/
void wrdi_cmd(void)
{
 uchar aa;
 SCK=0;/* Bring SCK low */
 CS=0;/* Bring /CS low */
 aa=WRDI_INST;
 outbyt(aa);/* Send WRDI instruction */
 SCK=0;/* Bring SCK low */
 CS=1;/* Bring /CS high */
}


/*;*******************************************************************************************
*
;* Name: WRSR_CMD
;* Description: Write Status Register
;* Function: This routine sends the command to write the WD0, WD1, BP0 and BP0 EEPROM
;* bits in the status register
;* Calls: outbyt, wip_poll
;* Input: None
;* Outputs: None
;* Register Usage: A
;*******************************************************************************************
*/
/*寫狀態(tài)寄存器子程序*/
void wrsr_cmd(void)
{
 uchar aa;
 SCK=0;/* Bring SCK low */
 CS=0;/* Bring /CS low */
 aa=WRSR_INST;
 outbyt(aa) ;/* Send WRSR instruction */
 aa=STATUS_REG;
 outbyt(aa);/* Send status register */
 SCK=0;/* Bring SCK low */
 CS=1;/* Bring /CS high */
 wip_poll();/* Poll for completion of write cycle */
}





/*;*******************************************************************************************
*
;* Name: RDSR_CMD
;* Description: Read Status Register
;* Function: This routine sends the command to read the status register
;* Calls: outbyt, inputbyt
;* Input: None
;* Outputs: A = status registerXicor Application Note AN21
;* Register Usage: A
;*******************************************************************************************
*/
/*讀狀態(tài)寄存器,讀出的數(shù)據(jù)放入到aa中*/
uchar rdsr_cmd (void)
{
 uchar aa;
 SCK=0;
 CS=0;
 aa=RDSR_INST;
 outbyt(aa);
 aa=inputbyt();
 SCK=0;
 CS=1;
 return aa;
}







/*;*******************************************************************************************
*
;* Name: BYTE_WRITE
;* Description: Single Byte Write
;* Function: This routine sends the command to write a single byte to the EEPROM memory
array
;* Calls: outbyt, wip_poll
;* Input: None
;* Outputs: None
;* Register Usage: A, B
;*******************************************************************************************
*/
/*字節(jié)寫入,aa為寫入的數(shù)據(jù),dd為寫入的地址,對于25045而言為000-1FF*/
void byte_write(aa,dd)
uchar aa;
uint dd;
{
 SCK=0;
 CS=0;
 outbyt((((uchar)(dd-0XFF))<<3)|WRITE_INST);/* Send WRITE instruction including MSB of address */
 /*將高位地址左移3位與寫入先導字相或,得到正確的先導字寫入25045*/
 outbyt((uchar)(dd));
 /*輸出低位地址到25045*/
 outbyt(aa);
 /*寫入數(shù)據(jù)到25045的對應單元*/
 SCK=0;
 CS=1;
 wip_poll();
 /*檢測是否寫完*/
}



/*;*******************************************************************************************
*
;* Name: BYTE_READ
;* Description: Single Byte Read
;* Function: This routine sends the command to read a single byte from the EEPROM memory
array
;* Calls: outbyt, inputbyt
;* Input: None
;* Outputs: A = read byte
;* Register Usage: A, BXicor Application Note AN21
;*******************************************************************************************
*/
/*字節(jié)讀出,其中dd為讀出的地址,返回的值為讀出的數(shù)據(jù)*/
uchar byte_read(dd)
uint dd;
{
 uchar cc;
 SCK=0;
 CS=0;
 outbyt((((uchar)(dd-0XFF))<<3)|READ_INST);/* Send READ_INST instruction including MSB of address */
 /*將高位地址左移3位與讀出先導字相或,得到正確的先導字寫入25045*/
 outbyt((uchar)(dd));
 /*輸出低位地址到25045*/
 cc=inputbyt();/*得到讀出的數(shù)據(jù)*/
 SCK=0;
 CS=1;
 return cc;
}




/*;*******************************************************************************************
*
;* Name: PAGE_WRITE
;* Description: Page Write
;* Function: This routine sends the command to write three consecutive bytes to the EEPROM
;* memory array using page mode
;* Calls: outbyt, wip_poll
;* Input: None
;* Outputs: None
;* Register Usage: A, B
;*******************************************************************************************
*/
/*頁面寫入,其中aa1,aa2,aa3,aa4為需要寫入的4個數(shù)據(jù)(最大也就只能一次寫入4個字,dd為寫入的首地址*/
void page_write(aa1,aa2,aa3,aa4,dd)
uchar aa1,aa2,aa3,aa4;
uint dd;
{
 SCK=0;
 CS=0;
 outbyt((((uchar)(dd-0XFF))<<3)|WRITE_INST);/* Send WRITE instruction including MSB of address */
 /*將高位地址左移3位與寫入先導字相或,得到正確的先導字寫入25045*/
 outbyt((uchar)(dd));
 /*寫入低位地址到25045*/
 outbyt(aa1);
 /*寫入數(shù)據(jù)1到25045的對應單元*/
 outbyt(aa2);
 /*寫入數(shù)據(jù)2到25045的對應單元*/
 outbyt(aa3);
 /*寫入數(shù)據(jù)3到25045的對應單元*/
 outbyt(aa4);
 /*寫入數(shù)據(jù)4到25045的對應單元*/
 SCK=0;
 CS=1;
 wip_poll();
}




/*;*******************************************************************************************
*
;* Name: SEQU_READ
;* Description: Sequential Read
;* Function: This routine sends the command to read three consecutive bytes from the EEPROM
;* memory array using sequential mode
;* Calls: outbyt, inputbyt
;* Input: None
;* Outputs: A = last byte read
;* Register Usage: A, B
;*******************************************************************************************
*/
/*連續(xù)讀出,由于函數(shù)的返回值只能為1個,對于連續(xù)讀出的數(shù)據(jù)只能使用指針作為函數(shù)的返回值才能做到返回一系列的數(shù)組*/
/*sequ_read:*/
unsigned int *page_read(n,dd)
uchar n;/*n是希望讀出的數(shù)據(jù)的個數(shù),n<=11*/ 
unsigned int dd;/*dd是讀出數(shù)據(jù)的首地址*/
{
 uchar i;
 uchar pp[10];
 unsigned int *pt=pp;
 SCK=0;
 CS=0;
 outbyt((((uchar)(dd-0XFF))<<3)|READ_INST);
 for (i=0;i<n;i++)
 {
   pp[i]=inputbyt();
 }
 return (pt);
}
/*調(diào)用的方法如下*/
/*unsigned int *p;*/
/*p=page_read(4,100);*/
/*a=*(p)*/  
/*b=*(p+1)*/
/*c=*(p+2)*/
/*d=*(p+3)*/
/*abcd中存放25045中由100地址開始的4個數(shù)據(jù)*/
 /* Send WRITE */
/*mov DPTR, #PAGE_ADDR ; Set address of 1st byte to be read
clr sck ; Bring SCK low
clr cs ; Bring /CS low
mov A, #READ_INST
mov B, DPH
mov C, B.0
mov ACC.3, C
lcall outbyt ; Send READ instruction with MSB of address
mov A, DPL
lcall outbyt ; Send low order address byte
lcall inputbyt ; Read 1st data byte
lcall inputbyt ; Read 2nd data byte
lcall inputbyt ; Read 3rd data byte
clr sck ; Bring SCK low
setb cs ; Bring /CS high
ret*/




/*;*******************************************************************************************
*
;* Name: RST_WDOG
;* Description: Reset Watchdog Timer
;* Function: This routine resets the watchdog timer without sending a command
;* Calls: None
;* Input: None
;* Outputs: None
;* Register Usage: None
;*******************************************************************************************
*/
/*復位DOG*/
void rst_wdog (void)
{
 CS=0;
 CS=1;
}





/*;*******************************************************************************************
*
;* Name: WIP_POLL
;* Description: Write-In-Progress Polling
;* Function: This routine polls for completion of a nonvolatile write cycle by examining the
;* WIP bit of the status register
;* Calls: rdsr_cmdXicor Application Note AN21
;* Input: None
;* Outputs: None
;* Register Usage: R1, A
;*******************************************************************************************
*/
/*檢測寫入的過程是否結(jié)束*/
void wip_poll(void)
{
 uchar aa;
 uchar idata my_flag;
 for (aa=1;aa>MAX_POLL;aa++)
 {
  my_flag=rdsr_cmd();
  if ((my_flag&&0x01)==0) {aa=MAX_POLL;}/*判斷是否WIP=0,即判斷是否寫入過程已經(jīng)結(jié)束,若結(jié)束就跳出,否則繼續(xù)等待直到達到最大記數(shù)值*/
 }
}




/*;*******************************************************************************************
*
;* Name: OUTBYT
;* Description: Sends byte to EEPROM
;* Function: This routine shifts out a byte, starting with the MSB, to the EEPROM
;* Calls: None
;* Input: A = byte to be sent
;* Outputs: None
;* Register Usage: R0, A
;*******************************************************************************************
*/
/*輸出一個數(shù)據(jù)到25045,此數(shù)據(jù)可能為地址,先導字,寫入的數(shù)據(jù)等*/
void outbyt(aa)
uchar aa;
{
 uchar my_flag1,i;
 for (i=0;i>7;i++)
 {
   my_flag1=aa;
   SCK=0;
   SI=(my_flag1>>i);
   SCK=1;
 }
 SI=0;/*使SI處于確定的狀態(tài)*/ 
}






/*;*******************************************************************************************
*
;* Name: INPUTBYT
;* Description: Recieves byte from EEPROM
;* Function: This routine recieves a byte, MSB first, from the EEPROM
;* Calls: None
;* Input: None
;* Outputs: A = recieved byte
;* Register Usage: R0, A
;*******************************************************************************************
*/
/*得到一個數(shù)據(jù),此數(shù)據(jù)可能為狀態(tài)寄存器數(shù)據(jù),讀出的單元數(shù)據(jù)等*/
uchar inputbyt(void)
{
 uchar aa,my_flag;
 char i;
 for (i=7;i<0;i--)
 {
   SCK=0;
   my_flag=(uchar)(SO);
   SCK=1;
   aa=(aa||(my_flag<<i));
   my_flag=0x00;
 }
 return aa;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩aⅴ一区二区三区四区| 日韩**一区毛片| 久久婷婷国产综合精品青草| 国产宾馆实践打屁股91| 精品国产一区二区三区不卡| 国产呦精品一区二区三区网站| 亚洲电影视频在线| 国产一区不卡精品| 欧美一区二区三区在线| 亚洲成av人片一区二区梦乃| 99精品国产视频| 国产欧美一区二区三区鸳鸯浴 | 国产精品拍天天在线| 爽爽淫人综合网网站| 色婷婷亚洲综合| **欧美大码日韩| 国产东北露脸精品视频| 精品国产露脸精彩对白| 蜜臀av一区二区| 欧美大度的电影原声| 秋霞影院一区二区| 91精品国产高清一区二区三区| 一区二区三区中文字幕| 91久久精品国产91性色tv| 一区在线播放视频| 色综合一区二区| 亚洲精品国产视频| 在线视频亚洲一区| 一级中文字幕一区二区| 在线观看成人免费视频| 亚洲成年人影院| 欧美一级理论性理论a| 日韩成人免费看| 日韩亚洲电影在线| 久热成人在线视频| 久久久91精品国产一区二区精品| 韩国三级在线一区| 国产亚洲1区2区3区| 国产91精品免费| 亚洲蜜桃精久久久久久久| 91成人网在线| 日本欧美大码aⅴ在线播放| 日韩精品一区二区三区中文不卡| 美女网站色91| 国产欧美日韩中文久久| 91免费在线视频观看| 亚洲资源中文字幕| 欧美一区二区三区小说| 国产一区二区看久久| 国产精品伦理在线| 欧美性猛交xxxx黑人交| 麻豆精品国产传媒mv男同 | 91精品一区二区三区久久久久久 | 日韩视频免费直播| 国产高清在线观看免费不卡| 日韩一区日韩二区| 欧美久久久一区| 国产精品中文字幕欧美| 亚洲黄色在线视频| 日韩女优毛片在线| 99精品视频一区| 奇米888四色在线精品| 国产精品久久久久9999吃药| 欧美日韩一区三区| 国产成人日日夜夜| 亚洲大片精品永久免费| 久久久不卡网国产精品一区| 欧美在线免费视屏| 国产美女精品一区二区三区| 亚洲一级电影视频| 久久亚洲精品小早川怜子| 色噜噜狠狠色综合中国| 国产一区在线观看视频| 亚洲一区在线观看免费观看电影高清| 日韩欧美中文字幕一区| 一本大道久久a久久精品综合| 国产一区二区视频在线| 亚洲国产毛片aaaaa无费看| 欧美极品xxx| 日韩亚洲电影在线| 欧美视频一区二区三区| www.欧美精品一二区| 美女视频黄免费的久久| 一级做a爱片久久| 国产精品久久久久久久浪潮网站 | 成人综合婷婷国产精品久久免费| 午夜私人影院久久久久| 中文字幕一区二区三区精华液| 欧美电视剧在线看免费| 欧美日韩一区二区欧美激情| 99这里只有精品| 成人在线综合网| 国产老肥熟一区二区三区| 日本伊人精品一区二区三区观看方式 | 中文字幕一区日韩精品欧美| 久久只精品国产| 欧美xxxx老人做受| 制服丝袜亚洲网站| 欧美日韩情趣电影| 在线观看亚洲a| 色哟哟日韩精品| 91麻豆精品秘密| 日本韩国一区二区| 色欧美片视频在线观看 | 樱桃视频在线观看一区| 亚洲天天做日日做天天谢日日欢 | 亚洲人成网站在线| 国产精品视频免费| 国产精品久久久久影视| 国产精品午夜久久| 欧美激情自拍偷拍| 日韩美女啊v在线免费观看| 国产精品三级视频| 国产精品久久二区二区| 亚洲欧洲韩国日本视频| 中文字幕在线不卡一区二区三区 | 国产精品久久毛片a| 国产精品久久久久一区二区三区| 国产精品福利一区| 一色桃子久久精品亚洲| 一区二区三区蜜桃| 三级欧美在线一区| 另类成人小视频在线| 国产高清久久久久| eeuss鲁片一区二区三区| 色婷婷久久综合| 欧美美女激情18p| 欧美一区二区在线观看| 精品欧美一区二区三区精品久久| 精品国产一区二区三区久久久蜜月| 久久久综合视频| 亚洲欧美日本在线| 午夜精品久久久久久久久久久| 蜜臀av一区二区在线观看| 国产精品99久久久久久久vr| 91免费观看视频在线| 欧美日韩高清一区二区三区| 欧美成人aa大片| 中文在线资源观看网站视频免费不卡| 亚洲欧美日韩国产综合在线| 石原莉奈在线亚洲二区| 国产91丝袜在线18| 欧美亚洲动漫制服丝袜| 日韩免费一区二区三区在线播放| 国产欧美精品一区| 亚洲va韩国va欧美va| 国产精品综合久久| 欧美在线一区二区| 久久香蕉国产线看观看99| 最近日韩中文字幕| 免费成人av在线| 91在线高清观看| 欧美一级黄色片| 一区二区三区在线视频免费 | 日本亚洲一区二区| 99久久免费视频.com| 91精品国产综合久久久蜜臀图片| 国产欧美日韩一区二区三区在线观看| 亚洲五码中文字幕| 成人一区二区三区在线观看| 精品视频在线看| 国产精品国产精品国产专区不片| 秋霞国产午夜精品免费视频| 色呦呦日韩精品| 久久精品人人做人人综合| 午夜影视日本亚洲欧洲精品| 成人国产一区二区三区精品| 日韩一区二区三区四区 | 亚洲欧洲三级电影| 国产一区二区在线观看视频| 欧美酷刑日本凌虐凌虐| 18欧美亚洲精品| 国产精品亚洲第一| 精品久久一二三区| 无码av免费一区二区三区试看| 97久久人人超碰| 国产欧美精品在线观看| 久久精品理论片| 91精品国产麻豆国产自产在线| 亚洲精品视频在线观看网站| 丁香亚洲综合激情啪啪综合| 精品国产区一区| 六月婷婷色综合| 欧美一级黄色大片| 免费人成黄页网站在线一区二区| 97精品久久久午夜一区二区三区| 国产精品无遮挡| 成人综合日日夜夜| 国产午夜精品一区二区三区四区| 久久成人免费网站| 精品国产免费人成电影在线观看四季| 日韩av网站在线观看| 欧美性极品少妇| 亚洲一区二区不卡免费| 在线日韩av片| 亚洲狠狠爱一区二区三区| 欧美精三区欧美精三区| 日韩不卡一区二区| 91精品中文字幕一区二区三区| 亚洲va中文字幕|