找回密码
 立即注册
查看: 296|回复: 8

将89C52 代码转8051U 还需要注意什么

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-05-06 22:05:58
已绑定手机

2

主题

6

回帖

52

积分

注册会员

积分
52
发表于 2025-4-22 23:07:33 | 显示全部楼层 |阅读模式
大家好,上篇帖子大家建议将89C52 芯片转换为8051U (或者AI8051U),目前已经换了芯片,但是代码烧录入新的电路系统后无法工作。通过查阅规格书,在89C52 代码中做了如下代换:

1. 代码加入8051U 芯片 的头文件,将8051U 设置工作于8位模式。
2.P0 定义为开漏模式, 外接上拉电阻 驱动LCD,P1,P2,P3,P4口均定义位准双向口,
3. 使用片内RC震荡模式,烧录时输入12Mhz 频率,
4. 请问上述设置是否正确?是否还有别的寄存器需要设置?89C52 代码工作是正常的 但是烧录入8051U 电路后 LCD不能点亮,电路只能检测到有工作电流,按键都无反应。。。。。。
请大家不吝指教,谢谢大家
STC8051U.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

734

主题

1万

回帖

1万

积分

管理员

积分
16692
发表于 2025-4-22 23:16:49 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:470
  • 最近打卡:2025-06-18 08:23:09
已绑定手机

79

主题

5137

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-4-22 23:25:36 | 显示全部楼层
除IO外设程序兼容外还要注意:
AI8051U速度过快,LCD可能反应不过来,用逻辑分析仪或示波器测一下IO是否有信号
P0开漏,外部10K上拉,可能无法高速通信,上升沿不够快
建议直接使用内部4K上拉(接收),不需要外部上拉
只发送可以直接设置为推挽
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-05-06 22:05:58
已绑定手机

2

主题

6

回帖

52

积分

注册会员

积分
52
发表于 2025-4-22 23:27:02 | 显示全部楼层
谢谢,再学习一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:470
  • 最近打卡:2025-06-18 08:23:09
已绑定手机

79

主题

5137

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-4-22 23:31:45 | 显示全部楼层
点1602、12864、TFT及其他I8080/M6800兼容接口屏幕,建议直接学习、使用AI8051U的LCM_DMA:
https://www.stcaimcu.com/thread-11351-1-1.html
https://www.stcaimcu.com/thread-10402-1-1.html

截图202504222334112812.jpg
截图202504222331418161.jpg


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-03 21:35:26
已绑定手机

0

主题

2

回帖

10

积分

新手上路

积分
10
发表于 2025-5-3 21:35:26 | 显示全部楼层
windsu*** 发表于 2025-4-22 23:27
谢谢,再学习一下

原电脑没有带,重新注册一个号来更新一下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-03 21:35:26
已绑定手机

0

主题

2

回帖

10

积分

新手上路

积分
10
发表于 2025-5-3 22:30:53 | 显示全部楼层
mdmi*** 发表于 2025-5-3 21:35
原电脑没有带,重新注册一个号来更新一下。

现在能点亮LCD,程序的设计是先进入初始化设置,现在按设置键无法进入时间设置子程序对DS1302进行初始时间的写入数据,LCD屏幕显示也有闪烁现象,将主频设置为12MHz也是一样,按闹钟设置键后进入设置闹钟子程序LCD显示可以稳定不闪烁,按键功能也能部分实现比如数字的增减,分 秒 时的切换也可以实现,但是部分字符出现乱码。现在不知道是不是DS1302数据读取还是LCD1302写入部分出现问题。请大家指点一下这到底是什么原因。以下是初始化代码。                                                                                                         
--------------------------------------------------------------------------------                                                                                                                              void write_1602com(uchar com)//****液晶写入指令函数****
{
        rs=0;//数据/指令选择置为指令
        rw=0; //读写选择置为写
        P0=com;//送入数据
        delay(1);
        en=1;//拉高使能端,为制造有效的下降沿做准备
        delay(1);
        en=0;//en由高变低,产生下降沿,液晶执行命令
}


