|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器/ J5 c% Z7 L ~" [; R: V
4 v7 W4 X w5 C; B* o1 yPIC12F508单片机是没有中断的,定时器只能是查询方式。
1 ^* X% n& ^. z6 N- t* B) F
/ v$ Z$ c4 H+ q9 R# m3 ~编译器用的XC8,编译环境IDE用的是MPLAB X IDE。7 F4 d. V @9 ?$ L( E
. Z& m. A* Z, q( t7 E* Y: A//***************************************************! Y" o& T- D7 T1 p! r' Y( K6 ]! U5 Y
// __________________
9 Z6 T2 ~, N6 i7 R// VDD-| 1 8 |-VSS
6 W! C0 @- X9 `- g; G// GP5-| 2 27 |-GP0/DAT
9 m4 @% o0 c, Y: Q8 _// GP4-| 3 26 |-GP1/CLK
* G7 t. m) o% B$ W) ?& x//GP3/RMCLR--| 4 25 |-GP2
" u* R# S. D1 T4 A9 Y$ m- s// |________________|
. `8 D0 f$ o* L1 ~// 12F508
7 y3 f, ^ S3 p& P//***************************************************
# N5 c3 J s/ O3 i' S2 H5 d3 S3 o5 T2 ~
//定时器模式试用
& z$ m; T7 a, d" a7 H8 ^2 @. E8 K9 X#include$ H; b: e4 f- P7 ]! F% L; z
#include
) ~; e3 p! {0 { L/ m
7 s$ C7 {; q/ s2 [" g// #pragma config statements should precede project file includes.6 o$ a* U4 g, t" Y
// Use project enums instead of #define for ON and OFF.
' h/ c7 { V% E. T( T( [: p7 @
2 z! b) i5 N. O s+ s// CONFIG
* J! @2 N8 _% r#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)3 R9 A. z$ o0 f" c3 S
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)) Y* S! i8 `# Y" r& g
#pragma config CP = OFF // Code Protection bit (Code protection off)4 Z# V& x2 p( {1 u: S( J& y3 a# q
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
' E* b. s; k. N! U9 q/ a, g1 D! _& j) P
#define uchar unsigned char2 H' s9 _/ i# E1 G
#define uint unsigned int
: Q1 L1 _& @& A* _2 ]) @. Muchar count; {0 K) N0 V, I+ `
//uchar GP3_F;
( o7 y( j" d( Rvoid Init()
: f3 j! K, R; j/ p& q{4 \ I& a) Z' ^. u4 |
TRIS=~0x3F; //GP3输入,其它输出, C& r; M' A5 C
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
# a/ `7 i% U9 d9 z8 Y$ [0 g TMR0=0x63; //10ms x=257-tJ/4F
1 Q- }8 q6 f w E. a( V3 H}
, ~( ~* c W! rvoid main()
% X: ^& T+ Y5 g{
9 M9 [, U# u9 a, n* X1 F# oInit(); 5 O7 i0 G( a7 W" }
while(1)
8 S1 T8 j' W) d if(TMR0==0xFF)" |6 o1 a% |7 p& t4 U8 n& f9 E Z: I" n
{
4 F6 F" d* M) x- W, N* K5 @$ O TMR0=0x63; //* n; v, p3 d* C7 O* n
if(++count==50)//1s
7 O! t( @( N3 q& f* R7 ~) p {
: d, {2 \1 Q! g; }& J' M2 t S count=0;
: C* n- d0 B) o5 _/ @; Y0 r, t+ m* n* ] GP2=~GP2;//LED闪烁
- n' V: f& a( N0 Y- D/ Y' J }
z0 |- c' C, M4 i2 O$ t9 }+ d }
% @5 i9 H9 d! u V( A- F }+ r8 g; [+ T4 |/ u; q
} 8 h2 S2 @9 m) V& O) v, f
4 s! |: U0 q4 y/ P7 }2 W$ r2 O. A' T! h/ l6 i
PIC12F508单片机学习之二——看门狗和休眠模式试用8 ]$ ~1 L$ q# h7 o& W& h0 R8 p
; o% _$ j3 f( L7 L3 ` E* B
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
5 G, ]6 G' P- {' Y6 F
) P9 [4 S2 E& d% L* I6 B# G编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
! t5 [) ?! \$ S0 ~' S( A
4 m3 e4 U% J4 H( S" {下载器是PICKIT3.! W) R+ x+ k9 V
( v: F2 z4 A! D5 G {1 p, _//***************************************************) R9 v) q4 q" ~; K
// __________________
- N1 z2 a; p) Z9 ]8 G: Z# p// VDD-| 1 8 |-VSS
8 s( @/ Z+ W: q- L// GP5-| 2 27 |-GP0/DAT
+ Q& o/ T7 x" l// GP4-| 3 26 |-GP1/CLK) a: I1 z9 }4 {0 |& ~
//GP3/RMCLR--| 4 25 |-GP2
6 L, I5 _3 ~/ C* M// |________________|
7 C: z0 S( b$ i0 j// 12F508
+ W- ~/ _. y) {. A0 I0 {//***************************************************' F4 J: g5 O' _2 w f/ n
// 看门狗和休眠模式试用
6 j. o* @1 Q6 L4 L' p/ R. ~, J+ A; K0 I" u- m% e, q) s' v
& [4 Z7 i2 L3 w1 t#include
5 @0 d6 D( y9 ]: z#include+ ]$ l$ G% q6 F" }) A
. z5 f! t* V5 h7 L// #pragma config statements should precede project file includes.3 H G# a" s) u2 E9 ~; ^$ C3 x
// Use project enums instead of #define for ON and OFF.
4 K$ p- i: r9 h$ Z) T$ [
) d/ B8 ?8 x( ?8 ?! ~7 l$ d// CONFIG: W+ P! U- {( a( M: e; H/ `
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)* V* k' @# k- {
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable ) W7 \1 h) P4 e
#pragma config CP = OFF // Code Protection bit (Code protection off), o, w/ A5 a" ^( g1 Z
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD). t+ d) s+ ?' f8 ^
8 m m8 B( g: E3 Y$ ?4 x8 {
#define uchar unsigned char2 {4 l' N! R1 Y% I0 g6 y
#define uint unsigned int4 H3 u; {( w' v$ t( ^. a; Y7 s
uchar count;2 Z' E; J+ a0 \" ^
//uchar GP3_F;
# O/ C5 F) P9 m, G# dvoid Init()
" t( C: \, L1 \2 u Z5 j{
% l' ?" ~1 J2 k5 e8 \; n: x$ Y1 t, m TRIS=~0x3F; //GP3输入,其它输出
: x! x+ f8 O' Y) n; A OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
% F# }' H& Q4 V4 E0 {) k; z}. ?% k v& P$ I; S7 p$ @
void main()
# L3 M8 {8 [' y& F, |{
. j& h; M; \# gInit();
# `' j' a6 J% b D) z# A
" U9 V2 L: G2 k: D( K9 N/ L1 d8 u8 X- j + x$ G5 O$ _4 z
while(1)+ O5 q1 P/ T$ _
{
7 W ?, d1 l/ o% x% l( S' ~: N# Z8 Z' j4 f: D5 r2 o, n
if(nTO==0) //看门狗引起的复位0 ~) o' m" j3 A1 z% U- {+ A1 H
{* q, A/ s: ~2 |; T$ p( }
GP2=~GP2; U3 `- c5 c2 I2 H
} ' i% e, E) i7 ?% o3 h' s3 p4 W
SLEEP();% h; O! y; w; j/ M
}
; A% ` I# t1 h}8 C7 |" x9 b% l+ d. r: g
: J) Q/ @+ O# y3 ^$ y# J& R5 o
3 n4 v$ t% H$ G. ]PIC12F508单片机学习之三——按键唤醒
# |) Y% }- ?7 [$ {( m+ V
6 P7 l2 K C7 } h) V" qPIC12F508单片机是没有中断的,按键中断只能是查询方式。 ]* a% A4 z; ?' ]+ g/ r) ]5 Z9 D/ c
6 H- ~1 Q2 ?; l编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
6 H4 r3 @( y2 ~# U# l% s) q! O2 _' E+ e) ]3 o3 w. E& h2 v
下载器是PICKIT3.* q1 \, z; V7 n# A
# W" {2 ~3 z5 H- j0 K- ?
//***************************************************1 f- N# z8 h$ i# b% y$ f; a
// __________________
* ^. D- C0 X5 s- k// VDD-| 1 8 |-VSS0 ~, H& ]0 e8 {
// GP5-| 2 27 |-GP0/DAT
2 X3 t; t/ X: q- {# V// GP4-| 3 26 |-GP1/CLK. R& b1 r3 Y: }5 V; \4 s% w
//GP3/RMCLR--| 4 25 |-GP2
) g/ J; n! J6 i0 l' B' n0 U: G1 \// |________________|- s3 v. M3 e3 v& _9 y
// 12F508( b3 T2 t$ W/ Q/ p
//***************************************************
8 o/ L& m1 G, Y! C8 v- b. b% @/ H4 o6 Y
//看门狗 休眠唤醒
- j7 G1 P1 p' F4 m//按键唤醒
7 j, {6 T2 ?) {, k5 Y
' k" @4 Y# n9 ?+ n, y6 a, G#include' E/ U2 }! t( ~8 c1 e
#include
+ t( ^9 @% W a, ]7 J/ _& w5 d, Y0 ~
* |$ b9 Z3 i! M6 ?, V8 e8 }) P+ _// #pragma config statements should precede project file includes.
/ D# {& ~3 ?. T: e: g// Use project enums instead of #define for ON and OFF.
( M& t! F- n1 K2 x$ `; l$ W$ ^3 Z# U: v& J
// CONFIG
/ J' l, e4 {+ H) H2 c& e4 J#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)) ], B) x0 Z6 E. i# x' U$ i- _
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )* @5 c8 F4 Q6 a Q C0 F
#pragma config CP = OFF // Code Protection bit (Code protection off)# k. T* O: V& Y/ Y0 `
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)( R, M8 w, G1 s/ P
/ f8 @6 S" R n: j* O
#define uchar unsigned char- W2 X. O& w& i" u
#define uint unsigned int
: e* e. w8 b, |) j; m8 F#define LED1 GP50 h6 W R% D Y8 p% i& E3 R1 y
#define LED2 GP4' |( v: p9 \4 A+ a ~
#define KEY GP3 B i5 m& k Q
bit KEY_F; h1 A) Y( \0 a" l4 n
uchar count;6 \, k8 d6 s/ x) g2 b0 q2 H
//uchar GP3_F;
- O9 k3 {: q7 S8 ]0 _void Init()% ?% W* d) A; x( ?( }, K, @8 f" @
{
% k( @2 c) c# g! s7 J# [1 @ TRIS=~0x3F; //GP3输入,其它输出
( N6 s; D* N* F/ Z! D // OPTION=0x07; //这个寄存器上电复位均为1/ R( J1 S: m' J: `6 o8 m0 y5 k! p
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
) ?2 }6 v3 T: o OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S6 `1 Z- m1 @( C: q% o: g
// TMR0=0x63; //10ms
' H4 `7 l& _# m* P1 J# H}" n* `) Z/ n4 Q6 g, p. m9 Z* E5 s/ ?
void main()
' c9 S# T3 V. x& f. p{ 0 Z. L* n3 G" f$ [8 I
Init();
q7 r7 L; N# A% y' \8 Mwhile(1), W4 Q7 w5 e0 E
{7 P- q+ L4 c4 y8 t$ l1 s
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
% {# b9 @( h6 c' R8 i- N: j' I) @+ X {3 }( \( A, q: {
LED2=~LED2;% t5 P( f0 Z) m, m, R$ N4 r
}" x4 ^7 s/ G% e: L1 ?) ]
if(nTO==0) //看门狗引起的复位
; x& j, V* n3 h8 c1 h: o' t7 |, ? {' W8 h) ?5 A- ^+ V
LED1=~LED1;
; z5 i" V; v4 t6 q$ e }
) b+ P( o" j) O. g+ Y) x KEY_F=KEY; //读出休眠前的按键状态。( Q1 i/ T1 Z# Z7 V$ ~7 D
SLEEP();
& k3 ^5 W6 i& y' T- L# E( ~ } |
|