几种方波方法及脉冲计数

发布者:暗里著迷最新更新时间:2016-12-30 来源: eefocus关键字:方波  脉冲计数 手机看文章 扫描二维码
随时随地手机看文章

 if(DeviceFlag == 0x55)

  { 


   amount++;

     switch(amount%2)

     {

        case 1: Command_Out =1; break;

        case 0: Command_Out =0; break;

     }

     if(amount==8)//16*8=128ms

     {  

        amount=0; 

        DeviceStatus = TurnOn;

        DeviceFlag = 0xFF;

     }



//发出波形的方式很多种,


  1、可用两个定时器,第一用作定时占空比,并且执行一次就关闭,由另外一个定时器开启,另外一个定时器作为定时周期。


 1 //----------发送命令变量----------------------------

 2 static unsigned int  current;                  //延时计数器

 3 static unsigned char irdata_silent[]={0,1,0,1,2,0,1,0,1,2,0,1,0,1,2};   //kaiji指令

 4 static unsigned char irdata_TurnOn[]={1,0,1,0,2,1,0,1,0,2,1,0,1,0,2};//guanji zhiling

 5 /***************************************************************

 6 *总体格式:静默指令(共三帧指令):0101 S 0101 S 0101 S(左移) ASASAS

 7 * 开启指令(共三帧指令):1010 S 1010 S 1010 S(左移) 5S5S5S

 8 *左移:0101,0x05,开;1010,0x0A,关;“S”代码(STOP):1mS高电平+9mS低电平

 9 ***************************************************************/

10 void SendCommand(unsigned char data)

11 {

12     p_irdate = data;

13     switch(p_irdate)

14     {

15        case 0:     Timer01_Init();   //1ms

16                    Timer35_Init();   //5ms 

17                    break;

18        case 1:     Timer04_Init();   //4ms            

                      Timer35_Init();   //5ms

19                    break;

20       case 2:     Timer01_Init();   //1ms

21                   Timer310_Init();  //10ms

22                   break;

23     }

24     T0CONbits.TMR0ON = 1;

25     T3CONbits.TMR3ON = 1;

26     Command_Out = 1;

27 }

28 /*******************************

29 *中断处理函数

30 *******************************/

31 #pragma code high_vector=0x08

32 void interrupt_at_high_vector(void)

33 {

34     _asm goto high_isr _endasm

35 }

36 #pragma code

37 

38 #pragma code low_vector=0x18

39 void interrupt_at_low_vector(void)

40 {

41     _asm goto low_isr _endasm

42 }

43 #pragma code

44 

45 #pragma interrupt high_isr

46 void high_isr(void)  //TMR0

47 {

48     if(INTCONbits.TMR0IF==1)      

49       {

50            INTCONbits.TMR0IF=0; 

51            Command_Out = !Command_Out;

52            mLED_1_Off();

53            T0CONbits.TMR0ON = 0;

54     }

55     

56 }

57 

58 #pragma interruptlow low_isr

59 void low_isr(void)      

60 {    

61     if(PIR2bits.TMR3IF==1)   

62       {

63            PIR2bits.TMR3IF=0;

64            Command_Out = 1;

65            mLED_1_On();

66            current++;

67            if(current<15)

68           {

69                SendCommand(irdata_silent[current]);

70            }

71            else

72           {   

73                           current =0;

74                           SendCommand(irdata_silent[current]);//      

             } 

75           //T3CONbits.TMR3ON = 0;

76          //T0CONbits.TMR0ON = 1;

77     }

78 }



另外一种是用一个定时器,根据时间分段。


PIC18FXXXXX系列单片机的TMR0寄存器的读写编程技巧


TMR0工作原理:Timer0即可用作定时器亦可用作计数器;具体的模式由T0CS位(T0CON<5>)选择。在定时器模式下(T0CS=0),除非选择了不同的预分频值,否则,默认情况下在每个时钟周期该模块的计时都会递增。如果写入TMR0寄存器,那么在随后的两个指令周期内,计时将不再递增。用户可通过将校正后的值写入TMR0寄存器来解决上述问题。通过将T0CS位置1选择计数器模式。在计数器模式下,Timer0可在RA4/T0CKI引脚信号的每个上升沿或下降沿递增。触发递增的边沿Timer0时钟源边沿选择位T0SE(T0CON<4>)决定。清零此位选择上升沿递增。


TMR0的16位读写过程:TMR0H并不是16位模式下Timer0的高字节,而是Timer0高字节的缓冲寄存器,且不可以被直接读写。在读TMR0L时使用Timer0高字节的内容更新TMR0H.这样可以一次读取Timer0 的高16位,而无需验证读到的高字节和低字节的有效性(在高、低字节分两次连续读取的情况下,由于可能存在进位,因此需要验证读到字节的有效性)。同样,写入Timer0的高字节也是通过TMR0H缓冲寄存器来操作的。在写入TMR0L的同时,使用TMR0H的内容更新Timer0的高字节。这样一次就可以完成Timer0全部16位的更新。


TMR0的16位读写编程技巧(SP9608-PIC单片机增强型开发板)验证TMR0作为外部计数的程序段:


初始化:


  T0CON=0X3F;将TMR0设置为16位的外部RA4/T0CKI计数功能


      TMR0H=0;


      TMR0L=0;


  T0CONbit.TMR0ON=1;启动TMR0工作


读取TMR0寄存器中的内容,并合成到一个整形变量


      Temp=TMR0L;


      Temp=TMR0H;


      Temp<<==8;


      Temp|=TMR0L;   


关键字:方波  脉冲计数 引用地址:几种方波方法及脉冲计数

上一篇:使用TEMIC感应卡技术的智能电子门锁系统
下一篇:pic单片机计数

推荐阅读最新更新时间:2024-03-16 15:27

给定1kHz方波时的电感电流电路图
给定1kHz方波时的电感电流电路图 1-电流给定,1A/格;2-电感电流,1A/格;时间,100μs/格 图 给定1kHz方波时的电感电流电路图
[电源管理]
给定1kHz<font color='red'>方波</font>时的电感电流电路图
基于51单片机的方波发生程序
这是一个最简单的程序,在定时器的控制下由p1.0脚发出500赫兹的方波 要求:6MHz的晶振,P1.0引脚产生500Hz的方波 代码如下: #include reg52.h sbit P1_0=P1^0; void int_X_T() { IE=0x82; TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1;?? ?? } void int_x() interrupt 1 { TH0=(65536-500)/256; TL0=(65536-500)??%256; P1_0=!P1_0; } void main()?
[单片机]
51单片机使用DAC0832编程输出方波,锯齿波,三角波,正弦波
#include reg51.h #include math.h #define uchar unsigned char #define uint unsigned int #define PI 3.1415925 float alph; void delayms(uint x) { uchar i; while(x--); { for(i=0;i 123;i++); } } main() { uchar i; while(1) { for(alph=0;alph 2*PI;alph+=0.1) { P2=1
[单片机]
51单片机使用DAC0832编程输出<font color='red'>方波</font>,锯齿波,三角波,正弦波
方波电压形成器
方波电压形成器
[模拟电子]
<font color='red'>方波</font>电压形成器
51单片机(二十)—— 定时器产生方波信号
在本文中,我们用定时器0来产生方波信号,包含两个实验,实验1产生一个频率为10kHz的方波信号,实验2产生一个频率为100Hz的方波信号。 实验1 实验1 中定时器0的初始化代码如下所示。 void init_T0(void) { TMOD|= 0x02; //使用方式2,8位自动重装载定时器 TH0=256-50; //给TH0和TL0赋初值,计数周期为50个机器周期 TL0=256-50; //采用12MHz的晶振,计时时长为50us EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } 代码中将定时器0设置
[单片机]
方波转换成正弦波电路
方波转换成正弦波电路 即利用RDD104可选的4各十进制CMOS除法器和一个MSFS5 开关电容滤波器来构建一个双芯片、失真率为0.2%的正弦波源。RDD104有两个引脚,可以从四个除法器divide-by-10、divide-by-100、divide-by-1000和divide-by-10k中选择一个。在引脚5连接外部时钟或带一个晶振,该器件就可使用。最大频率在5V直流电压下为1.5 MHz。 文中给出了方波-正弦波转换示意图。RDD104的引脚5和引脚6连接一个晶振以及一个10MΩ的电阻。引脚5还接有一个100pF的电容(C5)。MSFS5的输入电容,以及RDD104引脚6与MSFS5引脚4之间的连接具有与晶振引脚
[模拟电子]
<font color='red'>方波</font>转换成正弦波电路
解决准方波谐振电源的谷底跳频问题
    准方波谐振转换器也称作准谐振(QR)转换器,使反激式开关电源(SMPS)设计的信号电磁干扰(EMI)更低及满载能效更高。然而,由于负载下降时开关频率升高,必须限制频率漂移,避免额外的开关损耗。传统准谐振控制器采用频率钳位技术来限制频率漂移。当系统开关频率到达频率钳位限制值时,就发生谷底跳频:控制器在两种可能的谷底频率选择中来回跳动,导致变压器工作不稳定及产生噪声。克服这个问题的一种新技术是在负载降低时改变谷底频率,从而逐步降低开关频率。一旦控制器选择某个谷底,它就保持锁定这个谷底频率,直到输出功率大幅变化:这就是安森美半导体新近引入的谷底锁定技术。   本文除了简要介绍准谐振电源,还将进一步阐释谷底跳频问题,介绍解决
[电源管理]
解决准<font color='red'>方波</font>谐振电源的谷底跳频问题
STM32 定时器用于外部脉冲计数
因为用stm32f103c8作主控制器,来控制小车,小车的转速由两路光电编码盘输入(左右各一路).因此想到外部时钟触发模式(TIM ETRClockMode2Config)。 可以试好好久,发现TIM1不能计数,到网上查了很久,也没有找到相关的文章,开始怀疑TIM1是不是需要特殊设置。经过很久的纠结,终于找到了问题 其实是我自己在GPIO设置的时候,后面的不小心覆盖了前面的了 没想到自己也会犯这么SB的事情。 现总结程序如下: 第一步,设置GPIO GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved