小熊熊 发表于 2025-3-3 22:56:28

定时器编译一直报错

void Delay10ms(void)      //@24.000MHz
{
      unsigned char data i, j;

      i = 234;
      j = 115;
      do
      {
                while (--j);
      } while (--i);
}
void Timer1_Init(void)                //3秒@24.000MHz
{
      TM1PS = 0x5B;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
      AUXR &= 0xBF;                        //定时器时钟12T模式
      TMOD &= 0x0F;                        //设置定时器模式
      TL1 = 0x3F;                              //设置定时初始值
      TH1 = 0x01;                              //设置定时初始值
      TF1 = 0;                              //清除TF1标志
      TR1 = 1;                              //定时器1开始计时
      ET1 = 1;                              //使能定时器1中断
}
void main(void) //    主函数
{
      WTST=0;
      EAXFR=1;
      CKCON=0;      
    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;
    void Timer1_Init();      
    while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置
    while (1)
    {
      if (bUsbOutReady)
      {
//            USB_SendData(UsbOutBuffer,OutNumber);//发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        
                        printf("一起来打王者荣耀\r\n");
            usb_OUT_done();
                }
               
                if(P32==0)
                {
                  Delay10ms();
                        while(P32==0);
      }
    }
}
      void Timer1_Isr(void) interrupt 3
   {
         state = !state;
               P20=state;
   }

Rebuild target 'Target 1'
compiling main.c...
main.c(50): error C25: syntax error near 'void'
main.c(51): error C25: syntax error near 'while'
main.c(51): error C25: syntax error near '!='
main.c(52): error C25: syntax error near '1'
main.c(55): error C103: 'bUsbOutReady': illegal function definition (missing ';' ?)
Target not created.
Build Time Elapsed:00:00:00



国芯人工智能 发表于 2025-3-3 22:58:00

在您提供的代码中,`Delay10ms`函数通过嵌套循环实现延时,这种方式在精确计时上可能存在误差。建议使用定时器中断来实现精确延时。`Timer1_Init`函数中,`TM1PS`寄存器用于设置定时器1的预分频值,0x5B对应91,即预分频系数为92。若需实现3秒定时,需结合定时器的工作模式及计数周期进行计算。建议检查定时器配置是否正确,并确保中断服务程序已正确实现。若有具体错误信息,可进一步分析并优化代码。

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-3-3 22:58:00

在您的代码中,`Delay10ms` 函数通过嵌套循环实现延时,但可能存在精度问题。建议使用定时器中断来实现精确延时。`Timer1_Init` 函数中,`TM1PS` 是定时器1的预分频寄存器,设置为 `0x5B` 可能不符合您的3秒延时需求。请检查时钟频率和预分频值,确保定时器配置正确。建议参考芯片手册,调整 `TM1PS` 和重装值,以实现精确的3秒延时。同时,确保定时器中断服务程序(ISR)正确配置和启用。

[本文内容由国芯人工智能辅助生成,仅供参考]

王昱顺 发表于 2025-3-3 23:24:01

void Timer1_Init();   是这句出现了问题
原因是:void只能在声明的时候使用,调用时应该去掉
改为:
Timer1_Init();就可以了
(去掉前面的void)

小熊熊 发表于 2025-3-3 23:25:46

好的明天我去试一下谢谢大哥

小熊熊 发表于 2025-3-4 10:31:01

还是有错误   太菜了我

小熊熊 发表于 2025-3-4 11:41:30

王昱顺 发表于 2025-3-3 23:24
void Timer1_Init();   是这句出现了问题
原因是:void只能在声明的时候使用,调用时应该去掉
改为:


还是有问题 太菜了我{:shui:}

王昱顺 发表于 2025-3-4 13:23:02

小熊熊 发表于 2025-3-4 11:41
还是有问题 太菜了我

能否给出问题截图呢?

小熊熊 发表于 2025-3-4 14:22:37

王昱顺 发表于 2025-3-4 13:23
能否给出问题截图呢?
#include "ai8051u.h"//      调用头文件
#include "stc32_stc8_usb.h"
#include "intrins.h"
#defineU8 unsigned char
#define U16 unsigned int
U8 state=0;
U8Run_stste=0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void Delay10ms(void)      //@24.000MHz
{
      unsigned char data i, j;

      i = 234;
      j = 115;
      do
      {
                while (--j);
      } while (--i);
}
void Timer1_Init(void)                //3秒@24.000MHz
{
      TM1PS = 0x5B;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
      AUXR &= 0xBF;                        //定时器时钟12T模式
      TMOD &= 0x0F;                        //设置定时器模式
      TL1 = 0x3F;                              //设置定时初始值
      TH1 = 0x01;                              //设置定时初始值
      TF1 = 0;                              //清除TF1标志
      TR1 = 1;                              //定时器1开始计时
      ET1 = 1;                              //使能定时器1中断
}
void main(void) //    主函数
{
      WTST=0;
      EAXFR=1;
      CKCON=0;      
    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;
      Timer1_Init();
   EA = 1;
      
    while (DeviceState != DEVSTATE_CONFIGURED);   // 等待USB完成配置
    while (1)
    {
      if (bUsbOutReady)
      {
//            USB_SendData(UsbOutBuffer,OutNumber);//发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        
                        printf("一起来打王者荣耀\r\n");
            usb_OUT_done();
                }
               
                if(P32==0)
                {
                  Delay10ms();
                        while(P32==0);
      }
    }
}

         void Timer1_Isr(void) interrupt 3
   {
         state = !state;
               P20=state;
   }

Build target 'Target 1'
linking...
*** WARNING L27: INCOMPATIBLE INTERRUPT FRAME SIZE
    MODULE:.\新建文件夹\范例程序\查询模式STC-CDC范例程序\stc32g_cdc_query_demo\stc_usb_cdc_32.LIB (usb)
    FRAME:   4 BYTES SAVED ON INTERRUPT
Program Size: data=8.3 edata+hdata=424 xdata=192 const=73 code=7688
creating hex file from ".\Objects\LED1"...
".\Objects\LED1" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:00:00:00

王昱顺 发表于 2025-3-4 14:46:09

这只是一个警告,可以不用管他。
不过想要消除警告的话,可以跟着这个视频一步一步来
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=15176
页: [1] 2
查看完整版本: 定时器编译一直报错