找回密码
 立即注册
查看: 148|回复: 2

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

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:131
  • 最近打卡:2025-04-17 07:58:01
已绑定手机

2

主题

26

回帖

270

积分

中级会员

积分
270
发表于 2025-1-25 16:18:55 | 显示全部楼层 |阅读模式

跟着冲哥视频学,没跟上,不知道是哪的问题,灯闪的频繁很快,没有达到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[10]={1,2,3,4,5,6,7,8,9,10};            //运行状态

u16 count_ms[3]={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 [0] >= 300);
                  {
                  count_ms[0] = 0;
                  led1 = !led1;
                  P21 = led1;
                  }
}





回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:194
  • 最近打卡:2025-05-02 01:39:20
已绑定手机

5

主题

39

回帖

788

积分

高级会员

积分
788
发表于 2025-1-25 17:22:20 | 显示全部楼层

count_ms++;

count_ms [i]++;

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2025-1-25 23:51:51 | 显示全部楼层
2025-01-25_235044.png
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:56 , Processed in 0.115534 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表