搜索
bottom↓
回复: 0

马老师,我把书上的改成读24C02不好用?

[复制链接]

出0入0汤圆

发表于 2010-2-3 11:45:02 | 显示全部楼层 |阅读模式
#include <mega88.h>
#include <stdio.h>                                // 使用CVAVR的标准 Input/Output 函数
#include <delay.h>                                // 使用CVAVR的延时函数
#define EEPROM_BUS_ADDRESS 0xa0
#asm                                                        // 将 2 个通用I/O口定义成SDA、SCL,
    .equ __i2c_port=0x08                // 本例使用PORTC
    .equ __sda_bit=4                        // SDA使用PC4
    .equ __scl_bit=5                        // SCL使用PC5
#endasm
#include <i2c.h>
// read a byte from the 24C02
unsigned char eeprom_read_00(unsigned int address)
{
    unsigned char data;
    i2c_start();                                                // 发起始信号
    i2c_write(EEPROM_BUS_ADDRESS);                // 发写从机写寻址字节
    i2c_write(address);                                        // 发存储单元地址字节
    i2c_start();                                                // 发起始信号
    i2c_write(EEPROM_BUS_ADDRESS | 1);        // 发从机读寻址字节
    data=i2c_read(0);                                        // 读一个字节数据,返回NO ACK
    i2c_stop();                                                // 发停止信号
    return data;
}
// write a byte to the 24C02
void Eeprom_write_00(unsigned int address, unsigned char data)
{
    i2c_start();                                                // 发起始信号
    i2c_write(EEPROM_BUS_ADDRESS);                // 发写从机写寻址字节
    i2c_write(address);                                        // 发存储单元地址字节
    i2c_write(data);                                        // 写一个字节数据到24C256
    i2c_stop();                                                // 发停止信号
    delay_ms(10);                        // 等待10ms,保证24C256内部写操作完成再进行新操作

}
void main(void)
{        
   unsigned char i;
   int i3;
        DDRC  = 0x2E;
        PORTC = 0x2E;       
        DDRB  = 0x2C;
        PORTB = 0x3C;
        DDRD  = 0x00;
        PORTD = 0x04;       
           i2c_init();
           // initialize the I2C bus
        while(1)
        {
        Eeprom_write_00(0x0f,0x09);        //测试的这个命令不能执行。       
           //将上面的命令注解了,发现i2c_write(0xa0);不好用。
           i = eeprom_read_00(0x0f);
        PORTD=i;
        delay_ms(1000);   
        }
}
      

马老师,帮我看看我用书上的程序改成了24C02的代码。怎么不好用呀!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 09:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表