我是靠谱客的博主 碧蓝蜜粉,最近开发中收集的这篇文章主要介绍STC51单片机16——将输入信号2倍频,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

将单片机接收的信号的低电平,2倍频后发出去(有少许误差,需要适当减少时间长度)。

//测量负脉冲宽度 并2倍频
#include<reg51.h>   //包含51单片机寄存器定义的头文件
sbit u=P3^2;    //将u位定义为P3.2
sbit pwm=P3^7;
unsigned int k1,k2;
/*******************************************
函数功能:主函数
******************************************/    
void main(void)
{
   TMOD=0x11;  //TMOD=0001 0001B,使用定时器T1 T0的模式1
   EA=1;   //开放总中断
   EX0=1;  //允许使用外中断
   IT0=1;  //选择负跳变来触发外中断
    ET0=1;  //允许定时器T0中断
    ET1=1;  //允许定时器T1中断
    TH0=0;  //定时器T0赋初值0
    TL0=0;   //定时器T0赋初值0
    TR0=0;   //先关闭T0
    TH1=0;  //定时器T1赋初值0
    TL1=0;   //定时器T1赋初值0
    TR1=1;   //先开启T1
    IP=0x08;//T1优先级大于T0
    while(1)  
    ; //无限循环, 不停检测输入负脉冲宽度

}
/**************************************************************
函数功能:外中断0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
   TR0=1;   //外中断一到来,即启动T0计时
    TL0=0;  //从0开始计时
    TH0=0;  //从0开始计时
    while(u==0)  //低电平时,等待T0计时
       ;
//        P0=TL0; //将结果送P0 P1口显示
//        P1=TH0;
   k1=TH0*256+TL0;
        TR0=0;  //关闭T0
 }
/**************************************************************
函数功能:定时器T1的中断服务程序
**************************************************************/
void Time1(void) interrupt 3 using 0 //"interrupt"声明函数为中断服务函数
{
   TF1=0;//清除中断标志位
   k2=k1/2;//2倍频
       TH1=255-k2/256;   //定时器T1的高8位赋初值
    TL1=255-k2%256;  //定时器T1的低8位赋初值
      pwm=~pwm;  //将pwm引脚输出电平取反,产生方波
   TR1=1;                 //启动定时器T1

 }

       

完整资料打包(含仿真):

STC51单片机16-将输入信号2倍频资源-单片机文档类资源-CSDN下载

最后

以上就是碧蓝蜜粉为你收集整理的STC51单片机16——将输入信号2倍频的全部内容,希望文章能够帮你解决STC51单片机16——将输入信号2倍频所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部