我写的MEGA8的TWI双机通讯(查询和中断 ICCAVR)
今天搞TWI通讯,4到5小时,基本搞定,硬件是两M8的SCL和SDA互联,当然还有GND,主机用串口连到电脑,9600波特率
一共发 0到10一共十个数重复发
思路主要参考艺芯的,但是程序是自己写的,跟他不一样.
这里是一个文件夹,包括两个工程,主机和从机,还有UART文件,
用ICC的朋友可以直接到开工程,GCC要移植,把#include"iom8v.h"改为#include<avr/io.h>,还有其它地方修改一下,就可以,我没试
点击此处下载ourdev_204692.rar(文件大小:68K) 过段时间要用。标记一下。顺便顶一下,可惜阿莫要原理图才会给穿裤子, 那就来个简图吧,OrCAD的
1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_205112.GIF 够清晰了 好,我顶了! 阿莫呢,快发裤子,人家大冬天的还等着呢!!! thank you. 多谢! 好东西 好 好东西,下来试试! 看了你的代码,主机是以广播的方式写给从机的 11楼说得对,因为只有一个下位机嘛,另外补充说明AVR的硬件I2C:
当接受时,因为一次I2C传输传的有多种信息,如总线起始,地址,数据等,接收机的TWI硬件会根据总线电平来置TWI状态寄存器的各个位.
用户根据状态寄存器的内容来判断下一步怎么办.例如从一次传输的(总线起始,地址,数据等)之中,把数据取出来(接受数据和接受地址时的状态寄存器的内容不一样). ^_^,程序里的TWI.h是我从WinAVR里面扣出来的,没想到有这样用的吧,
ICC的LIB没有GCC全, TWI.h里定义了I2C传输过程中状态寄存器 状态值的 宏,很方便,做AVR的I2C,拿去用吧. 我把MASTER和SLAVE合起来了,想做个双向的TWI,为什么发过的那个主机就不能再收了? 我的在START语句里,就死在循环(while)里了
void Start(void)
{
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)));
}
MEGA16的SDA,SCL 引脚也设置为输入上拉了
另外,楼主说"TWI.h是我从WinAVR里面扣出来的".我用的就是WinAVR,是不是包含了哪个头文件,就可以直接调用系统自带的函数了?
TWI学习中…… 楼上的WINAVR中包含twi.h就可以了
发送还得看从机呢。如果从机设置不对,也会导致主机发送不出去START和其他命令,那么主机自己的TWCR的TWINT也没有反应
我估计是这样,再检查吧,多看看中文的DATASHEET,这一章的芯片文档写的及其详细 记号 TWI从机! 顶!! 顶一个 问一下啊,从机(AVR)接收到的数据是放在TWDR中还是在EEPROM中呢??? 想通了! 顶 mark 非常感谢!! mark~~~~ 收藏!!! 顶一下~~~谢谢啊 mark 学习 mark DINGYIGE!!!!!!!!!! mark 回复【楼主位】chuanhuibh
-----------------------------------------------------------------------
真的应该很好吧 各种情况都做到了 太感谢了 Mark 谢谢,下载来看看! 学习一下 楼主能发一份你写的MEGA8的TWI双机通讯(查询和中断 ICCAVR)程序给我吗?我的邮箱是jjq12345678900@sina.com 谢谢楼主了 楼主加我QQ122469179再发过我也好 谢谢楼主了 l程序里的那个非广播模式的好像不可以用啊 lz,非广播模式的你有没有写出来啊?求教 好东西啊,正在用wti “一共发 0到10一共十个数重复发”
这个好像是11个{:3_49:} 支持一个 学习, mark GCC可用,谢谢 正好要用!不错! attiny系列可以直接用吗?
页:
[1]