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下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fengyuzhe13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值