找回密码
 立即注册
查看: 199|回复: 4

8051U学习记录

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:144
  • 最近打卡:2025-05-05 15:54:19

32

主题

149

回帖

995

积分

高级会员

积分
995
发表于 2025-1-3 13:02:58 | 显示全部楼层 |阅读模式
之前买过8h v9.6和32G v9.4的试验箱,什么屠龙刀,开山斧,打狗棒,都买过。(差生文具多么)



现在又眼馋8051u试验箱。这次打算不花钱白piao一个。

所以特开此贴准备记录下学习过程,分享学习中的踩坑记录,这是第一篇,希望能写出足够数量的足够质量的学习笔记。

先白piao到一块擎天柱实验板。
这个板子虽然没有焊接排针,没法直插到普中试验箱上,但是板子上p2那八个口给焊接了led。于是打算先做一个流水灯试验。

注意,这个擎天柱8051U必须要用keilc251编程。

我这个老掉牙t400笔记本之前没装c251,只装了c51.结果用官方提供的擎天柱流水灯程序总是编译报错

compiling main.c...
main.c(20): error C213: left side of asn-op not an lvalue
main.c - 1 Error(s), 0 Warning(s).

17到第30行是
void Init(void)
{
        WTST=0;                        //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXFR=1;                                //扩展寄存器(XFR)访问使能
        CKCON=0;                                //提高访问XRAM速度
        P0M1=0x00;        P0M0=0x00;        //设置为准双向口
        P1M1=0x00;        P1M0=0x00;        //设置为准双向口
        P2M1=0x00;        P2M0=0x00;        //设置为准双向口
        P3M1=0x00;        P3M0=0x00;        //设置为准双向口
        P4M1=0x00;        P4M0=0x00;        //设置为准双向口
        P5M1=0x00;        P5M0=0x00;        //设置为准双向口
        P6M1=0x00;        P6M0=0x00;        //设置为准双向口
        P7M1=0x00;        P7M0=0x00;        //设置为准双向口
}


怎么也看不错误来。回想起讨要擎天柱时候,stc客户经理要求给c251软件截图,于是还是不怕麻烦的装了c251.
然后新建工程,编译,一次通过!!!

下载到板子上也要注意:
硬件选项---选择cpu指令模式---必须选择 32bit!
感谢 布丁橘长在 https://www.bilibili.com/video/BV1Kx4y1s7MK 中的提示!!!

然后又删掉了官方程序,改写了一下

#include "AI8051U.H"

#include <intrins.h>

#define                MAIN_Fosc        24000000UL

void delay_ms(unsigned char ms)
{
        unsigned int i;
        do
        {
                i=MAIN_Fosc/6000;
                while(--i);        //6T per loop
        }
        while(--ms);
}

void main(void)
{
        P2M1=0x00;P2M0=0x00;
        P4M1=0x00;P4M0=0x00;

        P40=0;
       
        while(1){
                P22=0;
        delay_ms(900000);
                P22=1;
        delay_ms(1200000);
        }
}


注意我在main函数里延时时间函数设置的那么大,但是即便那么大,依旧是快速闪烁,100000,还是900000都看不出来有啥区别。
真是有点怪哉。恳请大佬指点迷津。


ps:
keic251我安装了一个指定目录c:\keilc_251目录下,
将keilc51的c51目录和uv4目录都拷贝到keilc_251目录下,其中uv4目录拷贝时候选择跳过相同的文件。
将keilc51下tools.ini文件里的c51一节拷贝到 keic_251目录下的tools.ini文件的末尾。将里面的目录名改成keic_251的。
然后以管理员身份运行。crack之。

每次运行都要右键以管理员身份运行。否则,help菜单下about就看不到内容。怪哉。索性,以管理员身份运行也不麻烦。也不去处理了。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-06 07:30:52

30

主题

347

回帖

3496

积分

荣誉版主

积分
3496
发表于 2025-1-4 09:12:24 | 显示全部楼层
延时函数的原型是:
void delay_ms(unsigned char ms);
其入口参数 ms 是 unsigned char 类型, 取值范围是0--255.
而在使用该函数时:
使用了
delay_ms(900000);
delay_ms(1200000);
入口参数已经远超了unsigned char 范围, 被截取为低位字节了,
实际效果估算是delay_ms(160); delay_ms(128);
延时时间很短,而且两者区别不大,几乎难以察觉.

供参考....
学习记录写得不错...加油!

  

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:144
  • 最近打卡:2025-05-05 15:54:19

32

主题

149

回帖

995

积分

高级会员

积分
995
发表于 2025-1-6 11:13:02 | 显示全部楼层
浦江*** 发表于 2025-1-4 09:12
延时函数的原型是:
void delay_ms(unsigned char ms);
其入口参数 ms 是 unsigned char 类型, 取值范围是0 ...

多谢多谢!求问这些函数原型是不是定义在lib文件中,lib文件的源码在哪里可以看到?

点评

感谢你的提问。 本贴话题其实还没有涉及到LIB库文件的应用。 在1楼的源代码中,你把delay_ms()函数写在main()之前了, 所以你在主函数main()中可以直接调用delay_ms()的. 换言之, 如果你把delay_ms()函数写在main()  详情 回复 发表于 2025-1-6 12:31
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-05-06 07:30:52

30

主题

347

回帖

3496

积分

荣誉版主

积分
3496
发表于 2025-1-6 12:31:41 | 显示全部楼层
yzhk*** 发表于 2025-1-6 11:13
多谢多谢!求问这些函数原型是不是定义在lib文件中,lib文件的源码在哪里可以看到? ...

感谢你的提问。
本贴话题其实还没有涉及到LIB库文件的应用。
在1楼的源代码中,你把delay_ms()函数写在main()之前了,
所以你在主函数main()中可以直接调用delay_ms()的.
换言之, 如果你把delay_ms()函数写在main()之后,
那么在main()函数之前必须说明一句:
void delay_ms(unsigned char ms);
否则,编译程序就要提示错误了.

其实,你把1楼中的函数改写成:
void delay_ms(unsigned long  ms);
就可以了.

另外, 如果编程时涉及到LIB之类的库文件, 并且源代码被封装不可见时,
一般会提供相应的H头文件,其中会说明函数原型的.  
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:144
  • 最近打卡:2025-05-05 15:54:19

32

主题

149

回帖

995

积分

高级会员

积分
995
发表于 2025-1-6 13:16:25 | 显示全部楼层
浦江*** 发表于 2025-1-6 12:31
感谢你的提问。
本贴话题其实还没有涉及到LIB库文件的应用。
在1楼的源代码中,你把delay_ms()函数写在ma ...

明白了。原来您说得是我定义的delay函数。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-6 21:53 , Processed in 0.118304 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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