PIC12F508单片机学习三个实例,请批评指正。
[复制链接]
本帖最后由 hujuan 于 2014-6-21 10:47 编辑
PIC12F508单片机学习之一——定时器
PIC12F508单片机是没有中断的,定时器只能是查询方式。
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
//***************************************************
// __________________
// VDD-| 1 8 |-VSS
// GP5-| 2 27 |-GP0/DAT
// GP4-| 3 26 |-GP1/CLK
//GP3/RMCLR--| 4 25 |-GP2
// |________________|
// 12F508
//***************************************************
//定时器模式试用
#include
#include
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config CP = OFF // Code Protection bit (Code protection off)
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
#define uchar unsigned char
#define uint unsigned int
uchar count;
//uchar GP3_F;
void Init()
{
TRIS=~0x3F; //GP3输入,其它输出
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
TMR0=0x63; //10ms x=257-tJ/4F
}
void main()
{
Init();
while(1)
if(TMR0==0xFF)
{
TMR0=0x63; //
if(++count==50)//1s
{
count=0;
GP2=~GP2;//LED闪烁
}
}
}
}
PIC12F508单片机学习之二——看门狗和休眠模式试用
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
下载器是PICKIT3.
//***************************************************
// __________________
// VDD-| 1 8 |-VSS
// GP5-| 2 27 |-GP0/DAT
// GP4-| 3 26 |-GP1/CLK
//GP3/RMCLR--| 4 25 |-GP2
// |________________|
// 12F508
//***************************************************
// 看门狗和休眠模式试用
#include
#include
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
#pragma config CP = OFF // Code Protection bit (Code protection off)
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
#define uchar unsigned char
#define uint unsigned int
uchar count;
//uchar GP3_F;
void Init()
{
TRIS=~0x3F; //GP3输入,其它输出
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
}
void main()
{
Init();
while(1)
{
if(nTO==0) //看门狗引起的复位
{
GP2=~GP2;
}
SLEEP();
}
}
PIC12F508单片机学习之三——按键唤醒
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
下载器是PICKIT3.
//***************************************************
// __________________
// VDD-| 1 8 |-VSS
// GP5-| 2 27 |-GP0/DAT
// GP4-| 3 26 |-GP1/CLK
//GP3/RMCLR--| 4 25 |-GP2
// |________________|
// 12F508
//***************************************************
//看门狗 休眠唤醒
//按键唤醒
#include
#include
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
#pragma config CP = OFF // Code Protection bit (Code protection off)
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
#define uchar unsigned char
#define uint unsigned int
#define LED1 GP5
#define LED2 GP4
#define KEY GP3
bit KEY_F;
uchar count;
//uchar GP3_F;
void Init()
{
TRIS=~0x3F; //GP3输入,其它输出
// OPTION=0x07; //这个寄存器上电复位均为1
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
// TMR0=0x63; //10ms
}
void main()
{
Init();
while(1)
{
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
{
LED2=~LED2;
}
if(nTO==0) //看门狗引起的复位
{
LED1=~LED1;
}
KEY_F=KEY; //读出休眠前的按键状态。
SLEEP();
}
|