RDA5807的数控收音机教学提纲 下载本文

精品文档

unsigned char I2C_write_byte(unsigned char indata) {

unsigned char i, ack;

// I2C 发送8 位数据 for (i=0; i<8; i++) {

// 高在前低在后 if (indata & 0x80) SDA = 1; else SDA = 0;

// 发送左移一位 indata <<= 1; delayNOP(); SCL = 1; delayNOP(); SCL = 0; }

// 设置SDA为输入 SDA =1;; delayNOP();

// 读取从机应答状态 SCL = 1;

delayNOP();

if(SDA) {

ack = I2C_NACK; }

收集于网络,如有侵权请联系管理员删除

精品文档

else {

ack = I2C_ACK; } SCL = 0;

return ack; }

读一个字节子程序

unsigned char I2C_read_byte(unsigned char ack) {

unsigned char i, data1 = 0;

// SDA 设置输入方向 SDA = 1;

// I2C 接收8位数据 for(i = 8; i > 0; i--) {

data1 <<= 1; SCL = 1; delayNOP();

// 高在前低在后 if (SDA) {

data1++;

}

SCL = 0; delayNOP(); }

// 主机发送应答状态 if(ack == I2C_ACK)

收集于网络,如有侵权请联系管理员删除

精品文档

SDA = 0; else SDA = 1;

delayNOP(); SCL = 1; delayNOP(); SCL = 0;

return data1; }

Delay延迟程序 #include %us延时子程序 void delayNOP() {

_nop_();_nop_();_nop_();_nop_(); }

ms延时子程序

void delayms( unsigned int ms) {

unsigned char k; while(ms--) {

for(k = 0; k < 120; k++); } }

收集于网络,如有侵权请联系管理员删除