iic_app.c
来自「菜鸟,详细NRF24E1运用,程序,电路」· C语言 代码 · 共 204 行
C
204 行
#include "reg24le1.h"
#include "IIC_app.h"
#include "intrins.h"
void delay(unsigned int dx)
{
unsigned int di;
for(;dx>0;dx--)
for(di=120;di>0;di--)
{
;
}
}
void IIC_init()
{
FREQSEL(2);
MODE(MASTER);
W2CON1|=0x20; //屏蔽所有的中断
W2SADR=0x00;
EN2WIRE(); //使能2-wire
}
void Io_config()
{
//LED p00
P0DIR&=0XFE; //LED 输出
P00=0;
P1DIR|=0X01;
P10=0X01;
}
void uart_init()
{
CLKCTRL = 0x28; // 设置时钟源为16M
CLKLFCTRL = 0x01;
P0DIR &= 0xF7; // P03 (TxD)
P0DIR |= 0x10; // P04 (RxD)
P0|=0x18;
S0CON = 0x50;
PCON |= 0x80; // 波特率倍增
WDCON |= 0x80; // 选择内部波特率发生器
S0RELL = 0xFB;
S0RELL = 0xF3; // 波特率38400
// ES0=1;
}
void ex_int(void)
{
IEN0|=0X80;
IEN0|=0X01;
TCON|=0X01; //下降沿触发
INTEXP|=0x08; //从P05输入中断
P0DIR|=0X20; //P05输入
P0DIR|=0x40; //P06输入
P05=1;
P06=1;
}
void send(unsigned char ch)
{
S0BUF=ch;
while(!TI0);
TI0=0;
}
unsigned char readbyte(unsigned int addr)
{
unsigned char byte;
START();
W2DAT=((slaveaddr+0xa0)<<1)+0;//write from slave
while(ACK);
W2DAT=addr;
while(ACK);
START();
W2DAT=((slaveaddr+0xa0)<<1)+1;//read from slave
while(ACK);
while(!READY);
byte=W2DAT;
STOP();
return byte;
}
//选择写
void writebyte(unsigned int addr,unsigned char dat)
{
unsigned char byte=dat;
START();
W2DAT=((slaveaddr+0xa0)<<1)+0;//write
if(!ACK) //IF ACK
W2DAT=addr;
if(!ACK)
W2DAT=byte;
STOP();
}
//立即读
void multyread(char *buffer,int len)
{
char *cbuffer=buffer;
W2DAT=((slaveaddr+0xa0)<<1)+1;//read from slave
if(!ACK) //IF ACK
{
while(len--)
{
while(!READY);
*cbuffer++=W2DAT;
}
STOP();
}
}
//页写
void multwrite(char *buffer,int addr)
{
char * cbuffer=buffer;
char numlimit=0;
START();
W2DAT=((slaveaddr+0xa0)<<1)+0;//write from slave
if(!ACK) //IF ACK
W2DAT=addr;
if(!ACK)
{
W2DAT=*cbuffer++ ;
numlimit++;
if(numlimit==16)
return;
}
}
//extern char wbuffer[];
unsigned char wbuffer[0x10]={'a','b','c','d',
'e','f','g','h',
'0','1','2','3',
'4','5','6','7',
};
void uart_service() interrupt INTERRUPT_UART
{
static int i=0;
char buf;
if(TI0)
{TI0=0; }
if(RI0)
{
RI0=0;
buf=S0BUF;
wbuffer[i++]=buf;
if(i==0x10)
i=0;
}
}
unsigned char keycheck(void)
{
P1CON=0XD0;//P10
if(!P10)
{
delay(10);
if(!P10)
{ while(!P10);
return true; //如果按下就返回真
}
}
return false; // 返回假
}
void puts(char *str)
{
while(*str!='\0')
{send(*str++);
}
}
char init_time=0;
void ex_int_service() interrupt 0
{
static char flag=0;
if(flag)
flag=0;
else
flag=1;
puts("...IIC test program!by syman...\n");
LED=flag;
init_time=1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?