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

发布者:EtherealEssence最新更新时间:2019-05-22 来源: eefocus关键字: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计算得出



关键字:C51  单片机  定时器 引用地址:C51单片机 的定时器学习笔记

上一篇:51学习之定时器中断的两种方式——查询和中断
下一篇:C51 延时程序两种方案

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved