问一个I2C的问题,在线等待,很着急

来源:百度知道 编辑:UC知道 时间:2024/05/24 03:31:13
从机是AVR ATmega16,主机是一个喜利得的测距仪PD4,程序如下:
#define F_CPU 7372800
#include <avr/io.h>
#include <util/twi.h>
#include <stdio.h>

#define uint unsigned int
#define uchar unsigned char

#define TWI_ADDRESS 0x70

//标准I/O输出函数
int usart_putchar(char c)
{
if(c == '\n')
usart_putchar('\r');
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
return 0;
}

//初始化
void IoInit(void)
{
//使能SCL,SDA引脚内部上拉电阻
DDRC &= ~(_BV(PC0) | _BV(PC1));
PORTC |= _BV(PC0) | _BV(PC1);
//串行口初始化
UCSRB = _BV(RXEN) | _BV(TXEN); /*(1<<RXCIE)|(1<<TXCIE)|*/
UBRRH = 0;
UBRRL = 47; //9600 baud
UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); // 设置数据位为8位宽度
//UART用于标准I/O输入输出
fdevopen(usart_putchar,0);

//TWI接口初始化,从器件模式
TWAR = TWI_ADDRESS | _BV(TWGCE)

这里有个网友用AVR对数字定位器进行I2C通讯的程序或许可有参考作用:
http://user.qzone.qq.com/121756118