-
九齐大佬们 请帮小生指教一下, 60秒在TIMER1问题 sos
九齐大佬们 请帮小生指教一下, 我此段60秒在TIMER1中 怎么不能开启与关闭呢? 哪里配置问题, 多天的困扰! 谢谢 以下主要TIMER1的 是我的配置 [color=#00ff][b]void[/b][/color] GPIO[color=#ff00]([/color][color=#00ff][b]void[/b][/color][color=#ff00])[/color] [color=#ff00]{[/color] IOSTB = C_PB3_Input[color=#ff00];[/color] [color=#0800]// PB3 input mode[/color] PORTB = [color=#ff1493]0x08[/color][color=#ff00];[/color] [color=#0800]// PB0、PB1 & PB2 are output High[/color] BPHCON =[color=#ff1493]0XF7[/color][color=#ff00];[/color] [color=#0800]//@@@!!!@@@!!!@@@!!!@@!@!@!@!@!26-01-21[/color] IOSTA =C_PA3_Output[color=#ff00];[/color] PORTA [color=#ff00]&[/color]=[color=#ff1493]0XE7[/color][color=#ff00];[/color] [color=#ff00]}[/color] [color=#00ff][b]void[/b][/color] Timer0_Init[color=#ff00]()[/color] [color=#ff00]{[/color]DISI[color=#ff00]();[/color] [color=#0800]// 关闭总中断[/color] PCON1 = C_TMR0_Dis[color=#ff00];[/color] [color=#0800]// Disable Timer0[/color] TMR0 =[color=#ff1493]0X06[/color][color=#ff00];[/color] [color=#0800]// @4M 4T 2MS[/color] T0MD = C_PS0_TMR0 | C_PS0_Div8 [color=#ff00];[/color] [color=#0800]// Prescaler0 is assigned to Timer0, Prescaler0 dividing rate = 1:8,clock source is [/color] INTE |= C_INT_TMR0[color=#ff00];[/color] [color=#0800]// Enable Timer1 interrupt[/color] PCON1 = C_TMR0_En[color=#ff00];[/color] [color=#0800]// Enable Timer0[/color] ENI[color=#ff00]();[/color] [color=#0800]// Enable all unmasked interrupts [/color] [color=#ff00]}[/color] [color=#00ff][b]void[/b][/color] Timer1_Init[color=#ff00]([/color][color=#00ff][b]void[/b][/color][color=#ff00])[/color] [color=#ff00]{[/color] T1CR1 =C_TMR1_Dis[color=#ff00];[/color] TMRH = [color=#ff1493]0x00[/color][color=#ff00];[/color] [color=#0800]// Set TMR1[9:8] is 0[/color] TMR1 = [color=#ff1493]0xF9[/color][color=#ff00];[/color] [color=#0800]// @4M / 4T 1MS[/color] T1CR2 =C_PS1_EN | C_TMR1_ClkSrc_Inst | C_PS1_Div4[color=#ff00];[/color] [color=#0800]// Enable Prescaler1, Prescaler1 dividing rate = 1:4, Timer1 clock [/color] INTE |= C_INT_TMR1[color=#ff00];[/color] T1CR1 = C_TMR1_Reload | C_TMR1_En[color=#ff00];[/color] [color=#0800]// Enable Timer1, Initial value reloaded from TMR1, Non-stop mode[/color] ENI[color=#ff00]();[/color] [color=#ff00]}[/color] [color=#00ff][b]void[/b][/color] Mode_Play[color=#ff00]()[/color] [color=#ff00]{[/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]u8Mode ==[color=#ff1493]0[/color][color=#ff00])[/color] [color=#0800]// 第一次按键开灯[/color] [color=#ff00]{[/color] PA3 =[color=#ff1493]1[/color][color=#ff00];[/color] Timer1_Init[color=#ff00]();[/color] T1CR1 =C_TMR1_En[color=#ff00];[/color] INTE |=[color=#ff1493]0X08[/color][color=#ff00];[/color] Timer1_60S[color=#ff00]();[/color] [color=#0800]//倒计时60秒后 PA3口 低电平 灯灭[/color] [color=#ff00]}[/color] [color=#00ff][b]else[/b][/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]u8Mode==[color=#ff1493]1[/color][color=#ff00])[/color] [color=#0800]// 如再次按键灭也灯[/color] [color=#ff00]{[/color] PA3 =[color=#ff1493]0[/color][color=#ff00];[/color] [color=#ff00]}[/color] [color=#ff00]}[/color] [color=#00ff][b]void[/b][/color] Timer1_60S[color=#ff00]()[/color] [color=#ff00]{[/color] Timer1_Init[color=#ff00]();[/color] second ++[color=#ff00];[/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]second[color=#ff00]>[/color][color=#ff1493]60[/color][color=#ff00])[/color] [color=#0800]//60计时![/color] [color=#ff00]{[/color]second=[color=#ff1493]60[/color][color=#ff00];[/color] PA3 =[color=#ff1493]0[/color][color=#ff00]; // [/color] T1CR1= C_TMR1_Dis[color=#ff00];[/color] INTE |=[color=#ff1493]0XE7[/color][color=#ff00];[/color] [color=#ff00]}[/color] [color=#ff00]}[/color] [color=#0800]/*********************************************************/[/color] [color=#00ff][b]void[/b][/color] System_Init[color=#ff00]([/color][color=#00ff][b]void[/b][/color][color=#ff00])[/color] [color=#ff00]{[/color] OSCCR = [color=#ff1493]0x01[/color][color=#ff00];[/color] [color=#0800]//默认比较器相关关闭(b7-4);默认正常工作模式(b3-2);默认IHRC保持震荡(b1);默认系统时钟是[/color] PCON = [color=#ff1493]0x98[/color][color=#ff00];[/color] [color=#0800]//默认是开启看门狗(b7);默认是关闭LVD检测(b5);默认是关闭PA5上拉(b4);默认是开启LVR检测(b3);[/color] delay_ms[color=#ff00]([/color][color=#ff1493]1[/color][color=#ff00]);[/color] [color=#0800]//上电延时一会等待电源稳定[/color] GPIO[color=#ff00]();[/color] Timer0_Init[color=#ff00]();[/color] Timer1_Init[color=#ff00]();[/color] ENI[color=#ff00]();[/color] [color=#0800]//使能总中断[/color] [color=#ff00]}[/color] [color=#00ff][b]void[/b][/color] main[color=#ff00]([/color][color=#00ff][b]void[/b][/color][color=#ff00])[/color] [color=#ff00]{[/color] System_Init[color=#ff00]();[/color] [color=#00ff][b]while[/b][/color][color=#ff00]([/color][color=#ff1493]1[/color][color=#ff00])[/color] [color=#ff00]{[/color] CLRWDT[color=#ff00]();[/color] Timer1_60S[color=#ff00]();[/color] Key_Serice[color=#ff00]();[/color] Mode_Play[color=#ff00]();[/color] [color=#ff00]}[/color] [color=#ff00]}[/color] [color=#0800]//! interrupt service routine[/color] [color=#00ff][b]void[/b][/color] isr[color=#ff00]([/color][color=#00ff][b]void[/b][/color][color=#ff00])[/color] __interrupt[color=#ff00]([/color][color=#ff1493]0[/color][color=#ff00])[/color] [color=#ff00]{[/color] [color=#00ff][b]static[/b][/color] u8 u8timer1ms =[color=#ff1493]0[/color][color=#ff00];[/color] [color=#00ff][b]static[/b][/color] u8 u8tmer100ms =[color=#ff1493]0[/color][color=#ff00];[/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]INTFbits.T0IF[color=#ff00])[/color] [color=#ff00]{[/color] INTFbits.T0IF =[color=#ff1493]0[/color][color=#ff00];[/color] TMR0=[color=#ff1493]0X06[/color][color=#ff00];[/color] u8timer1ms++[color=#ff00];[/color] u16Timer10ms++[color=#ff00];[/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]u8timer1ms[color=#ff00]>[/color][color=#ff1493]5[/color][color=#ff00])[/color] [color=#ff00]{[/color]u8timer1ms=[color=#ff1493]0[/color][color=#ff00];[/color] key_scan[color=#ff00]();[/color] [color=#ff00]}[/color] [color=#ff00]}[/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]INTFbits.T1IF[color=#ff00])[/color] [color=#ff00]{[/color] Timer1_1s++[color=#ff00];[/color] [color=#00ff][b]if[/b][/color][color=#ff00]([/color]Timer1_1s [color=#ff00]>[/color][color=#ff1493]1000[/color][color=#ff00])[/color] [color=#0800]// 1S[/color] [color=#ff00]{[/color] Timer1_1s =[color=#ff1493]0[/color][color=#ff00];[/color] second++[color=#ff00];[/color] [color=#ff00]}[/color] INTFbits.T1IF =[color=#ff1493]0[/color] [color=#ff00];[/color] [color=#ff00]}[/color] [color=#ff00]}[/color]
200浏览量 0回复量 关注量 -
新人求助-GD32单片机程序貌似消失了
[i=s] 本帖最后由 gogyyy 于 2025-2-6 18:19 编辑 [/i] 首先声明,个人接触单片机不久。现在情况是这样,使用的GD32F103c8t6,现象是:在现场程序不运行,简单来说就是重启电源也不运行,返回来后,检查电源什么的都正常,就是单片机不运行。 我使用的SW下载到单片机的程序,我这个时候把原来的程序重新下载到单片机后,竟然正常了,总共做了十来个,现在有两个这个情况的,不知道怎么回事。
8327浏览量 16回复量 关注量 -
库函数问题 赏2000家园币
[color=#1b1c21][backcolor=rgb(245, 247, 250)][font="][size=16px]单片机程序中使用的第三方库或模块之间可能存在函数名冲突了怎么办[/size][/font][/backcolor][/color]
6095浏览量 2回复量 关注量 -
航顺单片机程序总是死
程序死在了自带库的微秒延时 void BSP_SYSTEM_Delay_us(uint32_t usCnt) { /* SysTick default clock source: HCLK/8 = 32MHz/8 = 4MHz */ SysTick->LOAD = 4 * usCnt; /* Clear SysTick current counter value */ SysTick->VAL = 0; /* Enable SysTick counter */ SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; /* Wait for SysTick counter to 0 */ while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk))//死在这一部 { } /* Disable SysTick counter */ SysTick->CTRL = ~SysTick_CTRL_ENABLE_Msk; /* Clear SysTick current counter value */ SysTick->VAL = 0; }
3441浏览量 4回复量 关注量

问答