[原创] PIC12F508单片机学习三个实例,请批评指正。

hujuan   2014-6-20 15:09 楼主
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(); } 本帖最后由 hujuan 于 2014-6-21 10:47 编辑

回复评论 (1)

学习了,学习了
点赞  2014-6-22 16:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复