/**************************************************
; 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条评论)
登录后参与讨论