精华内容
下载资源
问答
  • 单片机c语音程序
  • 查询方式的优点:不需要开启中断,不与其他中断需要频繁开启相互冲突! (实测用串口打印数据的方式查看,精度能达到10ms,可能是串口传输的问题) **#ifndef __delay_H #define __delay_H #include “stm32f10x.h”...

    查询方式的优点:不需要开启中断,不与其他中断需要频繁开启相互冲突!
    (实测用串口打印数据的方式查看,精度能达到10ms,可能是串口传输的问题

    #ifndef __delay_H
    #define __delay_H
    #include “stm32f10x.h”
    #define Delay_ms(x) Delay_us(1000*x) //1000乘以x
    void Delay_us(__IO uint32_t nTime);
    #endif

    #include “delay.h”
    void Delay_us(__IO uint32_t nTime)
    {
    SysTick->LOAD =9-1;//72/8=9mzh(1us)
    SysTick->VAL = 0;
    SysTick->CTRL |= 0x01;
    for( ; nTime > 0 ; nTime–)
    {
    while((SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk)==0);
    }
    SysTick->CTRL =0;
    }

    在这里插入图片描述

    展开全文
  • while(1) { if(TF0==1)//定时器T0溢出标志 { TF0=0; TH0=0Xd8; TL0=0Xf0;//给定时器赋初值,定时10ms ssec++; if(ssec>=100) { ssec=0; sec++; if(sec>=60) { sec=0; min++; if(min>=60) { min=0; } } } } ...

    /实验功能及现象:
    数码管上显示秒表
    /

    #include "reg52.h"
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    sbit LSA=P2^2;
    sbit LSA=P2^3;
    sbit LSA=P2^4;
    
    u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
    u8 seec,sec,min;
    u8 DisplayData[8];
    void delay(u16 i)
    {
       while(i--);
     }
     void Timer0Init()
    {      
        TMOD|=0x01;
        TH0=0Xd8;
        TL0=0Xf0;
        TR0=1;
      }
      void DigDisplay()
      {
          u8 i;
          for(i=0;i<8;i++)
          {
             	switch(i)	 //位选,选择点亮的数码管,
    		{
    			case(0):
    				LSA=0;LSB=0;LSC=0; break;//显示第0位
    			case(1):
    				LSA=1;LSB=0;LSC=0; break;//显示第1位
    			case(2):
    				LSA=0;LSB=1;LSC=0; break;//显示第2位
    			case(3):
    				LSA=1;LSB=1;LSC=0; break;//显示第3位
    			case(4):
    				LSA=0;LSB=0;LSC=1; break;//显示第4位
    			case(5):
    				LSA=1;LSB=0;LSC=1; break;//显示第5位
    			case(6):
    				LSA=0;LSB=1;LSC=1; break;//显示第6位
    			case(7):
    				LSA=1;LSB=1;LSC=1; break;//显示第7位	
    		}
    		P0=DisplayData[i];//发送段码
    		delay(100); //间隔一段时间扫描	
    		P0=0x00;//消隐
    	}
    } 
     void datapros()
     {
        DisplayData[0]=smgduan[min/10];
        DisplayData[1]=smgduan[min%10];
        DisplayData[2]=0x40;	
    	DisplayData[3]=smgduan[sec/10];
    	DisplayData[4]=smgduan[sec%10];
    	DisplayData[5]=0x40;
    	DisplayData[6]=smgduan[ssec/10];
    	DisplayData[7]=smgduan[ssec%10];
    }
    void main()
    {
       Timer0Init();
       while(1)
       {
          if(TF0==1)//定时器T0溢出标志
          {
              TF0=0;
              TH0=0Xd8;
              TL0=0Xf0;//给定时器赋初值,定时10ms
              ssec++;
              if(ssec>=100)
              {
                 ssec=0;
                 sec++;
                 if(sec>=60)
                 {
                    sec=0;
                    min++;
                    if(min>=60)
                    {
                       min=0;
                      }
               }
            }
         }
         datapros();
         DigDisplay();       
     }               
          }
    
    展开全文
  • 查询方式和中断方式的区别在于
    定时器详细讲解【百度文库】 点击打开链接

    (一) 查询方式和中断方式的区别在于:查询方式不断查询标志位然后进行处理,而中断要编写中断服务子程序来处理中断事件。

    (二) 内部中断是指内部定时器、串口、AD、IIC、SPI等等资源的中断,而外部中断则是外部信号引起的中断,如高电平、低电平、上升沿、下降沿等。

    (三)定时器属于内部中断,如果选择中断方式则只要设置VIC即可。

     

    ARM7的定时器是采用分频的方式来实现定时的,也就是说在配置定时器之前,一定要弄清楚Fpclk的频率是多少。

    (ARM7的时钟概念,Fosc是晶振的频率,Fcclk是PLL输出频率(也就是处理器的时钟频率),Fcclk=M×Fosc,M是PLLCFG寄存器中的MSEL位的倍增器值。PLLCFG的MSEL[0~4].其中Fcclk最大不能超过60MHz)

          定时器操作步骤(相关头文件中宏定义实际硬件电路晶振频率Fosc,处理器时钟频率Fcclk VPB外设时钟频率Fpclk):

    1.初始化定时器

    ①定时器计数器TC清0,由0开始计数,(设置其他值也行)。

    ②配置计数器的分频值PR  (PR=0表示不分频)  TC每经过PR+1个PCLK的周期[即没经过(PR+1)/Fpclk秒]加1.

    ③配置匹配控制寄存器MCR

    ④配置匹配寄存器MR0

    ⑤配置定时器控制寄存器TCR(使能定时器) 了保证定时器计时的正确性,在启动定时器之前,一定要先复位定时器。一般而言,启动定时器的顺序如下: 
    T0TCR = 1<<1;//复位预分频计数器和定时器计数器 T0TCR = 1<<0;//启动定时器

     

    2.若采用中断方式,则设置VIC。若采用查询方式,则检测IR中的中断标志,处理过后写1清零。

    下图是Fosc  CCLK PCLK之间的关系图。

    PLL 输入和设定必须满足下面的条件:
    FOSC 的范围:10MHz~25MHz
    CCLK 的范围:10MHz~Fmax(微控制器的最大允许频率-由内置的系统微控制器
    决定)
    FCCO 的范围:156MHz~320MHz

    FPCLK:

    VPB 总线时钟为处理器时钟的1/4。
    VPB 总线时钟与处理器时钟相同。
    VPB 总线时钟为处理器时钟的1/2。

    因此总是为FCCLK与FPCLK之间设置关系

     

     


     

     

    中断方式程序代码:

    #include<lpc213x.h>
    #define led 1<<18
    #define TIME0 4
    #define Fosc 11059200ul
    #define Fcclk Fosc*4
    #define Fpclk (Fcclk/4)*1 //即VPB外设频率域Fosc频率相同,1秒钟计Fpclk个数

    void time_init(void)
    {
     T0TC=0;//定时器计数器清0,由0开始计数
     T0PR=0;//不分频
     T0MR0=Fpclk; //匹配值设为Fpclk,达到时刚好经过1秒
     T0MCR=0X0003; //MR0与TC值匹配产生中断,且复位(中断方式)
     T0TCR=1<<1;   //先复位
     T0TCR=1<<0;   //后启动
    }
    void __irq timeintr(void)

    {
     unsigned int i;
     i=IO1PIN;   

     T0IR = 0x01;  //清零
     
     if((i&led)==0)
      IO1SET=led;
     else
      IO1CLR=led;
     VICVectAddr=0;//中断结束
    }
    void intr_init(void)
    {
     VICIntSelect=0x00000000;
     VICVectCntl0=0x20|TIME0;
     VICVectAddr0=(unsigned int)timeintr;
     T0IR = 0x01;   //清零中断标志位
     VICIntEnable=1<<TIME0;
      
    }
    int main (void)
    {
      PINSEL2=0X00000000;   //选择GPIO功能
      IO1DIR=led;
      IO1SET=led;
       
      intr_init();
      time_init();

      while(1);  //由于中断结束以后回到原来的地方重新开始计时,然后又会产生中断,所以while语句中没有语句
     
    }

     

    查询方式代码:

    #include<lpc213x.h>
    #define led 1<<17
    #define TIME0 4
    #define Fosc 11059200ul
    #define Fcclk Fosc*4
    #define Fpclk (Fcclk/4)*1 //即VPB外设频率域Fosc频率相同,1秒钟计Fpclk个数

    void time_init(void)
    {
     T0TC=0;//定时器计数器清0,由0开始计数
     T0PR=0;//不分频
     T0MR0=Fpclk; //匹配值设为Fpclk,达到时刚好经过1秒
     T0MCR=0X0003; //MR0与TC值匹配产生中断,且复位(中断方式)
     T0TCR=1<<1;   //先复位
     T0TCR=1<<0;   //后启动
    }
    void display(void)
    {
     unsigned int i;
     while ((T0IR & 0x01) == 0); /* 等待定时时间到,一直询问时间是否到*/    区别在这里,一直询问
     T0IR = 0x01;    /* 清除中断标志     */

     i=IO1PIN;
     if((i&led)==0)
      IO1SET=led;
     else
      IO1CLR=led;
     
    }

    int main (void)
    {
      PINSEL2=0X00000000;   //选择GPIO功能
      IO1DIR=led;
      IO1SET=led;
       
      time_init();

      while(1)
      {
       display();  //由于没有使用中断,所以要有语句
      }
     
    }

     

     

    展开全文
  • 定时器T1查询方式控制单片机发出1KHz音频
  • 定时器T0查询方式P2口8位控制LED闪烁
  • CC2530 查询方式使用定时器
  • 定时器秒表 计时
  • 单片机的查询方式来进行计时,该资源详细给出了以查询方式对单片机定时计数器功能的使用,使其完成秒表功能。在包含c文件的同时,也包含其他一些文件
  • ZigBee开发板基础-查询方式使用定时器 B. 使用T1定时器需要配置三个寄存器T1CTL,T1STAT,IRCON  T1CTL 定时器1的控制和状态  第2、3比特表示分频器划分值:00频率/1,01频率/8,10频率/32,11频率/128;  第...

    1625-5 王子昂 总结《2017年7月31日》 【连续第302天总结】
    A. ZigBee开发板基础-查询方式使用定时器
    B. 使用T1定时器需要配置三个寄存器T1CTL,T1STAT,IRCON
      T1CTL  定时器1的控制和状态
           第2、3比特表示分频器划分值:00频率/1,01频率/8,10频率/32,11频率/128;
           第0、1比特表示定时器1模式:00暂停运行、01自由运行、10模、11正计数/倒计数
             其中自由运行范围为0~0xffff,模和正计数/倒计数的范围为0~T1CC0
      T1STAT 定时器1状态
           第0~4比特表示5个通道的中断标志,第5比特表示溢出中断标志
      IRCON 中断标志4
           第1比特表示定时器1中断标志;0:无中断未决,1:中断未决
      

    void Delayms(uint xms)//延时xms毫秒
    {
      uint i,j;
      for(i=xms;i>0;i--)
      for(j=587;j>0;j--)
    }
    
    void InitT1()
    {
      T1CTL = 0x0d;//0000 1101 128分频,自动重装0~0xffff
      T1STAT = 0x21;//0010 0001 通道0,中断有效
    }
    
    void main(void)
    {
      uchar count = 0;
      InitLED();
      InitT1();
      while(1)
      {
        if(IRCON>0)
        {
          IRCON=0;
          if(++count>=1)
          {
            count=0;
            LED1=!LED;
          }
        }
      }
    }

    本例中可以看出初始化定时器需要通过操作T1CTL和T1STAT两个寄存器,定时状态则通过IRCON来查看
    默认情况下定时器的时频为2分频,即16MHZ

    count的作用不明白,等到过两天板子入手了试验一下看看再回来修改
    C.明日计划
    协议栈基础/实习

    展开全文
  • 1) 通过实验掌握 CC2530 芯片 GPIO 的配置方法 2) 掌握 Led 驱动电路及开关 Led 的原理 3) 掌握定时器 T1 的配置与使用
  • 单片机-中级实验例程--定时器秒表(查询方式).rar
  • 1.4.1 zigbee基础(定时器1查询方式

    千次阅读 2014-10-21 11:04:29
    以前对定时器了解不多,趁此机会了解学习。  cc2530 使用的mcu是增强版的8051,通过51单片机定时器学习资料结合cc2530 datasheet学习cc2530定时器  51单片机内部有两个16位可编程定时器(T0,T1).而cc2530有四个...
  • CC2530基础实验代码教程-CC2530 查询方式使用定时器
  • //用定时器T0查询方式P0口8位控制LED闪烁
  • 1、定时器查询法实现LED闪烁 ;2013/4/23 ;延时1s闪烁 org 0000h ajmp start org 30h start:mov r0,#20 mov p0,#0ffh ;关灯 mov TMOD,#00000001B mov TH0,#3CH
  • 51单片机_定时器查询方法_数码管静态显示
  • 创建一个定时器主动查询订单支付状态 2 Timer timer = new Timer(); 3 timer.schedule( new TimerTask() { 4 5 // 最大重试次数 6 int MAX_RETRY = 5 ; 7 8 @Override 9 ...
  • 本实验实现通过CC2530的定时器1(16位)查询方式控制LED1以1S的周期性闪烁,此实验使用的三个寄存器T1CTL(定时器1控制寄存器),T1STAT(定时器1状态寄存器),IRCON。 有关CC2530的GPIO基本知识、普通GPIO操作有关寄存器...
  • 单片机中级项目11丨定时器秒表(查询方式) /************************************************************************************** * 定时器秒表(查询方式)实验 * 实现现象:下载程序后数码管...
  • //用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁 #include // 包含52单片机寄存器定义的头文件 #define uchar unsigned char #define uint unsigned int /******************************...
  • /例程名称:定时器查询方式) / /描述:通过定时器T1查询方式控制LED1周期性闪烁 / #include <ioCC2530.h> #define uint unsigned int #define uchar unsigned char #define LED1 P1_0 //定义LED1为P1_0口...
  • 51单片机STC89C52 定时器查询方式

    千次阅读 2013-11-11 22:49:36
    BEEP BIT P2.3 HVAL EQU 03CH LVAL EQU 0B0H ORG 0030H MOV 89H,#01H ;TMOD,定时器0工作方式1 LOAD0: MOV 8CH,#HVAL ;TH0 MOV 8AH,#LVAL ;TL0 SETB TR0 HERE0: JBC TF0,DONE0 SJMP HERE0
  • C语言 中断查询定时器
  • /例程名称:定时器查询方式) / /描述:通过定时器T1查询方式控制LED1周期性闪烁 / #include <ioCC2530.h> #define uint unsigned int #define uchar unsigned char #define LED1 P1_0 //定义LED1为P1_0口...
  • 我现在是用VB中tmr定时器,以1ms的速度(VB6定时间最小1ms)去查询USB设备,但是调试到一条指令下发至返回有64ms!!!!!!一直找不到哪里花去了这么多时间。注:USB设备是STM32F103,以PLL/1.5的速度来描述USB速度,...
  • //用定时器T0查询方式P0口8位控制LED闪烁 T1查询方式P1口8位控制LED闪烁 #include // 包含52单片机寄存器定义的头文件 #define uchar unsigned char #define uint unsigned int /******************************...
  • /例程名称:定时器查询方式) / /建立时间:2016/05/1 / /描述:通过定时器T1查询方式控制LED1周期性闪烁 / #include <ioCC2530.h> #define uint unsigned int #define uchar unsigned char #define LED1 P1...
  • 51单片机定时/计数器的工作由两个特殊功能寄存器控制。...其格式如下:GATE是门]控位,GATE=0时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作; GA...
  • Time_Test_1: 测试定时器0、1、2、3的匹配功能,查询方式。 Time_Test_2: 测试定时器0、1、2、3的匹配功能,中断方式。 Time_Test_3: 测试定时器0、1、2、3的匹配输出功能。 Time_Test_4: 测试定时器0、1、2、3的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,455
精华内容 14,182
关键字:

定时器查询方式