原创 2012年3月4日——学习笔记第7天——用定时器查询方式实现Led1、Led2、Led3、Led4分别按0.5秒、1秒、2秒、3秒闪烁(2)

2012-3-12 21:28 2031 7 7 分类: 消费电子

2、第二种分析

 图片

#include "config.h" 
#define LED1 1<<16
#define LED2 1<<17
#define LED3 1<<18
#define LED4 1<<19
#define LED1_TO_4 (LED1|LED2|LED3|LED4)
#define  BEEPCON  1  <<  5
#define  UART_BPS  115200    // 定义通讯波特率

/****************************************************************************
* 名称:Time0Init()
* 功能:初始化Timer
****************************************************************************/
void   Timer0Init0( void )
{  
    T0PR = 99;                    // 设置定时器分频为频率,得是Hz
    T0MCR = 0x03;               // 匹配通道匹配中断并复位T0TC                
    T0MR0 = 110592/2;                 // 比较值(1S定时值)
    T0TCR = 0x03;                  // 启动并复位T0TC
    T0TCR = 0x01; 
 
}
/****************************************************************************
* 名称:main()
* 功能:
****************************************************************************/
int main(void)
{
 uint32 i=0;       //这不需要计数
 Timer0Init0();                     // 初始化定时器
    PINSEL0 = 0x00000000;            // 设置管脚连接GPIO   
    IO0DIR = BEEPCON;                // 设置I/O为输出
    IO1DIR = LED1_TO_4;
    IO1SET = LED1_TO_4;
    while(1)
    {               
/********************************第0.5秒执行的动作*********************************/
  while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;               // 清除中断标志 ,
     if ( (IO1PIN&LED1) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET = LED1;    
     }else  {
           IO1CLR = LED1;     
     }
/********************************第1秒执行的动作*********************************/    
     while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;
      if ( (IO1PIN&LED1) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET = LED1;    
     }else   {
           IO1CLR = LED1;     
     }
     if ( (IO1PIN&LED2) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET =  LED2;    
     }    else  {
           IO1CLR = LED2;
     }
/********************************第1.5秒执行的动作*********************************/   
     while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;
      if ( (IO1PIN&LED1) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET = LED1;    
     }  else    {
           IO1CLR = LED1;     
     }
/********************************第2秒执行的动作*********************************/
     while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;
     if ( (IO1PIN&LED1) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET = LED1;    
     }  else      {
           IO1CLR = LED1;     
     } 
     if ( (IO1PIN&LED2) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET =  LED2;    
     } else {
           IO1CLR = LED2;
     }
     if ( (IO1PIN&LED3) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET =  LED3;    
     }  else    {
           IO1CLR = LED3;
     }
/********************************第2.5秒执行的动作*********************************/ 
      while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;
      if ( (IO1PIN&LED1) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET = LED1;    
     } else    {
           IO1CLR = LED1;     
     }

/********************************第3秒执行的动作*********************************/
     while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;
      if ( (IO1PIN&LED1) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET = LED1;    
     } else   {
           IO1CLR = LED1;     
     } 
     while( (T0IR&0x01) == 0 );          // 等待定时时间到 ,中断寄存器包含4 个位用于匹配中断,4 个位用于捕获中断。如果有中断产生,IR 中的对应位会置位,否则为0 。
     T0IR = 0x01;
     if ( (IO1PIN&LED2) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET =  LED2;    
     }else    {
           IO1CLR = LED2;
     }
     if ( (IO1PIN&LED3) == 0 )  //IO1SET&LED1是什么意思,IO1PIN&LED是什么意思,及两者的区别
     {
           IO1SET =  LED4;    
     }else       {
           IO1CLR = LED4;
     }
   }    
    return 0; 
}

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条