新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機—再論IIC—軟件通用包(匯編、c語言)—03

51單片機—再論IIC—軟件通用包(匯編、c語言)—03

作者: 時間:2016-11-25 來源:網絡 收藏

//---------------------------------------------------------------
//向器件指定地址按頁寫函數(這里雖然是說按頁,其實原理是一樣的~~,要是不明白可以看上一篇我整理的)
//入口參數有4個:器件地址碼、器件單元地址、寫入的數據串的指針、寫入的字節(jié)個數
//寫入成功,返回1;不成功,返回0,使用后必須結束總線
bit mcu_send_string(uchar add,uchar rom_add,uchar *s,uchar num)
{
uchar i;
IIC_start();
send_byte(add);//發(fā)送器件地址碼
IIC_ack_acc();
if(ack==0)
return(0);//有應答,發(fā)送ROM的單元地址
send_byte(rom_add);
IIC_ack_acc();
if(ack==0)
return(0);
for(i=0;i //連續(xù)發(fā)送num個字節(jié)數據
{
send_byte(*s);
IIC_ack_acc();
if(ack==0)
return(0);
s++;
}
IIC_stop();
return(1);
}

4)從被控器件讀取n個字節(jié)數據子程序MCU_RDN_BYTE

;--------------------------------------------------------------------------------
;從器件地址讀取N個數據
;入口參數:器件從地址,器件子地址SUBA,接收字節(jié)數NUM_BYTE
;出口參數:接收數據緩沖區(qū)
;占用:A,R0,R1,R2,R3,CY
MCU_RDN_BYTE:
MOVR3,NUM_BYTE
LCALLSTART
MOVA,SLA
LCALLWR_BYTE;發(fā)送器件地址
LCALLCACK
JNBACK,RET_RDN
MOVA,SUBA;指定子地址
LCALLWR_BYTE
LCALLCACK
LCALLSTART
MOVA,SLA
INCA;準備進行讀操作
LCALLWR_BYTE
LCALLCACK
JNBACK,MCU_RDN_BYTE
MOVR1,#MRD
RDN1:
LCALLRD_BYTE;讀操作開始
MOV@R1,A
DJNZR3,SACK
LCALLMNACK;最后一個字節(jié)發(fā)非應答位
RET_RDN:
LCALLSTOP
RET
SACK:
LCALLMACK;發(fā)送應答位
INCR1
SJMPRDN1

//-------------------------------------------------------------------------------
//從器件指定地址讀多個字節(jié)
//入口參數有4個:器件地址碼、器件單元地址、讀出的數據串、讀出的字節(jié)個數,寫入成功返回1,不成功返回0
bit mcu_rec_string(uchar add,uchar rom_add,uchar *s,uchar num)
{
uchar i;
IIC_start();
send_byte(add); //發(fā)送器件的地址碼,這里最低位為0,寫
IIC_ack_acc();
if(ack==0)
return(0);
send_byte(rom_add);//發(fā)送器件的單元地址
IIC_ack_acc();
if(ack==0)
return(0);
IIC_start(); //重新發(fā)送開始信號,開始讀取數據
send_byte(add+1);//發(fā)送器件的地址碼,這里最后一位為1,讀
IIC_ack_acc();
if(ack==0)
return(0);
for(i=0;i{
*s=rec_byte();
IIC_ack_send(0); //送應答信號
s++;
}
*s=rec_byte();
IIC_ack_send(1); //送非應答信號
IIC_stop();
return(1);

}

總算是好了~~呵呵,哦了,整理好了~~要是哪里不對~~我就shit了



上一頁 1 2 3 4 下一頁

關鍵詞: 51單片機IIC軟件通用

評論


相關推薦

技術專區(qū)

關閉