打印

为什么p0输出的是0xa1

[复制链接]
457|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuww|  楼主 | 2023-3-31 23:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P3^4;
sbit sda=P3^5 ;
void delay()
{;;}
void delay1(uchar x)
{
        uchar i,j;
        for(i=x;i>0;i--);
        for(j=100;j>0;j--);
}

void start()  //起始信号
{
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();        
}
void stop()        //停止信号
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void ask()         //应答
{
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))
        i++;
        scl=0;
        delay();
}
void write_byte(uchar date)        //写入一个字节
{
        uchar i,temp;
        temp=date;
//        scl=0;
        //delay();
        for(i;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
                delay();
                sda=CY;
                delay();
                scl=1;
                delay();
        }
        scl=0;
        delay();
        sda=1;
        delay();        
}
uchar read_byte() //读取一个字节
{
        uchar i,j,k;
        scl=0;
        delay();
        sda=1;
        delay();
        for(i;i<8;i++)
        {
                scl=1;
                delay();
                j=sda;
                k=(k<<1)|j;
                scl=0;
                delay();        
        }
        delay();
        return k;
}
void init()                   //初始化
{
        scl=1;
        sda=1;
}
void write_add(uchar address,uchar date)//指定地址写数据
{
        start();
        write_byte(0xa0);
        ask();
        write_byte(address);
        ask();
        write_byte(date);
        ask();
        stop();
}
uchar read_add(uchar address)        //指定地址读
{
        uchar date;
        start();
        write_byte(0xa0);
        ask();
        write_byte(address);
        ask();
   start();
   write_byte(0xa1);
   ask();
   date=read_byte();
   stop();
   return date;               
}
void main()
{
        init();
        write_add(3,0xaa);
        delay1(1000);
        P0=read_add(3);
        while(1);
}分析分析为什么p0输出的是0xa1;并且改变write_byte(0Xa1)括号里的参数,P0输出改变

使用特权

评论回复
沙发
huangchui| | 2023-3-31 23:26 | 只看该作者
时序有问题。

使用特权

评论回复
板凳
zhuww|  楼主 | 2023-3-31 23:27 | 只看该作者
哪个位置的时序有问题

使用特权

评论回复
地板
tian111| | 2023-3-31 23:29 | 只看该作者
对照手册查。

使用特权

评论回复
5
zhuww|  楼主 | 2023-3-31 23:34 | 只看该作者
对了,我和另外写的一样的程序对了,程序指令和时序都一样,就是结果不一样,困惑@_@

使用特权

评论回复
6
wangzsa| | 2023-3-31 23:35 | 只看该作者
这是液晶的程序??

使用特权

评论回复
7
szt1993| | 2023-7-25 11:30 | 只看该作者
应该是时许问题,建议楼主再确认一下

使用特权

评论回复
8
OKAKAKO| | 2023-7-25 11:45 | 只看该作者
这个程序里面的delay'这个函数啥也没有还多次调用了,会不会倒是时序出问题

使用特权

评论回复
9
jf101| | 2023-7-25 13:35 | 只看该作者
OKAKAKO 发表于 2023-7-25 11:45
这个程序里面的delay'这个函数啥也没有还多次调用了,会不会倒是时序出问题 ...

应该是楼主的delay'出问题了

使用特权

评论回复
10
星辰大海不退缩| | 2023-7-25 14:27 | 只看该作者
那就是时序问题

使用特权

评论回复
11
AdaMaYun| | 2023-7-26 11:37 | 只看该作者
jf101 发表于 2023-7-25 13:35
应该是楼主的delay'出问题了

确实应该是这个问题,我也发现delay有问题

使用特权

评论回复
12
LOVEEVER| | 2023-7-26 17:36 | 只看该作者
楼主理论上应该输出啥?这个差异是怎么造成的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

893

主题

8252

帖子

1

粉丝