基于PIC12F675单片机的可编程多功能时间继电器的设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于PIC12F675单片机的可编程多功能

时间继电器的设计

摘要:定时控制是最基本的自动控制方式,由单片机制作的定时控制,具有定时精确,电路简单等诸多优点,能够实现多种定时模式,利用MCU内部的多个TMR模块,可以设计成多个集成的时间继电器,利用MCU内部的多路ADC转换模块通过各自的电位器独立调整延时时间,而且各定时模块可以级联控制,实现电动机控制电路的简化,如果通过IO口连接外部信号,便于实现多种简单的自动控制。

关键词:MCU、定时器、AD转换、级联控制

1、引言

常用的电子时间继电器普遍使用CD4060振荡计数分频CMOS集成电流构成,一般采用外部RC振荡器,定时精度低、控制功能单一。由于这种电子时间继电器内部带有小功率稳压电源模块,用引脚较少的单片机取代原数字电路芯片,可以实现多个定时器集成在一起,或者多个定时级联控制。如果用较少引脚的单片机构成时间继电器,则提高定时精度,而且实现多个时间继电器的集成,通过编程可以实现多个时间继电器的级联控制。从而可以大大简化控制电路,节省了线材。

2、单片机及选型

单片机又称微控器MCU,生产厂家和品牌很多。众所周知proteus是开发单片机产品最好用的仿真软件,不但能够进行单片机仿真,而且能够进行电路仿真和PCB电路设计,因此选型时首先考虑容易购置且在proteus中有仿真模型的MCU产品。经典的普林斯顿构架的51单片机,内部资源少,引脚多,不适合单片机产品的开发。

PIC单片机虽然品种繁多,但是一个IDE软件可以通吃,而且在proteus仿

真软件有丰富的仿真模型,这样便于电路研发设计。其中有PIC12F675[1]单片机

是PICF12系列单片机中内部资源较为丰富的品种。其内部有两个可编程定时器

模块TMR0和TMR1,还具有4路10位ADC转换模块和比较器模块,比较适合制作

时间继电器的控制电路。

选用PIC单片机的另一个好处是有廉价的替代品,台湾的麦肯单片机质优价廉,可以直接取代。

1.基于PIC675单片机的一次定时的时间继电器

去掉原电子时间继电器的数字集成电路芯片,用PIC12F675取代,借用原电

路接口,可制作单路、两路多功能时间继电器。

3.1 程序算法

时间调节仍然使用原有的电位器,利用内部的ADC模块的转换结果控制定时

器的设定值,达到调节时间的目的。

在定时要求不很高的情况下,通过配置字设置可以使用内部复位和内部振荡器,这样可以节省宝贵的IO端口,实际上内部高精度振荡器可以满足几乎所有

定时要求。

PIC12F675单片机内集了10位的ADC[2]模块,占用了两个字节的转换数据寄

存器ADRESH和ARSEL,选择左对齐方式,仅取用ADRSEH就相当于8位ADC模块,已经能够满足要求。

PIC12F675单片机内集了8位定时/计数器TMR0和16位的定时/计数器TMR1,在一次定时用的时间继电器中,可选用其中任意一个。

如果采用中断方式工作,定时时间越长,则中断的次数越少。因此首先考虑

选用TMR1模块。

TMR1[1]定时计数模块带有3bit的预分频器,最大分频比8,如果选择4MHz

的内部时钟,由于PIC单片机一个机器周期有4个时钟周期,定时计数脉冲频率

是系统时钟的4分频,因此计时时钟为1MHz。

TMR1一次中断最大定时间隔为:,适当选取设定值可得

0.5秒的时间间隔。

TMR1H的设定值256-244=12,TMR1L的设定值256-36=220即可满足要求。将ADC转换结果做软件计数的上限,仅取高8位时,最长定时时间128秒,如果取

10位转换结果做软件计数的上限,则最长延时时间512秒。

3.2程序设计:

#include"pic12rf675.h"

__CONFIG=0x0004;

unsigned char m;

unsigned int n;

void main()

{

CMCON=0x07; //关闭比较器功能,低4位为数字IO

ANSEL=0x51; //设为GP1、GP2、GP5普通数字I/O口,GP0为模拟量输入口

ADCON0=0; //选择转换通道0

TRISIO=0x21; //设置GP0、GP5为输入,其它为输

出。

ADCON0=0x01; //使能ADC模块

T1CON=0x39; //设定分频比8,定时器模式,使能TMR1。

TMR1H=12; //设定计数器的计数初始值,一次中断时间0.5秒

TMR1L=220;

GIE=1; //开放全局中断

PEIE=1; //开放第一外设中断

TMR1IE=1; //开TMR1溢出中断

n=0; //初始化软件计数器计数值

m=0xFF;

while(1)

{

while (GPIO5==1) //如果复位开关断开

{

if(n

else

{

GPIO1=1; //否则继电器得电,软件计数器停止。

n>m;

}

}

if(GPIO5==0) //如果复位按键按

{

GPIO1=0; //继电器失电

n=0; //软件计数器复位

}

}

}

void interrupt ISR() //定时器TMR1中断服务函数

{

TMR1H=12; //重装计数器初始值

TMR1L=220;

n ++; //软件计数器加1

TMR1IF=0; //复位TMR1定时器重新计数

GPIO2=~GPIO2; //指示灯反转,亮灭一次1秒钟。

ADCON0|=0x02; //启动AD转换

while (ADCON0&0x02==1); //等待转换完成

m=ADRESH; //将转换值读入存储器m中。

}

3.3proteus仿真

相关文档
最新文档