把外围电路断开,烧录附件里面的hex文件到板子上,用示波器测量P35脚电平。
另外尽量不要发外部链接,否 ...
烧录了你提供的压缩包中hex文件,通过万用表测量p3.5 也是跳的,我没有示波器。 rengran 发表于 2023-12-8 10:08
是不是有共用该端口的?
没有共用端口,是一个很简单的开发板,见上图,只是把pin脚引出来。 caven 发表于 2023-12-8 16:36
没有共用端口,是一个很简单的开发板,见上图,只是把pin脚引出来。
难不成是芯片的事?商家用的是STC的正规芯片么。有的芯片也有造假 乘风飞扬 发表于 2023-12-8 09:18
把外围电路断开,烧录附件里面的hex文件到板子上,用示波器测量P35脚电平。
另外尽量不要发外部链接,否 ...
我看io.c 的代码是设置方波输出,我现在没有示波器,看不到。 乘风飞扬 发表于 2023-12-8 09:18
把外围电路断开,烧录附件里面的hex文件到板子上,用示波器测量P35脚电平。
另外尽量不要发外部链接,否 ...
我把io.c 的代码修改为设置 p3.5 为高电平,用万用表测量,电平没有跳动。我原来的测试代码是调用开发板携带的例子 GPIO.c 的函数的,测试p3.4,p3.6 都没有问题,只是p3.5有问题。 用仿真功能来调试
【新提醒】仿真STC8系列MCU,用【一箭双雕之USB转双串口/全自动烧录器】 - 仿真/ISP下载/做自己的ISP/编译器/头文件 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
我的代码中有对time0的配置,如果注释掉对time0的配置代码,p3.5 就不跳了,在time0的中断处理函数中没有任何操作代码 。按道理这个time0与 p3.5应该没有任何关系啊。
void Timer_config(void)
{
TIM_InitTypeDef TIM_InitStructure; //
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
TIM_InitStructure.TIM_Polity = Polity_0; // Polity_0,Polity_1,Polity_2,Polity_3
TIM_InitStructure.TIM_Interrupt = ENABLE; // ENABLEDISABLE.
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; // TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
TIM_InitStructure.TIM_ClkOut = ENABLE; // ENABLE DISABLE
TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / (50*12));
TIM_InitStructure.TIM_Run = ENABLE; // ENABLE DISABLE
Timer_Inilize(Timer0,&TIM_InitStructure); //Timer0 Timer0,Timer1,Timer2,Timer3,Timer4
}
void timer0_int (void) interrupt TIMER0_VECTOR
{
//P67 = ~P67;
//gucTime0 = 1;
} #ifdef time0_enable
void Timer_config(void)
{
TIM_InitTypeDef TIM_InitStructure; //
TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
TIM_InitStructure.TIM_Polity = Polity_0; // Polity_0,Polity_1,Polity_2,Polity_3
TIM_InitStructure.TIM_Interrupt = ENABLE; // ENABLEDISABLE.
TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; // TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
TIM_InitStructure.TIM_ClkOut = ENABLE; // ENABLE DISABLE
TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / (50*12));
TIM_InitStructure.TIM_Run = ENABLE; // ENABLE DISABLE
Timer_Inilize(Timer0,&TIM_InitStructure); //Timer0 Timer0,Timer1,Timer2,Timer3,Timer4
}
#endif
void main()
{
P_SW2 |= 0x80; //扩展寄存器访问使能
P0M1 = 0x00; P0M0 = 0x00; //设置为推挽输出
P1M1 = 0x00; P1M0 = 0x04; //设置为准双向口,P12推挽输出
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x20; //设置为准双向口,P35推挽输出
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
#ifdef time0_enable
Timer_config();//注释掉这一行 P3.5 就不跳了,稳定在vcc的电压。
EA = 1;
#endif
P35 = 1;
while (1)
{
delay();
}
}
datasheet 上说 time0 从P3.5 输出时钟信号,代码中 TIM_InitStructure.TIM_ClkOut = ENABLE;{:sweat:}
页:
1
[2]