定时器做延时

2019-03-24 20:04发布

本人用定时器做延时,来串口发送字符串,遇到问题,不知道怎么解答,程序如下l; #include <reg51.h>
#include <stdio.h> 
#include "SerialM1.h"
#include "..LibDelay.h"
//====================================================================================
unsigned char idata str[]={"hello! "}; unsigned char flag=1;
unsigned char flag1=0;
unsigned char t1=0;
unsigned char k=0; 
//====================================================================================
void UartInit(void)
{
    SCON=0x40;                  //初始化串行口模式一
    PCON=0x00;                  //设置波特率曾倍SMOD=0
    TMOD=0x20;                  //初始化T0、T1均为定时功能,分别工作在模式1和模式2
    TH1=0xFD;                   //波特率9600 bit/s
    TL1=0xFD;     
 TR1=1;        //启动定时器1
    ES=0;                       //禁止串行中断
}        
//====================================================================================
void Timer01Init(void)
{
    TMOD=0x01;           //定时器0工作在方式一
    TH0=(65536-M)/256;   //TH0=0xF7;  初值     2.5ms中断
    TL0=(65536-M)%256;   //TL0=0x00;
//  TR0=1;               //启动定时器0
//  ET0=1;               //允许定时器0中断
//  EA=1;                //开总中断
}
//====================================================================================
void Timer01Irf(void) interrupt 1 //2.5ms定时子程序
{
    TH0=(65536-M)/256;   //TH0=0xFB;
 TL0=(65536-M)%256;   //TL0=0x80;
 t1++;
 if(t1>=40)   //定时100ms
 {
  t1=0;
        flag1=1;       
 }

//====================================================================================
void UartTranByte(unsigned char ch)

 SBUF=ch;     //将数据写入串行口数据缓冲寄存器,发送数据
 while(TI==0);    //发送完成后标志位TI被置位
 TI=0;                   //清标志位     
}
//====================================================================================
void UartTranString(unsigned char *str)
{         
 Timer01Init();
  while(str[k]!='')
 { 
  if(flag1==1)   //表示延时100ms到了,
        { 
   k++;
            flag=1; //  启动发送下一个字节
   flag1=0;
        } 
  if(flag==1)
  { 
   UartTranByte(*(str+k));    //发送一个字节数据
     TR0=1;
   ET0=1;
   EA=1; 
   flag=0;
        } 
 }  
}  //====================================================================================
void main(void)
{
 UartInit();
 UartTranString(str);
 while(1); 
}
哪位高人指点? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。