新唐N76e003 单片机程序分析

在Function_define.h文件


#ifdef FOSC_160000		// if Fsys = 16MHz 

		#define TIMER_DIV12_VALUE_10us			65536-13		//13*12/16000000 = 10 uS,  			// Timer divider = 12 for TM0/TM1
		#define TIMER_DIV12_VALUE_100us			65536-130		//130*12/16000000 = 10 uS,  		// Timer divider = 12 
		#define TIMER_DIV12_VALUE_1ms				65536-1334	//1334*12/16000000 = 1 mS,  			// Timer divider = 12 

16M时钟,12分频后定时器的周期为16/12 us,所以1ms=1000*16/12 约为1334


每个单位为1ms

void Timer0_Delay1ms(UINT32 u32CNT)
{
    clr_T0M;                                		//T0M=0, Timer0 Clock = Fsys/12 定时器0 12分频
    TMOD |= 0x01;                           		//Timer0 is 16-bit mode  16位定器/计数器
    set_TR0;                              		  //Start Timer0  开启
    while (u32CNT != 0)
    {
        TL0 = LOBYTE(TIMER_DIV12_VALUE_1ms); 		//Find  define in "Function_define.h" "TIMER VALUE"
        TH0 = HIBYTE(TIMER_DIV12_VALUE_1ms);      //高8位和低8位设置相应值
        while (TF0 != 1);                   		//Check Timer0 Time-Out Flag  等待溢出
        clr_TF0;                                            //清除溢邮
        u32CNT --;
    }
    clr_TR0;                              		  //Stop Timer0  定时器0停止
}

猜你喜欢

转载自blog.csdn.net/oshan2012/article/details/80372019
今日推荐