STC单片机EEPROM读写程序中在执行读、写或擦除前后为什么都要先进行关中断(EA=0),再进行开中断(EA=1)?可不可以省掉这两个步骤?
说明:我有这样一个光源(前几天我的一个帖子上请教的一个光源),这个光源的是PWM调光,采用单片机是STC12CLE5A48S2,定时器0用来作为PCA的时钟输入源,使PCA产生1KHz PWM的方波,定时器0的初始化程序是:
void Initial_timer0(void) { AUXR = 0x80; //T0为1T模式 TMOD = 0x01; // T0为模式1 TH0 = (65536 - 26) / 256; //使PCA产生1KHzPWM波 TL0 = (65536 - 26) % 256; EA = 1; ET0 = 1; TR0 = 1; }
以及定时器0中断程序是:
void timer0_int (void) interrupt 1 using 1 { TH0 = (65536 - 26) / 256; TL0 = (65536 - 26) % 256; }
光源通过上下键调节PWM的占空比来调节光源的亮度,当光源有上键或者下键按下时都会调用EEPROM写程序(保存光源的亮度值)。
实践中的疑问:当屏蔽EEPROM写程序是,有上键或下键按下时,光源能够正常的变亮或变暗;当不屏蔽EEPROM写程序是,有上键或下键按下时,光源都会闪烁一下再变亮或变暗。
自我分析:EEPROM写程序中有关中断,而且EEPROM执行时间比较长,导致定时器0不能调用定时器0中断程序,所以在EEPROM执行时间里定时器0不能使PCA产生1KHz的方波,产生一个频率远低于1KHz的方波,从而导致人眼能看到闪烁一下,当EEPROM写程序执行完成并且也没有按键按下时,又一切恢复正常,产生1KHz的方波,光源正常显示。
请高手们帮忙分析一下是否是这样的一个过程,能否把关中断和开中断这两个步骤去掉?谢谢喽
|