1.例程代码讲解
\qquad由于是第一次使用STC的32位单片机,所以就先不使用AiCube软件,解读一遍例程吧(第一次使用Markdown编写,排版可能不太好看,勿怪!!!)
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
P_SW2 |= EAXFR; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
RSTFLAG |= 0x04; //设置硬件复位后需要检测P3.2的状态选择运行区域,否则硬件复位后进入USB下载模式
以上代码的所有寄存器都可以在AI8051U规格书里面找到
对于不熟悉寄存器编写代码的朋友还是有必要看看这个写法的
如下图所示,WTST寄存器作用就是加快执行CPU指令

WTST寄存器说明
如下图所示,P_SW2寄存器说明作用就是将IO口功能进行拓展,比较 类似于STM32的引脚复用功能!!! ,此处或上EAXFR就是为了使能XFR,至于XFR是什么在下面第二张图说明了是拓展特殊功能寄存器的,而EAXFR在KeilC251里面默认宏定义为0x80,即使能P_SW2

P_SW2寄存器说明

SFR、XFR寄存器,EAXFR说明
此处CKCON作用同上WTST

CKCON寄存器说明
RSTFLAG寄存器说明如下图所示,因为篇幅原因此处只展示了部分,有兴趣的朋友可以自己去看看,规格书里面都有

RSTFLAG寄存器说明
usb_init();
Timer0_Init();
IE2 |= EUSB; //IE2相关的中断位操作使能后,需要重新设置EUSB
EA = 1; //打开总中断
while(1)
{
#if(VirtualDevice)
SoftwareMarquee();
#else
HardwareMarquee();
#endif
}
\qquad至于以上代码部分应该不需要过多讲解了,这些学过51的朋友们应该都懂的😂😂😂
2.提问部分
#define MAIN_Fosc 24000000L //定义主时钟
#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率, 1000次/秒
//USB调试及复位所需定义
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
a. 不太理解这里的MAIN_Fosc意义是什么,单纯给Timer0用的吗?如果不是那定义在这里的作用是什么?因为例程里面也写了注释说明用户可以自行更改下载频率,我没有在代码里面看见像32一样定义时钟频率,这里就很懵,有没有大佬可以讲解一下8051U是怎么定义时钟频率的?
b. 此处的USB调试及复位所需定义的作用是什么?