标题:
C8051F120单片机定时器中断函数不起作用,求分析原因
[打印本页]
作者:
cheney03
时间:
2021-7-31 14:47
标题:
C8051F120单片机定时器中断函数不起作用,求分析原因
本帖最后由 cheney03 于 2021-7-31 15:12 编辑
为什么 if(flag_close>4000) { KEY=0;} 放中断中不起作用,KEY没法置0。
而放到中断外主函数中该函数可以执行,KEY置零。
通过LED模块检测,定时器是正常计数的。
单片机源程序如下:
int flag_close;//关机标志位
sbit KEY=P4^0;//按键
void PORT_Init(void) //端口初始化
{
SFRPAGE = CONFIG_PAGE;
XBR0 = 0x04;
XBR1 = 0x00;
XBR2 = 0x40;
flag_open=0;
flag_close=0;
P0MDOUT |=0x01;
P1MDOUT =0x00;
P2MDOUT =0xff;
P3MDOU =0xff;
P4MDOUT =0xff;
P6MDOUT |=0x9f;
P5MDOUT =0x00;
P7MDOUT =0x00;
}
void Timer0_Init(void) //定时器0初始化
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = TIMER01_PAGE; // Set SFR page
TH0 =0x38;//0X38; // Init Timer0 High register
TL0 = 0x9F;//0x9F; // Set the intial Timer0 value
TMOD = 0x01;
CKCON|=0x08; // 计数器/定时器使用系统时钟
// Timer0 in 8-bit reload mode
ET0=1; // Timer0 interrupt enabled
TCON = 0x10; // Timer0 ON
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
void Timer0_ISR (void) interrupt 1 //定时器0中断函数
{
TH0 =0xEC;// 0X38; // Init Timer0 High register
TL0 =0x78; //0x9F; //6M(2.5ms),12M(5ms)
flag_close++;
if(flag_close>4000)
{
KEY=0;
}
}
void main(void)
{
while(1);
}
作者:
cheney03
时间:
2021-7-31 15:05
sbit LED=P4^0;
void Timer0_ISR (void) interrupt 1 //定时器0中断函数
{
TH0 =0xEC;// 0X38; // Init Timer0 High register
TL0 =0x78; //0x9F; //6M(2.5ms),12M(5ms)
flag_close++
if(flag_close>4000)
{
KEY=0;
LED=~LED;
flag_close=0;
}
}
LED正常闪烁,用示波器检测P4.0口(KEY)电平,一直维持高电平,无法置零。
作者:
lkc8210
时间:
2021-7-31 15:09
flag_close++//分号呢? 编译竟然可以过?
作者:
cheney03
时间:
2021-7-31 15:11
lkc8210 发表于 2021-7-31 15:09
flag_close++//分号呢? 编译竟然可以过?
复制过来的时候漏了,程序可以编译通过的。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1