发新帖我要提问
12
返回列表
打印

C语言程序该这样写

[复制链接]
楼主: lizye
手机看帖
扫描二维码
随时随地手机跟帖
21
小叶子疯| | 2012-5-17 08:34 | 只看该作者 回帖奖励 |倒序浏览
我自己学c也注意到模块化的问题了.楼主讲得很对

使用特权

评论回复
22
bhsdlmj| | 2012-5-17 09:31 | 只看该作者
本帖最后由 bhsdlmj 于 2012-5-17 09:36 编辑

、、、、、、、、、、、、、、、、、、、、、、、

 
#define  TMR0_IRQ_INTERVAL_VALUE  1     //单位:毫秒
#if TMR0_IRQ_INTERVAL_VALUE > 2
#error "handsome boy, attention: TMR0_IRQ_INTERVAL_VALUE's maximum value is 296/100 ms"
#endif
#define  TH0_RELOAD_VALUE      (65536 - ((INT32U)SYSCLK * TMR0_IRQ_INTERVAL_VALUE) / 1000) / 256         
#define  TL0_RELOAD_VALUE      (65536 - ((INT32U)SYSCLK * TMR0_IRQ_INTERVAL_VALUE) / 1000) % 256





/**------------------------------------------------------------
  * @brief  This function handles TIM0 interrupt request.
  * @param  TF0 is cleared by hardware
  * @retval : None
  --------------------------------------------------------*/
void TIM0_IRQHandler(void) interrupt PI_Order_TIM0
{
__IO INT8U SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = TIMER01_PAGE;
TH0 = TH0_RELOAD_VALUE;
TL0 = TL0_RELOAD_VALUE;
CBTime_g++;
        
SFRPAGE = SFRPAGE_SAVE;                     
}
/**-----------------------------------------------
  * @brief  TimeIntervalOut
  * @param                       
  * @note :
  * @retval :
  -------------------------------------------------*/
BOOLEAN CBTimeDly(INT8U tc, INT16U milli)
{
static __IO INT16U ticks[TC_TOTAL + 1] = {0};
static BOOLEAN  time1st_OK = TRUE;   
BOOLEAN timeOut_OK = FALSE;

INT8U loops = 0;
if (tc <= TC_TOTAL) {
  CB_UsedTC_标志寄存器_g = (INT16U)((INT16U)CB_UsedTC_标志寄存器_g | (INT16U)((INT16U)(1 << tc)));  
                              

  if (time1st_OK) {
   time1st_OK = FALSE;
   for (loops = 0; loops <= TC_TOTAL; loops++) {
    ticks[loops] = CBTime_Get();
   }
  }
  else {
   if ((CBTime_Get() - ticks[tc]) >= milli) {
    ticks[tc] = CBTime_Get();
  
    timeOut_OK = TRUE;
   }
   else {
    timeOut_OK = FALSE;
   };
  }
}
else {
  timeOut_OK = FALSE;
}
return timeOut_OK;
}

/**-----------------------------------------------
  * @brief  CBTime_Get
  * @param  None
  * @note :
  * @retval : None
  -------------------------------------------------*/
#pragma SAVE
#pragma OT(0)
INT16U CBTime_Get(void)
{
static __IO INT16U tmp = 0;
tmp = CBTime_g;
while (tmp != CBTime_g) {
  tmp = CBTime_g;
}
return tmp;
}
#pragma RESTORE



、、、、、、、、、、、、、、、、、、、、、、、、、、

@@@@@@@@@@@@@@@@@@@@@@@
应用 让50个灯以不同的周期闪

//第0通道,10ms
if (CBTimeDly, 0,10) {
     //灯1闪
}
//第1通道,17ms
if (CBTimeDly, 1,17) {
     //灯2闪
}
//第2通道,8ms
if (CBTimeDly, 2,8) {
     //灯3闪
}

,,,,,,

使用特权

评论回复
23
pyramid3ck| | 2012-5-17 10:13 | 只看该作者
这个难度太大了吧,得到啥水平才能写出来

使用特权

评论回复
24
Tz-吕生丨丨| | 2012-5-17 10:20 | 只看该作者
来学习

使用特权

评论回复
25
280571634| | 2012-5-17 12:11 | 只看该作者
以后也要好好往这个方向靠拢,想想我的代码都只是为了完成任务,但是人性化方面考虑很少

使用特权

评论回复
26
zc564075839| | 2012-5-17 15:30 | 只看该作者

使用特权

评论回复
27
cuiwei328257881| | 2012-5-17 17:48 | 只看该作者
细节决定成败

使用特权

评论回复
28
ryming| | 2012-5-17 20:55 | 只看该作者
看了一下还忙适合自己

使用特权

评论回复
29
dallas1131| | 2012-5-18 16:56 | 只看该作者
代码模块化、规范化都非常好。
只是在实际应用中,在中断中回调处理函数,对其它需要实时响应的任务有很大的影响。
换种说法,这类代码对多任务的优先级考虑不够。

使用特权

评论回复
30
Jordon138| | 2012-5-20 14:43 | 只看该作者
路过,看了一下,还好~

使用特权

评论回复
31
望断云山| | 2012-5-27 20:35 | 只看该作者
还是喜欢用汇编直接抄底

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则