好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

AVR单片机占空比及频率测量学习笔记.docx

3页
  • 卖家[上传人]:我***
  • 文档编号:129509411
  • 上传时间:2020-04-23
  • 文档格式:DOCX
  • 文档大小:10.92KB
  • / 3 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 信号占空比测量及频率计算测量信号频率只要得到信号的两个上升沿或者下降沿之间所用的时间即可占空比指一个信号高电平和这个信号周期时间的比值,测量信号占空比只需测量信号一下降沿和上升沿之间的距离即可测量边沿可以采用AVR单片机外部中断,中断可以设置成边沿触发,设置为上升沿触发或者下降沿触发同时启用一个定时器,用定时器的计数值取得相应的时间定时器初始化:只需将定时器打开,单片机晶振为16M时,AVR单周期及可计算定时器每曾一所用的时间例如用8分频时,每加1用时0.5usvoid Timer1_init(void){ CLI(); //disable all interrupts TCNT1H = 0x00; //清零计数值 TCNT1L = 0x00; TIMSK |=(1<

      void INT0_Init(void){ MCUCR=0x03;//上升沿触发中断 GICR =0x40;//开启外部0中断 SEI(); //开启总中断}在中断函数中,当有上升沿时,就可触发中断,在中断函数中有一标志位flag_Int,通过此标志位来判断是上升沿的中断还是下降沿产生的中断第一次进入中断后flag_int==0;读取定时器1高低位的数据,同时将中断的触发沿改为下降沿触发,然后将定时器值清零同时将flag_Int标志位置一,当信号变为下降沿时再次触发中断,此时进入flag_Int=1函数,此时读取定时器值,并将中断改为上升沿中断,此时即可计算 (高电平时间=定时器数值*0.5us)将flag_Int=0,当边沿为上升沿时即可进入if(flag_Int==0),此时读取的定时器时间,及Int_End的值及为脉冲周期脉冲周期时间=Int_End*0.5us定时器16M,8分频)注意:定时器1为16位,数据高低位分别在TCNT1L 与TCNT1H中,在读取时必须先读取低位,后读取高位而且要注意不能让定时器溢出,因此对于不同的定时器必须考虑其溢出时间pragma vector=INT0_vect__interrupt void Int0_isr(void){ u8 h=0,l=0; if(flag_Int==0)//接收到上升沿 { l=TCNT1L; h=TCNT1H; MCUCR=0x02; //下降沿触发 //清零 TCNT1H=0x00; TCNT1L=0x00; Int_End=h*256+l; //清零计数值 flag_Int=1; } else//接收到下降沿 { l=TCNT1L; h=TCNT1H; MCUCR=0x03; //上升沿触发 Int_Mid=h*256+l;//取得TCNT2值 flag_Int=0; }}测量脉冲周期及占空比测量使用的另一方法为捕获,本次使用AVR定时器1捕获功能,捕获设置为边沿,捕获时进入捕获中断,在中断时将边沿改变即可取得比外部中断更好的效果。

      捕获功能就是为测量脉冲占空比及周期而设计的定时器1初始化时需开启捕获功能及捕获中断,同时期设置捕获的边沿,在定时器对应的捕获端口即可进行对应的边沿捕获void Timer1_init(void){ CLI(); //disable all interrupts TCNT1H = 0x00; //清零计数值 TCNT1L = 0x00; TIMSK |=(1<

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.