加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

100个脉冲之后,输出一个10mS方波 51单片机定时器T1计数与定时轮流用的例子。

(2011-10-25 09:08:11)
标签:

杂谈

分类: 最少焊点法应用

//晶振11.0592Mhz

//作者 徐学军

//2010年12月2日给网友写,在硬件上初步调试通过,
//由于测试条件有限,只能是初步估测

 

 

//用定时计数器T1对外部事件计数。
//要求每计数100,就将T1改成定时方式,
//控制P1.7输出一个脉宽为10ms的正脉冲,
//然后又转为计数方式,如此反复循环。


#include<reg52.h> 
    sbit out = P3^7;
    sbit outa = P1^7;

   bit flag; //flag=1计数方式,flag=0定时
void t1int(void) interrupt 3
        {
       TR1 = 0; ET1 = 0;
      if(flag)
        {
       flag = 0;
       TMOD=0x10; //定时器0方式1 定时方式
                   TH1=0xDC;
                   TL1=0x00; //计数满100后,溢出 初值, 
        out = 1; outa = 1;
      // //out = !out;
     }
     else
     {
         flag = 1;
       TMOD=0x50; //定时器0方式1 计数方式
                 TH1=0xff;   TL1=0x9b; //计数满100后,溢出 初值,
            // TH1=0xff; TL1=0xfc; //计数满3后,溢出 初值
       out = 0; outa = 0;
       //out = ~out;
     }
      TR1 = 1; ET1 = 1;
     }

void main()
         {

           TMOD=0x50; //定时器1方式1 计数方式
           TH1=0xff;      TL1=0x9b; //计数满100后,溢出 初值, DC00为10mS常数 如果晶振为12M,就为 D8F0

     //TH1=0xff; TL1=0xfc; //计数满3后,溢出 初值
    EA = 1;ET1 = 1;
     TR1=1;
     //flag = 1;
    flag = 1;
     out = 0, outa =0;
     while(1) ;
          }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有