📄 text1.c
字号:
#include<stdio.h>
#include<lpc2103.h>
#define f (15000000/115200/16)
void init()
{
PINSEL0=(PINSEL0&(~0xff))|0x55;
I2C0CONCLR=0x2c; //起始位,中断标志位和应答位清零
I2C0CONSET=0x40; //使能IIC
I2C0SCLH=15000000/200000/2; //设置IIC的速率
I2C0SCLL=15000000/200000/2;
// I2C0SCLH=16;
// I2C0SCLL=16;
// PINSEL0=(PINSEL0&(~0x0f))|0x05;
U0FCR=0x7;
U0LCR=0x83;
U0DLL=f%256;
U0DLM=f/256;
U0LCR=0x3;
}
void uartsend(char q)
{
U0THR=q;
while((U0LSR&0x40)==0);
}
void write(char q,char adr)
{
I2C0CONSET=0x20; //设置STA位, 发送起始位 进入主发送
while((I2C0CONSET&(0x08))==0x00); // 等待起始信号
I2C0DAT=0xA0; //发送从地址
I2C0CONCLR=0x28; //SI清零 ,STA位必须清零
while((I2C0CONSET&(0x08))==0x00); //等待发送完毕
while(I2C0STAT!=0x18);
I2C0DAT=adr; //装入要发送的数据(可以为二级地址) (子地址)
I2C0CONCLR=0x08; //SI位清零
while((I2C0CONSET&(0x08))==0x00);
while(I2C0STAT!=0x28);
I2C0DAT=q; //装入要发送的数据(可以为二级地址)
I2C0CONCLR=0x08; //SI位清零
while((I2C0CONSET&(0x08))==0x00);
while(I2C0STAT!=0x28);
I2C0CONSET=0x10; //结束总线,此句必须有,否则出错。
I2C0CONCLR=0x08; //SI位清零 使能位清零 (必须)
uartsend('s'); //调试用语句
// uartsend(str[1]);
}
void read(char adr1)
{
char s;
I2C0CONCLR=0x28;
I2C0CONSET=0x20;
while((I2C0CONSET&(0x08))==0x00); //发送起始位 进入主发送
I2C0DAT=0xa0; //发送要写入的地址
I2C0CONCLR=0x28; //SI清零
while((I2C0CONSET&(0x08))==0x00); //等待发送完毕
while(I2C0STAT!=0x18);
I2C0DAT=adr1; //装入要发送的数据(可以为二级地址)
I2C0CONCLR=0x08; //STA位必须清零,SI位清零
while((I2C0CONSET&(0x08))==0x00);
while(I2C0STAT!=0x28);
I2C0CONCLR=0x08;
I2C0CONSET=0x20; //重新发送起始位进入主接收
while((I2C0CONSET&(0x08))==0x00);
I2C0DAT=0xa1; //装入要接收的地址
I2C0CONCLR=0x28;
while((I2C0CONSET&(0x08))==0x00);
while(I2C0STAT!=0x40);
I2C0CONCLR=0x08; //STA位和SI位清零
I2C0CONSET=0x04;
while((I2C0CONSET&(0x08))==0x00); //等待接收寄存器满
s=I2C0DAT;
I2C0CONSET=0x10; //结束总线
I2C0CONCLR=0x08; //清除SI
uartsend(s);
}
int main()
{
init();
write('d',0x05);
read(0x00);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -