【实验箱已送】冲哥32位8051教学视频,学习心得
本帖最后由 STCAI-32位8051 于 2023-8-16 11:24 编辑零零散散学过不少单片机,有野火家的F103,合宙的luatos,esp32的idf开发,esp32的arduino开发等,每次都没有坚持下来,但是还是特别想学,看到冲哥的教学视频之后,看了第一集,又让我重获一些信心。每个人学单片机都有不同的目的,有的人为了找工作,有的人为了做点业余小制作,而我是想通过单片机学习计算机的底层原理,我从事计算机的软件开发也有近20年了,但是对底层cpu是怎么工作的,程序是怎么运行的,操作系统是怎么工作的,网络是怎么工作的,等等这些东西还是隔了一层纱,不知真面目,我想通过单片机的学习,更加了解程序背后的原理,因为学习单片机更接近计算机的底层。
跟STC销售申请了一个屠龙刀开发板,虽然开发板也不贵,自己又不是买不起,但是既然STC公司有这样好的福利,当然也要好好利用,不能浪费,一定要认真学起来,不负STC公司的一片好心。
本帖最后由 cuisheng 于 2023-5-11 13:07 编辑
停了好几天没学,今天又找了点时间继续学习冲哥视频的第三集和第四集:搭建开发环境,以及建立第一个点灯的项目,用STC-ISP软件进行串口烧录。
冲哥用的是实验箱,我用的是屠龙刀,搭建环境基本是一模一样的,只是板上的led用的IO口不同,屠龙刀的led灯需要控制P2组的IO,项目非常简单,主要还是需要对着文档来,上一下这一课输出的点灯代码,目前还只是常亮,没有做花式控制。
sfr P2 = 0xA0;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
void main()
{
P2M0 = 0x00;
P2M1 = 0x00;
P2 = 0x00;
while (1)
{
}
}
以上就是成功点亮屠龙刀led的代码,具体代码的含义还不是很清楚,至少板上的灯亮了。
单片机点灯,至少有两步,第一:设置IO口模式,第二:设置IO口高低电平,目前代码还不是很明白,因为还没有仔细阅读用户手册,接下来就准备多读一读用户手册,比如sfr是啥含义?貌似以前没见过。 真的点亮了?
貌似少了一句P2=0;-) 晓奇 发表于 2023-5-10 20:21
真的点亮了?
貌似少了一句P2=0;-)
{:sweat:}代码里写了,我以为没用,默认就是低电平,所以贴代码的时候,就给删了,今天我再试试{:titter:} 晓奇 发表于 2023-5-10 20:21
真的点亮了?
貌似少了一句P2=0;-)
果然不亮,我又给加上了,感谢大佬提醒{:smile:} 第四集:在线不停机下载程序(使用USB-HID协议)
这一集介绍了通过设置寄存器来实现软件复位进入ISP系统代码区执行下载程序的方法,主要涉及到一个重要的寄存器:
软复位寄存器(IAP_CONTR)
0x20 复位后重新执行用户代码
0x60 复位后到ISP区执行ISP系统代码
将IAP_CONTR设置为0x60后,系统将复位并进入ISP,开始下载程序代码,可以通过物理按键触发的形式来触发设置条件,当然,这还是有点麻烦。
我们当然要更进一步的实现自动化,通过USB-HID或者USB-CDC的方式,实现真正的自动下载,按照冲哥的视频,进行操作,然后踩了个大坑。
按照冲哥视频敲完代码,发现编译有警告,还40个,虽然还是生成了HEX文件,但是冲哥的明明没有任何警告呀,总是怀疑自己哪里出了问题,纠结了好几天,最后还是根据网上的设置,调整了下Keil的设置,忽略了那些警告,(感觉有点掩耳盗铃,警告肯定是有问题,忽略警告,但是问题仍然在),最后发现示例项目里也同样的进行了设置{:sweat:},要忽略这些警告,需要设置如下:
在Options for Target对话框中,L251 Misc选项卡里,设置disable Warning Numbers: 57 (57即是警告的类型)(上传不了图片)
另外,又优化了下代码结构,把初始化usb的操作,也都放到了sys_init方法里,这样,在main方法里,只需要调用一个sys_init方法即可,程序变得更简明:
#include "COMM/stc.h"
#include "COMM/usb.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void sys_init()
{
WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
//设置USB使用的时钟源
IRC48MCR = 0x80; //使能内部48M高速IRC
while (!(IRC48MCR & 0x01));//等待时钟稳定
usb_init();
EA = 1;
}
void main()
{
sys_init();
// 以下是自己的业务代码
P2M0 = 0x00;
P2M1 = 0x00;
P2 = 0x00;
while (1)
{
}
}
怎么申请啊???
我也想申请 哈哈 kongjkd 发表于 2023-8-3 10:25
怎么申请啊???
我也想申请 哈哈
继续用心学习吧,希望在向您召唤!让我们一起努力! sdwflzg 发表于 2023-8-3 15:17
继续用心学习吧,希望在向您召唤!让我们一起努力!
我已不是少年 中年大叔了不能专心学习了 呵呵 本帖最后由 sdwflzg 于 2023-8-4 09:28 编辑
kongjkd 发表于 2023-8-3 16:23
我已不是少年 中年大叔了不能专心学习了 呵呵
革命不分先后,英雄不分老少,大叔才是中流砥柱!{:4_187:}{:4_250:}{:4_250:}{:4_250:}
页:
[1]
2