q342698102 发表于 2025-1-25 16:18:55

求助2:1毫秒定时器运行不正确


跟着冲哥视频学,没跟上,不知道是哪的问题,灯闪的频繁很快,没有达到300ms的需求,闪的太快了,先谢谢老师了

#include "AI8051U.h"
#include "stc32_stc8_usb.h"                        //调用头文件
#include "intrins.h"

#define u8 unsigned char                //8位无符号变量(0-255)
#define u6 unsigned int                //16位无符号变量(0-65535)
      
u8 led1=0;
u8 led2=0;
u8 led3=0;
u8 i;

//u8 state={1,2,3,4,5,6,7,8,9,10};            //运行状态

u16 count_ms={0,0,0};

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void Timer0_Init(void)                //1毫秒@24.000MHz
{
      AUXR &= 0x7F;                        //定时器时钟12T模式
      TMOD &= 0xF0;                        //设置定时器模式
      TL0 = 0x30;                              //设置定时初始值
      TH0 = 0xF8;                              //设置定时初始值
      TF0 = 0;                              //清除TF0标志
      TR0 = 1;                              //定时器0开始计时
      ET0 = 1;                              //使能定时器0中
}

//Main 主函数***********************

void main(void)      
{      
      
      WTST = 0;                  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1;               //扩展寄存器(XFR)访问使能
    CKCON = 0;               //提高访问XRAM速度
      
      P0M0 = 0X00;      P0M1 = 0X00;      
      P1M0 = 0X00;      P1M1 = 0X00;
      P2M0 = 0X00;      P2M1 = 0X00;
      P3M0 = 0X00;      P3M1 = 0X00;
      P4M0 = 0X00;      P4M1 = 0X00;
      P5M0 = 0X00;      P5M1 = 0X00;
      P6M0 = 0X00;      P6M1 = 0X00;
      P7M0 = 0X00;      P7M1 = 0X00;      
      P40 = 0;
      
      usb_init();                                                      //初始化USB CDC 接口配置
      Timer0_Init();                                                //调用定时器函数(定时器初始化)
      IE2 |= 0x80;                                                 //使能USB中断
      EA = 1;                                                                //打开总中断


      while(1)                                                      //一直执行
      {
          P20 = 0;
                if (bUsbOutReady)
      {
            usb_OUT_done();
      }
               

      }
}


void Timer0_Isr(void) interrupt 1                //定时器0中断,3秒执行一次
{      
      for(i=0;i<3;i++)
          {
             count_ms++;                  
          }
                if (count_ms >= 300);
                  {
                  count_ms = 0;
                  led1 = !led1;
                  P21 = led1;
                  }
}

https://www.stcaimcu.com/data/attachment/forum/202501/25/111505iie7ia29bj2niinl.png

https://www.stcaimcu.com/data/attachment/forum/202501/25/111505xhezvxyhngq9gkdq.png

C_wolf 发表于 2025-1-25 17:22:20

<p>count_ms++;</p>
<p>count_ms ++;</p>

Lkck8210 发表于 2025-1-25 23:51:51


页: [1]
查看完整版本: 求助2:1毫秒定时器运行不正确