[技术问答] SC92f8003的单片机,用TM1650扩展按键,显示正常,按揵读不出

[复制链接]
2126|16
 楼主| 陈立业 发表于 2020-6-9 11:17 | 显示全部楼层 |阅读模式
本帖最后由 陈立业 于 2020-6-9 12:29 编辑

sbit CLK = P1^4;        //时钟
sbit DIO = P1^5;        //数据

uchar Scan_Key(void)
        {  // 按键扫描
                uchar i;
                uchar rekey;
                Start1650();
                WrByte1650(0x49);        //读按键命令
                Ask1650();
                //DIO = 1;
                SET_SDA_IN_TM1650();        //切换为输入模式
                for(i=0;i<8;i++)
                {
                        CLK = 1;
                        rekey = rekey<<1;
                        if(DIO)
                                {
                                        rekey++;
                                }
                        Delay_5us();
                        CLK = 0;
                }
                SET_SDA_OUT_TM1650();        //切换为输出模式
                Ask1650();
                Stop1650();
                return(rekey);
        }


void SET_SDA_IN_TM1650(void)        //切换为输入模式
{
  P1CON=0x5c;  //设置为0101 1100输入模式
  P1PH=0x20;
}

void SET_SDA_OUT_TM1650(void)        //切换为输出模式
{                                                              
  P1CON=0x7c;  //设置为0111 1100强推挽模式
  P1PH=0x00;        //设置为0000 0000
}
taobaofarmer 发表于 2020-6-9 11:39 | 显示全部楼层
我早就遇到了同样的问题,因为赛元8051的IO没有准双向模式,所以在时钟/数据双线双向通信的应用中,需要读IO口高低状态的时候,首先需要置口线为输入状态然后再读,但问题就在这,转为了输入状态之后,根本就读不到从器件送出的数据位,其实对于IO应用来讲,这是一个非常重要的方面,但赛元对这个好像根本不重视,基本无视,给出的模拟I2C的例程我也用了,根本不好使,无奈之下但凡有这种应用的场合我只能仍然继续使用STM8,在IO只做输入或者只做输出的情况下才用赛元的8051,全天下的人都知道如果没有准双向模式,在读之前要转成输入模式,这个不用你告诉,问题是这个方法根本不好使,官方你就不用给出这例程那例程的,你用你的开发板,接AT24C02做个模拟I2C的读写实验,看看有没有问题,要能根据24C02给出的应答位和非应答位返回成功和失败结果的
 楼主| 陈立业 发表于 2020-6-9 12:28 | 显示全部楼层
taobaofarmer 发表于 2020-6-9 11:39
我早就遇到了同样的问题,因为赛元8051的IO没有准双向模式,所以在时钟/数据双线双向通信的应用中,需要读I ...

我的很奇怪,外接一个导线,将其悬空。就可以了
taobaofarmer 发表于 2020-6-9 13:16 | 显示全部楼层
这个现象你是怎么发现的?

评论

示波器测波形的时候  发表于 2020-6-9 13:50
 楼主| 陈立业 发表于 2020-6-9 13:59 | 显示全部楼层
taobaofarmer 发表于 2020-6-9 13:16
这个现象你是怎么发现的?

估计是芯片设计问题
 楼主| 陈立业 发表于 2020-6-9 14:04 | 显示全部楼层
taobaofarmer 发表于 2020-6-9 11:39
我早就遇到了同样的问题,因为赛元8051的IO没有准双向模式,所以在时钟/数据双线双向通信的应用中,需要读I ...

赛元的技术支持也挺垃圾的,跟机器人一样。反正不管说什么都是程序的问题,更芯片无关。
taobaofarmer 发表于 2020-6-9 14:06 | 显示全部楼层
如果你说的情况属实的话,那应该是引脚上的分布电容太大

评论

有什么办法可以解决这个问题吗  发表于 2020-6-9 14:56
 楼主| 陈立业 发表于 2020-6-9 14:45 | 显示全部楼层
taobaofarmer 发表于 2020-6-9 14:06
如果你说的情况属实的话,那应该是引脚上的分布电容太大

是真的,导线太短都不行,
赛元MCU3 发表于 2020-6-9 17:50 | 显示全部楼层
您好,根据您的描述,我们这边无法定位问题所在,我这边私信您一个地址,您可以把板子寄过来我们这边实际测试一下。
赛元MCU3 发表于 2020-6-9 17:54 | 显示全部楼层
您好,根据您的描述,暂时无法定位问题所在,我这边私信您一个地址,您可以把板子寄过来我们这边实际测试一下。
赛元MCU3 发表于 2020-6-10 14:23 | 显示全部楼层
陈立业 发表于 2020-6-9 12:28
我的很奇怪,外接一个导线,将其悬空。就可以了

您好,如果外接一根导线就可以了,那问题可能是IO上拉能力不足导致的,您可以在TM1650的SDA口上外接一个上拉电阻试一下效果,另外通信速度可以改慢一点试试,如果方便的话最好还是把板子寄给我们,我们具体看一下,有板子的话我们比较好定位问题

评论

上拉也不行  发表于 2020-6-10 15:03
qq986433936 发表于 2020-6-11 07:00 来自手机 | 显示全部楼层
我用92f7250,模拟的HDQ单总线协议进行通讯,IO口也是需要不停转换状态的,批量没有任何问题。我估计你的程序问题。

评论

我的是8003芯片不一样的  发表于 2020-6-11 21:13
赛元MCU3 发表于 2020-6-11 14:23 | 显示全部楼层
本帖最后由 赛元MCU3 于 2020-6-11 14:30 编辑

你好,由于手上没有TM1650,找到了一颗24C02芯片,所以写了一个SC92F8003模拟IIC主机读写24C02的程序,循环测试读写256byte数据都正常,TM1650和24C02都是IIC从机,通信方式一样,可以参考一下,如下是主循环程序和测试结果,程序功能是先将24C02地址0-255分别写入0-255,然后再读出来,第二个循环是将24C02地址0-255分别写入255-0,然后再读出来,读出来的数据通过UART发送到电脑串口助手上做显示;另外赛元全部的芯片Flash ROM都可以进行IAP操作,可以掉电保存,IAP的范围可以设置不同的大小,可以根据程序大小和需要存储的数据多少设置不同的大小,一般情况下不需要外接EEPROM,直接用赛元MCU内部的Flash ROM做EEPROM用就可以了 新建位图图像.jpg
新建位图图像2.jpg
92F8003读写24C02.rar (95.16 KB, 下载次数: 27)




您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部