上次是偶然路过,现在也忘了是在哪里看到LZ的贴字,现在也懒得去找了.
今天又是偶然打开邮箱,有LZ的回复,看看后已是4-5天以后了,也不知道LZ的答案如何了,看来不给你个交代不行,花了25分钟将代码写完,如下:
void main(void) { init_system(); //初始化
tSecond = 0; //秒 tMinite = 0; //分 tCount = 0; //ticks计数器 cFun7x = 0; //Fun71/72/73/74管理 cFun50 = 0; //Fun50管理
status = sWAIT; //状态变量
while(1)//主循环 { switch(status) //状态 { case sWAIT: //等待 Enable; //开中断 //时间处理 if(tCount>9) { tCount -= 10; tSecond++; cFun50 = 0; //秒更新后要进行Fun50调用 if(tSecond > 59) { tSecond = 0; tMinite ++; //分钟不处理了 } }//end if(tCount>9) Disp(); //时间显示 if(tSecond==0) cFun7x=0; //需要进行Fun7x调用 break;
case sFun5: //F050 Disable; //关中断 F050(); cFun50 = 1; //通知系统Fun50完成 tCount += 5;//计数 status = sWAIT; break; case sFun7: Disable; switch(cFun7x) { case 0: Fun71(); break; case 1: Fun72(); break; case 2: Fun72(); break; case 3: Fun73(); break; default:break; } tCount += 7; cFun7x++; status = sWAIT; break; deafult:break; }//end switch(status) }//end while(1) }//end main(void)
timer0 interrupt() //100ms中断 { if(cFun50==0) status = sFUN5;//函数调用 else if(cFun7x < 4)//需要Fun7x调用 status = sFun7; tCount++; //计数器加1 }
数了一下加上空行也只有70行,当然有些地方省写了,100行是没有问题.
详细分析了代码,没有问题,画了个状态图验证了一下,和我在帖子里说得一样,这里的一个问题就是秒信号不是在刚好更新的时候显示的(主要是奇数秒,发生在第1357秒,偶数秒没问题),这是先天不足,因为不可能在1秒内能完成0.7+0.5的任务
我不知道这个答案能否让LZ满意
本人在武汉工作,主要做应用电子设计,在电力医疗行业混,除了单片机(5196等),主要做DSP,现在用ARM了.
wuhancyq即日 |