搜索
bottom↓
回复: 1

at24c1024问题(标题不合格,id 已经被封锁)

[复制链接]

出0入0汤圆

发表于 2013-1-7 16:30:36 | 显示全部楼层 |阅读模式
前几天买了个1024,10块钱,然后问题就出现了,我用这个程序做at24c02   04   都没问题   然后复制改了改   就不行了,读不出1024的数据,但是仿真可以读出数据,怎么回事啊    我用的pic16f877a单片机

写入一个数据   都会来   通过串口发到pc机,仿真可以通过,实物就是通不过,是不是我买的1024有问题

#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define scl RC1
#define sda RC2
#define scl_in() TRISC1=1//设置输入
#define sda_in() TRISC2=1
#define scl_out() TRISC1=0//设置为输出
#define sda_out() TRISC2=0
__CONFIG(0x3b2a);

const uchar table[]={1,2,3,4,5,6};
uchar shuju;
uchar flag;
void delay();//延时函数
void delay_ms(uint);//待测

void start();//启动信号
void stop();//停止信号
void respons();//应答信号

void write_byte(uchar);//写一个字节的数据
uchar read_byte();//读一个字节的数据
void write(uchar add,uchar add1,uchar date);//写数据
uchar read(uchar add,uchar add1);//读数据

void USART_init();//串口通信初始化

void main(void)
{
        delay_ms(1000);           //待测
        USART_init();//串口通信初始化
        write(0,0,1);
        delay_ms(5000);
        shuju=read(0,0);
        TXREG=shuju+48;//发送一个字节的数据
        while(!TRMT);//等待发送完毕
        while(1);
}
void delay(void)//延时函数
{
        uchar kkk;
        for(kkk=0;kkk<2;kkk++);

}
void delay_ms(uint z)           //待测
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void start(void)//启动信号
{
        scl_out();//设置为输出
        sda_out();
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();               
}
void stop(void)//停止信号
{
        scl_out();//设置为输出
        sda_out();
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();               
}
void respons(void)//应答信号
{
        uint j;
        scl_out();//设置为输出
        sda_out();
        scl=1;
        delay();
        sda_in();
        while((sda==1)&&(j<1000))
                j=j+1;
        scl=0;
        delay();               
}
void write_byte(uchar date)//写一个字节的数据
{
        uchar i,value;
        scl_out();//设置为输出
        sda_out();
        value=date;
        for(i=0;i<8;i++)
        {
                scl=0;
                delay();
                if((value&0x80)==0x80)
                        sda=1;
                else
                        sda=0;
                delay();
                scl=1;
                delay();
                value=value<<1;               
        }       
        scl=0;
        delay();
        sda=1;
        delay();
}
uchar read_byte(void)//读一个字节的数据
{
        uchar i,value1;
        scl_out();//设置为输出
        sda_out();
        scl=0;
        delay();
        sda=1;
        sda_in();//sda设置为输入
        for(i=0;i<8;i++)
        {
                scl=1;
                delay();
                value1=(value1<<1)|sda;
                scl=0;
                delay();
        }       
        delay();
        return (value1);
}
void write(uchar add,uchar add1,uchar date)//写数据
{
        start();
        write_byte(0xa0);
        respons();
        write_byte(add);
        respons();
        write_byte(add1);
        respons();
        write_byte(date);
        respons();
        stop();               
}
uchar read(uchar add,uchar add1)//读数据
{
        uchar value;
        start();
        write_byte(0xa0);
        respons();
        write_byte(add);
        respons();
        write_byte(add1);
        respons();
        start();
        write_byte(0xa1);
        respons();
        value=read_byte();
//        respons();
        stop();
        return value;               
}

void USART_init()//串口通信初始化
{
//  RC5=1;//输出高电平为无线发送模式
//        TRISC=0x84;
//        PORTC=0x08;
        TRISC7=1;//串口
        TRISC6=0;//串口
        TXSTA=0x24;//0010 0100 发送使能位置1 波特率选择为高速模式
        RCSTA=0x90;//1001 0000 启用USART模块 允许连续接收
        SPBRG=77;//4MHZ晶振,BRGH=1,波特率9600
        GIE=1;//总中断开启
        PEIE=1;//外设中断使能
        //RCIE=1;//串口接收中断使能
        TXREG=0;
        //RCIF=0;//接收中断标志位清零
}
void putch(uint date)//发送一个字节的数据
{
        TXREG=date/1000+48;//发送一个字节的数据
        while(!TRMT);//等待发送完毕
        TXREG=date%1000/100+48;//发送一个字节的数据
        while(!TRMT);//等待发送完毕
        TXREG=date%100/10+48;//发送一个字节的数据
        while(!TRMT);//等待发送完毕
        TXREG=date%10+48;//发送一个字节的数据
        while(!TRMT);//等待发送完毕
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
头像被屏蔽

出0入0汤圆

发表于 2013-1-7 16:38:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-15 15:33

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

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