ubexnokg 发表于 2024-12-23 22:24:21

我的学习打卡|实验箱已寄出

<p>第一集,认识单机片,没什么好打的,第二集,第一个LED,这个里面的内容有点多</p>

ubexnokg 发表于 2024-12-30 10:27:09



_______________________________________________________
虽然没给我实验箱,我这个也被 我搞坏了,申请实验箱,{:baoquan:}

ubexnokg 发表于 2024-12-23 22:25:05

<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&quot;target 1&quot;</li>
<li>CPU Mode :source(251 native)&amp;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 &quot;AI8051U.h&quot;<br />
void main(void)<br />
{<br />
P2M0=0x00;<br />
P2M1=0x00;<br />
while(1)<br />
{<br />
P21=0;​}<br />
}</li>
<li></li>
</ol>

ubexnokg 发表于 2024-12-23 23:20:20

<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 &quot;AI8051U.h&quot;<br />
#include &quot;stc32_stc8_usb.h&quot;<br />
char *USER_DEVICEDESC = NULL;<br />
char *USER_PRODUCTDESC = NULL;<br />
char *USER_STCISPCMD = &quot;@STCISP#&quot;;<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>

ubexnokg 发表于 2024-12-23 23:40:35

第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
    }
}

ubexnokg 发表于 2024-12-27 17:20:53

第五集打卡
,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();                                                        //
      }
               

        }
}

ubexnokg 发表于 2024-12-27 23:45:56

消抖if(P32==0){
                                        Delay20ms();
                                        if(P32==0){
                                                P20=!P20; //直接取反
                                                while(P32==0);
                                                }
                                       
                                }       

ubexnokg 发表于 2024-12-27 23:46:17

第6集
gpio 的意思 ,自定义引角,
高低电平的标准,和VCC有关
io的工作模式,准双向口
推挽输出
高阻输入
开漏模式

这里,检测,20毫秒



ubexnokg 发表于 2024-12-28 00:19:36

第七集学的有点晕,先打个卡,明天再学一下#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;
}

ubexnokg 发表于 2024-12-29 13:28:42

第七集,了解了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;

ubexnokg 发表于 2024-12-29 13:32:24

这第8集,难度直线上升
{:4_168:}{:4_168:}
页: [1] 2
查看完整版本: 我的学习打卡|实验箱已寄出