|
前几天买了个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周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|