AVR系列之TWI功能测试
for ( i=0;i<10;i++ )
I2C_Write ( i, 0x80+i );
delay_ms(1000);
while ( 1 )
{
for ( i=0; i<10; i++)
{
while ( ! ( UCSRA & ( 1<<UDRE ) ) ); /*等待接受准备好 即是数据寄存器为空?*/
delay_ms ( 10 ) ;
UDR=I2C_Read ( 0x80+i ) ;
}
}
}
#define I2C_H
I2C 状态定义
MT 主方式传输 MR 主方式接受
***************************/
#define START 0x08
#define RE_START 0x10
#define MT_SLA_ACK 0x18
#define MT_SLA_NOACK 0x20
#define MT_DATA_ACK 0x28
#define MT_DATA_NOACK 0x30
#define MR_SLA_NOACK 0x48
#define MR_DATA_ACK 0x50
#define MR_DATA_NOACK 0x58
#define WD_DEVICE_ADDR 0xA0
#define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)) //启动I2C
#define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)) //停止I2C
#define Wait() {while(!(TWCR&(1<<TWINT)));} //等待中断发生
#define TestAck() (TWSR&0xf8) //观察返回状态
#define SetAck (TWCR|=(1<<TWEA)) //做出ACK应答
#define SetNoAck (TWCR&=~(1<<TWEA)) //做出Not Ack应答
#define Twi() (TWCR=(1<<TWINT)|(1<<TWEN)) //启动I2C
#define Write8Bit(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} //写数据到TWDR
void delay_ms(int time)
{
int i;
for ( ;time>0;time-- )
for ( i=0;i<1000;i++ ) ;
}
void uart_init()
{
UCSRA=0x02; //异步正常模式 即倍速模式
UCSRB=0x18; //允许发送接受中断和使能
UCSRC=0x06; //8位数据
UBRRH=0x00;
UBRRL=12; //波特率位9600
}
I2C总线写一个字节
返回0:写成功
返回1:写失败
**********************************************/
unsigned char I2C_Write(unsigned char Wdata,unsigned char RegAddress)
{
Start(); //I2C启动
Wait();
if(TestAck()!=START)
return 1; //ACK
Write8Bit(WD_DEVICE_ADDR); //写I2C从器件地址和写方式
Wait();
if(TestAck()!=MT_SLA_ACK)
return 1; //ACK
Write8Bit(RegAddress); //写器件相应寄存器地址
Wait();
if(TestAck()!=MT_DATA_ACK)
return 1; //ACK
Write8Bit(Wdata); //写数据到器件相应寄存器
Wait();
if(TestAck()!=MT_DATA_ACK)
return 1; //ACK
Stop(); //I2C停止
delay_ms(100); //延时
return 0;
}
I2C总线读一个字节
返回0:读成功
返回1:读失败
**********************************************/
unsigned char I2C_Read(unsigned RegAddress)
{
unsigned char temp;
Start();//I2C启动
Wait();
if (TestAck()!=START)
return 1; //ACK
Write8Bit(WD_DEVICE_ADDR); //写I2C从器件地址和写方式
Wait();
if (TestAck()!=MT_SLA_ACK)
return 1; //ACK
Write8Bit(RegAddress); //写器件相应寄存器地址
Wait();
if (TestAck()!=MT_DATA_ACK)
return 1;
Start(); //I2C重新启动
Wait();
if (TestAck()!=RE_START)
return 1;
Write8Bit(RD_DEVICE_ADDR); //写I2C从器件地址和读方式
Wait();
if(TestAck()!=MR_SLA_ACK)
return 1; //ACK
Twi(); //启动主I2C读方式
Wait();
if(TestAck()!=MR_DATA_NOACK)
return 1; //ACK
temp=TWDR; //读取I2C接收数据
Stop(); //I2C停止
return temp;
}
转载于:https://blog.51cto.com/lengyiyun/197765
AVR系列之TWI功能测试相关推荐
- AVR系列单片机的基本架构(翻译自俄语讲义)
本文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7685596 作者:毛星云 邮箱: hap ...
- [单片机资料] Atmel AVR系列应用程序及制作方案
Atmel AVR系列是一种基于改进的哈佛结构,精简指令集(Reduced Instruction Set Computing,RISC)的微控制器,由Atmel公司于1996年研发 .AVR系列是首 ...
- AVR系列单片机---你真的了解吗?
AVR系列单片机 AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机.AVR的单片机可以 ...
- avr模拟串口通讯c语言,AVR系列之串口通讯
昨晚搬动了电脑 今早又瞎忙了一上午 那个汗呀 加上身边环境蛮吵的 那个心烦着呢 现在就抽点时间敲敲键盘写写 算是整理一下此刻糟糕透顶的心情 也算是继续总结 总不能让这个系列的假期总结给落下来 既然说到 ...
- AVR系列之ADC转换
八月的最后一天 待到现在才开始写总结 显得有点慢了 嘿 这完全是因为早上上了两节课后 便去图书管找几本书 又待到了吃午饭时间 然后一直拖到现在 汗 可真多理由呢 找打 汗 还是说多废话了 就整理一下关 ...
- (转)淘淘商城系列——商品搜索功能测试
http://blog.csdn.net/yerenyuan_pku/article/details/72941506 到这里,我相信大家也是不容易,我自己也算是很不容易写到这里,希望自己能一直写下去 ...
- 基于AVR系列单片机,DS1302时钟芯片的具体用法
一.引脚连接 二.DS1302初始化 void ds1302_init(void) {Pin1设置为低电平: /*RST脚置低*/Pin2设置为低电平 /*SCK脚置低*/Pin1设置为输出 /*RS ...
- 51、PIC、AVR、16、32-BIT系列单片机区别与特点
8031/8051/8751是Intel公司早期的产品. 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764 ...
- AVR单片机特性简介
AVR单片机是ATMEL公司在1997年研发的增强型内置Flash的RISC精简指令集高速单片机.可以广泛应用于计算机外部设备.工业实时控制.仪器仪表.通讯设备.家用电器等各个领域. 一. AVR单片 ...
最新文章
- 一文读懂神经网络(附解读案例)
- MPB:南农韦中组-根际细菌便利和竞争互作类型和强度的研究方法
- 每日一皮:这也许是稍微二字最好的诠释...
- 字典常用的方法(内建函数)
- 线程组之间的JMeter传递变量
- python中流程图_python用graphviz画流程图
- mysql炸包_炸裂!MySQL 82 张图带你飞
- Compose 1.0 即将发布,你准备好了吗?
- paramiko模块执行linux下nohup卡住的问题。
- DELL ALIEN外星人笔记本安装UBUNTU,卡死的解决办法
- O2O营销模式(Online To Offline)
- 回顾展望:杀毒软件的“前世今生”
- sort()sorted()
- 台式计算机电功率一般多大,笔记本电脑耗电吗?功率一般多大
- 计算机专业打游戏哪个笔记本好,玩游戏笔记本电脑配置推荐有什么_玩游戏用什么笔记本电脑好-系统城...
- node.js把前台传来的base64码转成图片存放
- 专业的数据恢复软件免费试用,效果杠杠的
- 贪心算法-分金问题,返回分割最小代价(java)
- CISSP第4/8知识点错题集
- 【hjmmm网络流24题补全计划】
热门文章
- 小米5x对标OV,突围荣耀,能否成功?
- jupyter not a color scheme terminal
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
- uboot常用命令详解 2
- Sequelize Unknown column 'createdAt' in 'field list'?
- 应对用户需求的四个要点-企业数字化转型外部:驱动力之客户篇...
- 软件工程基础之需求分析
- Java try和catch的使用介绍
- jQuery操作select控件取值和设值
- 旅游网站进行邮件订阅的七大步骤讲解