如有你有帮助,请购买下载,谢谢!
/**********延时函数*****************/ /*----------------------------------------------- delay_us :1us延时函数
------------------------------------------------*/ void delay_us(void) {
asm(\}
/*----------------------------------------------- delay_nus :长延时函数 输入参数: t :延时时间 us
------------------------------------------------*/ void delay_nus(unsigned int t) {
while(t--) delay_us(); }
/*---------------------------------------------- delay_ms :1ms延时函数
-----------------------------------------------*/ void delay_ms(void) {
unsigned int i;
for(i=0;i<1140;i++); }
/*---------------------------------------------- delay_nms :长延时函数 输入参数: t :延时时间 ms -----------------------------------------------*/ void delay_nms(unsigned int t) {
while(t--) delay_ms(); }
#define sda PC1 #define scl PC0
#define sda_h PORTC|=BIT(sda) #define sda_l PORTC&=~BIT(sda) #define scl_h PORTC|=BIT(scl) #define scl_l PORTC&=~BIT(scl) void iic_init(void) {
DDRC|=BIT(scl)|BIT(sda); PORTC|=BIT(scl)|BIT(sda);
页
1如有你有帮助,请购买下载,谢谢!
}
//iic起始信号 void iic_start(void) {
delay_nus(20); sda_h;
delay_nus(20); scl_h;
delay_nus(20); sda_l;
delay_nus(20); scl_l;
delay_nus(20); }
//iic停止信号 void iic_stop(void) {
delay_nus(20); sda_l;
delay_nus(20); scl_h;
delay_nus(20); sda_h;
delay_nus(20); }
//输出ack
void wack(unsigned char a) {
delay_nus(20); if(a) sda_l; else sda_h;
delay_nus(20); scl_h;
delay_nus(20); scl_l;
delay_nus(20); }
//i2c读写调用的函数
//把一个字节数据输入器件,并以收到应答信号为止 //写入成功返回1,失败返回0
unsigned char write_iic_byte(unsigned char byte) {
2页
unsigned char i; for(i=0;i<8;i++) {
delay_nus(20); if(byte&0x80) sda_h; else sda_l;
delay_nus(20); scl_h;
delay_nus(20); scl_l;
byte=byte<<1; }
DDRC&=~BIT(sda); delay_nus(20); sda_h;
delay_nus(20); scl_h;
delay_nus(20); scl_l;
delay_nus(20); if(PINC&BIT(sda)) i=1; else i=0;
delay_nus(20); scl_l;
delay_nus(20); DDRC|=BIT(sda); return i; }
//i2c读要调用的函数 //从器件读出一个字节
unsigned char read_iic_byte(void) {
unsigned char i,buff=0; DDRC&=~BIT(sda); delay_nus(20); sda_h;
for(i=0;i<8;i++) {
buff=buff<<1; delay_nus(20);
如有你有帮助,请购买下载,谢谢!
3页