//写入 void MMA845x_writecha(unsigned char address, unsigned char thedata) { IIC_start(); //启动 send_ch(MMA845x_IIC_ADDRESS); //写入设备ID及写信号 send_ch(address); //X地址 send_ch(thedata); //写入设备ID及读信 IIC_stop(); }
//串口协议遵循windows对于回车的标准,串口的一个回车是由\n\r两个字符组成 void uart_print_ch(u8 ch) { if (ch == '\n') { send_ch('\r'); } else if (ch == '\r') { send_ch('\n'); } send_ch(ch); }
//*************************************************** //向有子地址器件发送多字节数据 void send_to_nch(unsigned char ad_main,unsigned char ad_sub,unsigned char *buf,unsigned char num){ unsigned char i; IIC_start(); send_ch(ad_main); //发送器件地址 send_ch(ad_sub); //发送器件子地址 for(i=0;i<num;i++){ send_ch(*buf); //发送数据*buf buf++; } IIC_stop(); }
unsigned char MMA845x_readch(unsigned char address) { unsigned char ret = 100; IIC_start(); //启动 send_ch(MMA845x_IIC_ADDRESS); //写入设备ID及写信号 send_ch(address); //X地址 IIC_start(); //重新发送开始 send_ch(MMA845x_IIC_ADDRESS+1); //写入设备ID及读信 ret = read_ch(); //读取一字节 IIC_stop(); return ret; }
//*************************************************** //从有子地址器件读多个字节数据 //function: void read_from_nch(unsigned char ad_main,unsigned char ad_sub,unsigned char *buf,unsigned char num){ unsigned char i; IIC_start(); send_ch(ad_main); send_ch(ad_sub); for(i=0;i<num-1;i++){ *buf=read_ch(); IIC_ack_main(ack); //主应答<ack=1> buf++; } *buf=read_ch(); buf++; //本次指针调整无意义,目的是操作后buf指向下一地址 IIC_ack_main(no_ack); //无需应答<no_ack=0> IIC_stop(); }
//*************************************************** //从无子地址器件读单字节数据 //function:器件地址,所读数据存在接收缓冲区当前字节 void read_from_ch(unsigned char ad_main,unsigned char *buf){ IIC_start(); send_ch(ad_main); //发送器件地址 *buf=read_ch(); IIC_ack_main(no_ack); //无需应答<no_ack=0> IIC_stop(); }
//*************************************************** //向无子地址器件发送单字节数据 void send_to_ch(unsigned char ad_main,unsigned char c){ IIC_start(); send_ch(ad_main); //发送器件地址 send_ch(c); //发送数据c IIC_stop(); }
/* str必须以\0字符结尾 */ void send_str(u8* str) { while (*str++) send_ch(*str); }