本帖最后由 oldbeginner 于 2013-12-6 14:54 编辑
二、 timer.c中函数的修改:
1) BOOLxMBPortTimersInit( USHORT usTim1Timerout50us )此函数的功能为初始化超时定时器。参数为:usTim1Timerout50us,50us的个数。用户应根据所使用的硬件初始化超时定时器,使之能产生中断时间为usTim1Timerout50us*50us 中断。函数返回值务必为TRUE。
一眼看上去,无法马上知道这个函数的功能是定时器初始化改一下*********************void TimerInit(void)********************STM32中使用了定时4,这里改为定时器0。
利用C51中的函数
bool TimerInit(void)
{
TMOD &= ~GATE0;
TMOD &= ~C_T0;
TMOD |= T0_M1;
return ture;
}
其中,#define GATE0 0x08 //定时器1启动控制位,0:TR0为1时启动定时器1 1:TR0为1且INT0为高电平时才启动定时器0
#define C_T0 0x04 //定时器/计数器选择位,0:定时器(时钟源为内部时钟) 1:计数器(时钟源为T0引脚的外部时钟)
#define T0_M0 0x00 //定时器0操作模式0:13位定时器
#define T0_M1 0x01 //定时器0操作模式1:16位定时器
#define T0_M2 0x02 //定时器0操作模式2:8位自动重载定时器
#define T0_M3 0x03 //定时器0操作模式3:TL0和TH0为两组独立8位定时器
******************************************************
2) voidvMBPortTimersEnable( )此函数的功能为使能超时定时器。用户需在此函数中清除中断标志位、清零定时器计数值,并重新使能定时器中断。
**********************void TimerEnable(void)**********************
借用C51
void
TimersEnable( )
{
/* Enable the timer with the timeout passed to xMBPortTimersInit( ) */
TH0 = U16_HI(0-(F_MCU/12/20000)*n);
TL0 = U16_LO(0-(F_MCU/12/20000)*n);
TF0 = 0;
ET0 = 1;
TR0 = 1;
}
其中, #define U16_HI(d)(TO(u16,(d))>>8)
#define U16_LO(d)(TO(u16,(d))&0x00FF) #define F_MCU (110592000)
*************************************************************
3) voidvMBPortTimersDisable( )此函数的功能为关闭超时定时器。用户需在此函数中清零定时器计数值,并关闭定时器中断。
***************** void TimerDisable(void) ***************** void TimerDisable( )
{
/* Disable any pending timers. */
ET0 = 0;
TR0 = 0;
}
*************************************************************
4) voidTIMERExpiredISR( void )定时器中断函数。此函数无需修改。只需在用户的定时器中断中调用此函数即可,同时,用户应在调用此函数后清除中断标志位。
*********************** void TimerExpiredISR(void) *************************
void TimerExpiredISR( void ) interrupt 1
{
// ( void )pxMBPortCBTimerExpired( );
RTUTimerT35Expired();
} 调用了状态机相关的函数。
等到状态机部分解决。
************************************************ 这样timer.c的函数先这样理解。
从uart.c和timer.c中可以看出和以前的区别,这里都没有标志位,应该都放在状态机相关部分了。
|