标题:
IIC总线单片机程序
[打印本页]
作者:
禤666
时间:
2018-12-4 10:51
标题:
IIC总线单片机程序
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit scl=P1^1;
sbit sda=P1^0;
sbit key1=P3^2;
sbit key2=P3^3;
uchar data mem[4]_at_ 0x55;
uchar mem[4] = {0x41,0x42,0x43,0xaa};
uchar data rec_mem[4]_at_ 0x60;
void start(void);
void stop(void);
void sack(void);
bit rack(void);
void ackn(void);
void send_byte(uchar);
uchar rec_byte(void);
void write(void);
void read(void);
void delay4us(void);
void main(void)
{
EA=1;
EX0=1;
EX1=1;
while(1);
}
void ext0()interrupt 0
{
write();
}
void ext1()interrupt 2
{
read();
}
void read(void)
{
uchar i;
bit f;
start();
send_byte(0xa0);
f=rack();
if(!f)
{
start();
send_byte(0xa0);
f=rack();
send_byte(0x00);
f=rack();
if(!f)
{
start();
send_byte(0xa1);
f=rack();
if(!f)
{
for(i=0;i<3;i++)
{
rec_mem[i]=rec_byte();
sack();
}
rec_mem[3]=rec_byte();
ackn();
}
}
}
stop();out=rec_mem[3];while(!key2);
}
void write(void)
{
uchar i;
bit f;
start();
send_byte(0xa0);
f=rack();
if(!f){
send_byte(0x00);
f=rack();
if(!f){
for(i=0;i<4;i++)
{
send_byte(mem[i]);
f=rack();
if(f)break;
}
}
}
stop();
out=0xc3;
while(!key1);
}
void start(void)
{
scl=1;
sda=1;
delay4us();
sda=0;
delay4us();
scl=0;
}
void stop(void)
{
scl=0;
sda=0;
delay4us();
scl=1;
delay4us();
sda=1;
delay4us();
sda=0;
}
bit rack(void)
{
bit flag;
scl=1;
delay4us();
flag=sda;
scl=0;
return(flag);
}
void sack(void)
{ sda=0;
delay4us();
scl=1;
delay4us();
scl=0;
delay4us();
sda=1;
delay4us();
}
void ackn(void)
{ sda=1;
delay4us();
scl=1;
delay4us();
scl=0;
delay4us();
sda=0;
}
uchar rec_byte(void)
{ uchar i,temp;
for(i=0;i<8;i++)
{
temp<<=1;
scl=1;
delay4us();
temp|=sda;
scl=0;
delay4us();
}
return(temp);
}
void send_byte(uchar temp)
{ uchar i;
scl=0;
for(i=0;i<8;i++)
{
sda=(bit)(temp&0x80);
scl=1;
delay4us();
scl=0;
temp<<=1;
}
sda=1;
}
void delay4us(void)
{
_nop_();_nop_(); _nop_(); _nop_();
}
复制代码
仿真图.png
(46.51 KB, 下载次数: 18)
下载附件
2018-12-4 10:51 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1