void write_1602dat(uchar dat)//***液晶写入数据函数****
{
        rs=1;//数据/指令选择置为数据
        rw=0; //读写选择置为写
        P0=dat;//送入数据
        delay(1);
        en=1; //en置高电平,为制造下降沿做准备
        delay(1);
        en=0; //en由高变低,产生下降沿,液晶执行命令
}
void Lcd_ram()      
{
        uint  j,k=0,temp=0x40;

           for(j=0;j<8;j++)
           {
            write_1602com(temp+j);
            write_1602dat(num[k]);
            k++;
           }
          
}

void lcd_init()//***液晶初始化函数****
{
        write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
        write_1602com(0x0c);//开显示不显示光标
        write_1602com(0x06);//整屏不移动,光标自动右移
        write_1602com(0x01);//清显示

        write_1602com(yh+1);//日历显示固定符号从第一行第1个位置之后开始显示
        for(a=0;a<14;a++)
        {
        write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分
        //delay(3);
        }
        write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示
        for(a=0;a<8;a++)
        {
        write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号
        //delay(3);
        }

}

/*********************over***********************/


/***************DS1302有关子函数********************/


//----------------------------------------
void write_1302(uchar addr, uchar dat)//向1302芯片写函数,指定写入地址,数据
{
    uchar n;
        RST = 0;
        _nop_();

        SCLK = 0;//先将SCLK置低电平。
        _nop_();
        RST = 1; //然后将RST(CE)置高电平。
        _nop_();

        for (n=0; n<8; n++)//开始传送八位地址命令
        {
                DSIO = addr & 0x01;//数据从低位开始传送
                addr >>= 1;
                SCLK = 1;//数据在上升沿时,DS1302读取数据
                _nop_();
                SCLK = 0;
                _nop_();
        }
        for (n=0; n<8; n++)//写入8位数据
        {
                DSIO = dat & 0x01;
                dat >>= 1;
                SCLK = 1;//数据在上升沿时,DS1302读取数据
                _nop_();
                SCLK = 0;
                _nop_();       
        }       
                 
        RST = 0;//传送数据结束
        _nop_();
}
uchar read_1302(uchar addr )//从1302读数据函数,指定读取数据来源地址
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;//先将SCLK置低电平。
        _nop_();
        RST = 1;//然后将RST(CE)置高电平。
        _nop_();

        for(n=0; n<8; n++)//开始传送八位地址命令
        {
                DSIO = addr & 0x01;//数据从低位开始传送
                addr >>= 1;
                SCLK = 1;//数据在上升沿时,DS1302读取数据
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//读取8位数据
        {
                dat1 = DSIO;//从最低位开始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }

        RST = 0;
        _nop_();        //以下为DS1302复位的稳定时间,必须的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;
}

uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制
{
         uchar Decimal;
        Decimal=bcd/16*10+bcd%16;
         return(Decimal );
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:344
  • 最近打卡:2025-06-18 07:54:28
已绑定手机

4

主题

399

回帖

1903

积分

金牌会员

积分
1903
发表于 2025-5-5 10:06:58 | 显示全部楼层
mdmi*** 发表于 2025-5-3 22:30
现在能点亮LCD,程序的设计是先进入初始化设置,现在按设置键无法进入时间设置子程序对DS1302进行初始时 ...

有数据,能显示,说明时钟芯片通讯和液晶显示程序基本没有问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-05-06 22:05:58
已绑定手机

2

主题

6

回帖

52

积分

注册会员

积分
52
发表于 2025-5-6 22:05:58 | 显示全部楼层
感觉就是这里描述的运行速度过快的问题,改变延时子程序之后可以实现不闪烁,但是没有头绪如何对相应的指令运行时间进行调整。。。
截图202505062202442638.jpg
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-18 13:00 , Processed in 0.181461 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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