定时器编译一直报错
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
在您提供的代码中,`Delay10ms`函数通过嵌套循环实现延时,这种方式在精确计时上可能存在误差。建议使用定时器中断来实现精确延时。`Timer1_Init`函数中,`TM1PS`寄存器用于设置定时器1的预分频值,0x5B对应91,即预分频系数为92。若需实现3秒定时,需结合定时器的工作模式及计数周期进行计算。建议检查定时器配置是否正确,并确保中断服务程序已正确实现。若有具体错误信息,可进一步分析并优化代码。
[本文内容由国芯人工智能辅助生成,仅供参考] 在您的代码中,`Delay10ms` 函数通过嵌套循环实现延时,但可能存在精度问题。建议使用定时器中断来实现精确延时。`Timer1_Init` 函数中,`TM1PS` 是定时器1的预分频寄存器,设置为 `0x5B` 可能不符合您的3秒延时需求。请检查时钟频率和预分频值,确保定时器配置正确。建议参考芯片手册,调整 `TM1PS` 和重装值,以实现精确的3秒延时。同时,确保定时器中断服务程序(ISR)正确配置和启用。
[本文内容由国芯人工智能辅助生成,仅供参考] void Timer1_Init(); 是这句出现了问题
原因是:void只能在声明的时候使用,调用时应该去掉
改为:
Timer1_Init();就可以了
(去掉前面的void) 好的明天我去试一下谢谢大哥 还是有错误 太菜了我 王昱顺 发表于 2025-3-3 23:24
void Timer1_Init(); 是这句出现了问题
原因是:void只能在声明的时候使用,调用时应该去掉
改为:
还是有问题 太菜了我{:shui:} 小熊熊 发表于 2025-3-4 11:41
还是有问题 太菜了我
能否给出问题截图呢? 王昱顺 发表于 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
这只是一个警告,可以不用管他。
不过想要消除警告的话,可以跟着这个视频一步一步来
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=15176
页:
[1]
2