我的学习打卡|实验箱已寄出
<p>第一集,认识单机片,没什么好打的,第二集,第一个LED,这个里面的内容有点多</p>_______________________________________________________
虽然没给我实验箱,我这个也被 我搞坏了,申请实验箱,{:baoquan:}
<p>第三集,根着学的一个点亮一个led,程序 ,</p>
<ol>
<li>打开Keil .点击 project 再点击 New uVision Project</li>
<li>将目录设定好,并输入项目名秒称</li>
<li>在弹出的窗口中,选,AI MCU Database</li>
<li>再选择单片机的型号,比如,AI8051 32bit</li>
<li>在source Group1,双击,或右击,Add existing files to Group</li>
<li>选择已完成的代码文件加入项目中</li>
<li>设置CPU的模式,在Ttarget1上右击,选Options for target"target 1"</li>
<li>CPU Mode :source(251 native)&4 Byte interrupt frame size</li>
<li>Memory Model : XSmal nearvars,far const,ptr-4</li>
<li>在Output 选项卡中,CREATE HEX File选中,建立HEX文件,HEX Format : hex-80</li>
</ol>
<p>创建头文件</p>
<ol>
<li>在单机片平台软件上获取头文件,ai8051u,保存到当前目录里面</li>
<li>源文件</li>
<li>#include "AI8051U.h"<br />
void main(void)<br />
{<br />
P2M0=0x00;<br />
P2M1=0x00;<br />
while(1)<br />
{<br />
P21=0;}<br />
}</li>
<li></li>
</ol>
<p>第4集不停电USB下载,</p>
<p>USB不停电下载<br />
1.下载所需文件(STC官网-软件工具-库函数-USB库文件)3.移植关键部分到工程:<br />
3.1 添加头文件<br />
3.2 USB初始化函数(tib+.h库实现)<br />
3.3 命令参数<br />
3.4 打开P SW2寄存器和IE2寄存器(只打开一个位!)</p>
<p><img src="data/attachment/forum/202412/28/174650rpwwoyf6jzanlaav.png" alt="微信图片_20241228174058.png" title="微信图片_20241228174058.png" /></p>
<p>|=</p>
<p>这里,的或运算,,,0000 0000</p>
<p>这里,的或运算,,,1000 0000</p>
<p>这里,的或运算,,,1000 0000 0x80</p>
<p>同等于EA=1</p>
<p>#include "AI8051U.h"<br />
#include "stc32_stc8_usb.h"<br />
char *USER_DEVICEDESC = NULL;<br />
char *USER_PRODUCTDESC = NULL;<br />
char *USER_STCISPCMD = "@STCISP#";<br />
void main()<br />
{<br />
P_SW2 |= 0x80;</p>
<pre><code>P2M0 = 0x00; P2M1 = 0x00;
usb_init(); //USB CDC 接口配置
IE2|=0x80;
EA = 1;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while (1)
{
if (bUsbOutReady)
{
USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
P21=0;
}
</code></pre>
<p>}</p>
第4集跟着做了一遍
#include "ai8051u.h" //µ÷ÓÃÍ·Îļþ
#include "stc32_stc8_usb.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
//×¢Òâ£ºÇæÌìÖùµÄLED¶Ë¿ÚÔÚP2£¬ÇÒûÓÐÈý¼«¹ÜµÄµçÔ´¿ØÖÆ£¬ËùÒÔÖ»Òª¿ØÖÆP2¶Ë¿Ú¼´¿É
void main(void)
{
P_SW2 |= 0x80;
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;
usb_init(); //USB CDC ½Ó¿ÚÅäÖÃ
EA = 1;
while (DeviceState != DEVSTATE_CONFIGURED); //µÈ´ýUSBÍê³ÉÅäÖÃ
while (1)
{
if (bUsbOutReady)
{
USB_SendData(UsbOutBuffer,OutNumber); //·¢ËÍÊý¾Ý»º³åÇø£¬³¤¶È£¨½ÓÊÕÊý¾ÝÔÑù·µ»Ø, ÓÃÓÚ²âÊÔ£©
usb_OUT_done();
}
P20 = 0; //P20¶Ë¿ÚÊä³ö0V
//P21 = 0;
P22 = 0;
P27=0; //P21¶Ë¿ÚÊä³ö0V
}
}
第五集打卡
,C语言基础,以前学会,以为学了没什么用,现在,这不用上了
0为假,非0为真。
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
//注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可,本节课程的其余内容(C语言测试)均通用!
#define u8unsigned char //8位无符号变量(0-255)
#define u16 unsigned int //16位无符号变量(0-65535)
u16 X = 200;
u16 Y = 10;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
P_SW2 |= 0x80; //B7位写1,使能访问XFR
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;
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
EA = 1; //IE |= 0X80;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
Y=(u16)UsbOutBuffer;
if( X && Y ) //如果条件为真,输出什么
{
printf("条件为真\r\n");
}
else
{
printf("条件为假\r\n");
}
printf("X / Y = %u \r\n",(u16)(X/Y));
printf("X %% Y = %u \r\n",(u16)(X%Y));
usb_OUT_done(); //
}
}
}
消抖if(P32==0){
Delay20ms();
if(P32==0){
P20=!P20; //直接取反
while(P32==0);
}
} 第6集
gpio 的意思 ,自定义引角,
高低电平的标准,和VCC有关
io的工作模式,准双向口
推挽输出
高阻输入
开漏模式
这里,检测,20毫秒
第七集学的有点晕,先打个卡,明天再学一下#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h"
#include "intrins.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
//注意:擎天柱的LED端口在P2,且没有三极管的电源控制,所以只要控制P2端口即可
void Delay20ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i) i--;
}
void Timer0_Init(void) //3秒@24.000MHz
{
TM0PS = 0x5B; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x3F; //设置定时初始值
TH0 = 0x01; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
void main(void)
{
int count=1;
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;
usb_init(); //USB CDC 接口配置
Timer0_Init();
EA = 1;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while (1)
{
if (bUsbOutReady)
{
USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
printf("STC YY???DS\r\n");
usb_OUT_done();
}
// P20 = 0; //P20端口输出0V
// P22 = 0;
// if(P32==0){
// P21=0;
// }
//// else {
// P21=1;}
if(P32==0){
Delay20ms();
if(P32==0){
printf("按键按下次数\xfd:%d次\r\n",(int)count);
count++;
while(P32==0);
}
}
}
}
void Timer0_Isr(void) interrupt 1
{
P20=!P20;
} 第七集,了解了FOR的用法 for(i=0,i<3,i++){}
创建.c .h文件,xxx.c xxx.h
调用,.h
#ifndef __XXX_H
#define __XXX_H
#endif
.c ,先在项目里添加xxx.c文件
#include "xxx.h"
然后在main.c里也要调用
#include "xxx.h
"
每次新建文件夹都是子文件夹,要在魔术棒里,C251,项目路径添加上此路径不然报错,
结构体数组的周斯性任务调度
typedef struct
{
u8 Run; //任务状态:Run/Stop
u16 TIMCount; //定时计数器
u16 TRLTime;/重载计数器
void(*TaskHook)(void); //任务函数
}TASK_COMPONENTS;
这第8集,难度直线上升
{:4_168:}{:4_168:}
页:
[1]
2