一点痕迹 发表于 2024-12-20 19:27:02

<p>第七课 课后练习作业</p>
<pre><code>#include &quot;ai8051u.h&quot;
#include &lt;intrins.h&gt;
#include &quot;stc32_stc8_usb.h&quot;



char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = &quot;@STCISP#&quot;;

unsigned char LED = 0;                //LED变量
unsigned char GD1 = 0;      //功德计数



//设置定时器2为1秒溢出
void Timer2_Init(void)                //1秒@24.000MHz
{
        TM2PS = 0x1E;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &amp;= 0xFB;                        //定时器时钟12T模式
        T2L = 0xFC;                                //设置定时初始值
        T2H = 0x03;                                //设置定时初始值
        AUXR |= 0x10;                        //定时器2开始计时
        IE2 |= 0x04;                        //使能定时器2中断
}

//设置定时器3为2秒溢出
void Timer3_Init(void)                //2秒@24.000MHz
{
        TM3PS = 0x3D;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        T4T3M &amp;= 0xFD;                        //定时器时钟12T模式
        T3L = 0xFC;                                //设置定时初始值
        T3H = 0x03;                                //设置定时初始值
        T4T3M |= 0x08;                        //定时器3开始计时
        IE2 |= 0x20;                        //使能定时器3中断
}



void main(void)
{

        WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

       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;

        P40 = 0;    //LED 总开关

          while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置

    while(1)
    {
       
       
       
               if ( P32 == 0 )
      {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        printf(&quot;功德+1: %u 次\r\n &quot;,(unsigned int)(GD1));
                        GD1 ++;
            usb_OUT_done();
                        LED = 0;                                                //点亮LED
                        P00 = LED;
                        P01 = LED;
                        P02 = LED;
                        P03 = LED;
                        P04 = LED;
                        P05 = LED;
                        P06 = LED;
                        P07 = LED;       
                  Timer2_Init();                                 //定时器2初始化
                        while( P32 == 0 )
                        {
                        }
      }
       
                if ( P33 == 0 )
      {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        printf(&quot;功德+2: %u 次\r\n &quot;,(unsigned int)(GD1));
                        GD1 += 2;
            usb_OUT_done();       
                        LED = 0;                                                //点亮LED
                        P00 = LED;
                        P01 = LED;
                        P02 = LED;
                        P03 = LED;
                        P04 = LED;
                        P05 = LED;
                        P06 = LED;
                        P07 = LED;
                        Timer3_Init();               //初始化定时器3
                        while( P33 == 0 )
                        {
                        }
      }
    }
}


//定时器2中断函数 1秒关闭LED
void Timer2_Isr(void) interrupt 12
{
        LED = 1;
        P00 = LED;
        P01 = LED;
        P02 = LED;
        P03 = LED;
        P04 = LED;
        P05 = LED;
        P06 = LED;
        P07 = LED;
        AUXR &amp;= ~0x10;    //暂停定时器2
}

//定时器3中断函数 2秒关闭LED
void Timer3_Isr(void) interrupt 19
{
        LED = 1;
        P00 = LED;
        P01 = LED;
        P02 = LED;
        P03 = LED;
        P04 = LED;
        P05 = LED;
        P06 = LED;
        P07 = LED;
        T4T3M &amp;= ~0x08;        //暂停定时器3
}
</code></pre>

一点痕迹 发表于 2024-12-20 19:32:37

一点痕迹 发表于 2024-12-20 19:27
第七课 课后练习作业
#include &quot;ai8051u.h&quot;
#include &lt;intrins.h&gt;


<p>bug修改</p>
<pre><code>      USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                printf(&quot;功德+1: %u 次\r\n &quot;,(unsigned int)(GD1));
                GD1 ++;
         usb_OUT_done();
</code></pre>
<p>改为 解决串口输出延迟一次按键计数的bug</p>
<pre><code>      USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                GD1 ++;
                printf(&quot;功德+1: %u 次\r\n &quot;,(unsigned int)(GD1));
      usb_OUT_done();
</code></pre>
页: 1 [2]
查看完整版本: AI8051U学习打卡