原创 PIC12F629产生四路方波信号

2008-3-27 21:13 4239 7 7 分类: MCU/ 嵌入式

/**************************************************
; CPU类型:      PIC12F629
; 内部RC振荡器: 4MHz
; C编译器:      HT-PICC
; 集成开发环境: MPLAB v8.01
; 方波信号发生器实例
**************************************************/


我们的网站:www.supermcu.com



#include


#define GPIO2_STATUS GPIO2
#define GPIO4_STATUS GPIO4
#define GPIO5_STATUS GPIO5


#define GPIO2_ON  GPIO2=1
#define GPIO2_OFF GPIO2=0
#define GPIO4_ON  GPIO4=1
#define GPIO4_OFF GPIO4=0
#define GPIO5_ON  GPIO5=1
#define GPIO5_OFF GPIO5=0


unsigned char Hz50_Count=0;//产生50Hz频率的软计数器变量
unsigned char Hz1_Count=0;//产生1Hz频率的软计数器变量
 
void System_Init(void)
{
  CMCON = 0x00;//将GP0、GP1初始化为数字I/O引脚
  ANSEL = 0x07;//将GP0、GP1、GP2、GP4初始化为数字I/O引脚
  TRISIO2=0;//置GP2为输出
  TRISIO4=0;//置GP4为输出
  TRISIO5=0;//置GP5为输出
 
  GPIO2 = 0;//GP2输出为低电平
  GPIO4 = 0;//GP4输出为低电平
  GPIO5 = 0;//GP5输出为低电平
 
  T0CS = 0;//选择内部Fosc/4时钟源,作为定时
  PSA  = 0;//将预分频器分配给Timer0模块
  PS2  = 0;//初始化预分频比为1:2
  PS1  = 0;
  PS0  = 0;
 
  TMR0=256-250;//初始化定时500uS的初值
}


void main(void)
{
  System_Init();//调用系统初始化函数
 
  while(1)
    {
      if(1==T0IF)//判断T0IF溢出标志是否为1
        {
          T0IF=0;//清T0IF溢出标志
          TMR0=256-250;//重新装入定时500uS初值
         
          if(1==GPIO2_STATUS)GPIO2_OFF;//如果GP2引脚电平为高电平,则输出低电平
            else GPIO2_ON;//否则输出高电平;此处是产生1KHz方波信号从GP2引脚输出
         
          Hz50_Count++;//产生50Hz方波信号变量加1
          if(20==Hz50_Count)//判断是否满足产生50Hz计数条件
            {
              Hz50_Count=0;//清计数值变量
             
              if(1==GPIO4_STATUS)GPIO4_OFF;//如果GP4引脚电平为高电平,则输出低电平
                else GPIO4_ON;//否则输出高电平;此处是产生50Hz方波信号从GP4引脚输出
               
              Hz1_Count++;//产生1Hz方波信号变量加1
              if(50==Hz1_Count)//判断是否满足产生1Hz计数条件
                {
                  Hz1_Count=0;//清计数值变量
                 
                  if(1==GPIO5_STATUS)GPIO5_OFF;//如果GP5引脚电平为高电平,则输出低电平
                    else GPIO5_ON;//否则输出高电平;此处是产生1Hz方波信号从GP5引脚输出
                }
            }
        }       
    }
}



 

文章评论0条评论)

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