C51单片机 的定时器学习笔记

/*-------------------------------------------------------*/
/* -------------author: robinson_911  -------------------------*/
/* -------------date:2014年2月 -------------------------*/
/* -------------content:关于串口 定时器程序  -----------*/
//  在22.1184MHZ下,通过定时器0,每1s通过串口发送数据
/*-------------------------------------------------------*/
   
//#include "reg52.h"  
#include "STC_NEW_8051.H"
typedef 	unsigned char	u8;
typedef 	unsigned int	u16;
typedef 	unsigned long	u32;
 
/*************  本地变量声明  **************/  
u16 JumpAddress,a=0;  
u8 xdata RxBuffer[64];
u8  ReCount=0, i;
u8  RxCounter=0; 

/*************	本地哈函数声明	**************/
void push_pull();
void Serial_Initinal();
void sendchar(u8 p);
void sendstring(u8 *p);
void dmsec (u16 count);
void delay_1ms(u16 count);
void Timer0Init(void);
void Timer1Init(void);
void init() ;
 
void main()  
{
	 push_pull(); 
	 Serial_Initinal();
	 Timer0Init();
	 while(1)  
	 {  
	     i++; 
	 }  
}  


void receive(void) interrupt 4
{
  if(RI)
  {    
    RI=0;
	RxBuffer[RxCounter++]=SBUF;
  }
}

void Timer0(void) interrupt 1
{  
   	TL0 = 0x9A;		//设置定时初值
	TH0 = 0xA9;		//设置定时初值
	a++;
    if(a==1000)
	{
	 a=0;
     sendstring("delay 1s ");
	}

}

/*发送一字节数据/*/
void sendchar(u8 ch)
{
    SBUF=ch;
	while(!TI);//
	TI=0;
}
void sendstring(u8 *p)
{
   while(*p)
    { 
	 sendchar(*p++);
    }

}
/*实现功能:进行毫秒延时*/
void dmsec (u16 count)
{
	u16 i;
	while (count)
	{
        i =230;
		while (i>0) i--;
		count--;
    }
}
/***1T 下大概的ms精确按时****/
void delay_1ms(u16 count)
{
    u16 i,j;
	 for(i=0;i<8*count;i++)
	{
	    for(j=0;j<225;j++){;}	    	    	   	
	}
}

void push_pull()
{
	P0M1=0X00;  //STC12C5A60s2,端口改为强推挽
	P0M0=0XFF;
	P1M1=0X00;
	P1M0=0XFF;
	P2M1=0X00;
	P2M0=0XFF;
	P3M1=0X00;
	P3M0=0XFF;
	P4M1=0X00;
	P4M0=0XFF;
}
//定时器1作为波特率发生器用
void Serial_Initinal()
{
    //波特率设置 
        SCON = 0x5a;        //8 bit data ,no parity bit
   	TMOD = 0x21;        //设置定时器1为工作方式2
	TH1  = TL1 = 0xfa;  //波特率9600
	TR1 = 1;           //T1 start running
	EA=1;
	ES=1;     
}

void Timer0Init(void)		//1毫秒@22.1184MHz
{
        
	AUXR |= 0x80;		//定时器时钟1T模式
	TL0 = 0x9A;		//设置定时初值
	TH0 = 0xA9;		//设置定时初值
	ET0=1;
	TR0 = 1;		//定时器0开始计时
}

波特率和定时时间值计算,可以通过STC_ISP计算得出

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值