|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器
& H6 Q/ `6 Y" q7 Q4 J* p$ e' A9 p/ V" q5 w2 K4 D/ S2 b+ i5 ~# i# ?
PIC12F508单片机是没有中断的,定时器只能是查询方式。
% i2 N. m" E* c& G/ L* ^ N9 ^8 m" X0 ?' H* {- f( o, d
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
W# i9 g. ?( q2 ^) k4 ^2 ]6 U" P$ ]
//***************************************************
# h0 U- S+ C% K( g- [( J2 \// __________________5 ^- Y* Z( `% j, q4 `- z/ l; q% ^
// VDD-| 1 8 |-VSS% _0 P7 Z. w+ g B; s1 x
// GP5-| 2 27 |-GP0/DAT, W6 e3 ] Y: V# F8 V7 J0 c5 H! v( {
// GP4-| 3 26 |-GP1/CLK
# B$ b8 A& T: d; Z& C//GP3/RMCLR--| 4 25 |-GP2
8 l% W u3 w, e% p2 S, `6 H; i* H3 a// |________________|
3 [$ Q! U( R; S; E0 w" l8 }( h E, b. O// 12F508# z" W" m8 a3 c$ }' c9 e
//***************************************************+ {# }# d1 O) V# N1 E( D0 W
: y9 P9 Z3 r2 s# C5 H6 i! U" W//定时器模式试用
0 ?( a7 K3 c `# M8 F' d#include% u4 I' ^( N6 i) d/ G
#include6 N8 q+ t8 r' V$ b+ U' b4 B& ~& t
+ E! M( L: d5 u) }0 a5 s# Z0 n
// #pragma config statements should precede project file includes.# d' u! V$ R% `/ u5 |" S
// Use project enums instead of #define for ON and OFF.
9 X/ s, S0 k7 x
. V2 N* p- B. f. z// CONFIG y( c1 J0 f# _% W7 r) Q* g1 Y
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
/ A% [" p( B$ n) C#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
$ J3 ~* K. R2 G' j) g( E. x2 t#pragma config CP = OFF // Code Protection bit (Code protection off)
( x; U2 K/ J, s9 L, @; d- H#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
! J, m8 U- ]6 v' ]6 C" Z7 U+ N0 n* o. `
#define uchar unsigned char) C5 Z. Z9 e7 c& v5 D3 D# Z
#define uint unsigned int
/ s$ G( H1 P, r! y5 M, Zuchar count;
: q: m, U% o W/ Y//uchar GP3_F;
, e$ E. j5 Q: \! O& k& u1 Ivoid Init()
8 x( U' o0 [' `3 Y% Y{
/ C- B3 h. c4 ~# q, z TRIS=~0x3F; //GP3输入,其它输出3 v9 s; Y9 q3 D/ P6 {
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F1 h3 P2 @' w2 j, |# b
TMR0=0x63; //10ms x=257-tJ/4F2 d. I" V2 G( H, x0 b: q
}
/ ^- Q7 y, Z/ Y; J" z, [void main()6 @3 b p- \( ~3 }- f
{ 4 t9 k1 i! a+ ~5 Z% s( w
Init();
6 |$ M- A" i! Z m1 z5 _while(1)/ X# Z* D- C3 |
if(TMR0==0xFF)
4 Z0 D+ I8 ]% j, L1 O; @. O {
# A* Q- G* S* l" h9 i+ b: q TMR0=0x63; //' t: X" ]+ ~0 c: E
if(++count==50)//1s" s+ y7 W8 o# d4 f' y* `. {5 W
{$ N: W, [: }2 _& [7 i6 `
count=0;
# ]1 ~( G+ L( B9 N1 u, d1 x2 J$ k GP2=~GP2;//LED闪烁
6 |) l4 ~) ~. _5 b }6 ?0 @' e0 Z, p
}
' M9 ^, Q* t# _" g9 h3 ^ ^ }- _: N4 \- N1 `. t
} 1 y% J2 \' D g$ E9 K- ]8 d z2 P# }& E
8 f, b3 j! t- r$ H
3 e) _9 @+ m2 U2 APIC12F508单片机学习之二——看门狗和休眠模式试用% \( {1 }0 P4 U/ n& W R1 c
& F w" T6 @9 k" E" n; qPIC12F508单片机是没有中断的,复位情况只能是查询方式。
, _ \ C0 M/ x1 n
( X/ z& y3 |3 T5 }! M, U, z$ ]编译器用的XC8,编译环境IDE用的是MPLAB X IDE。6 D5 a) d/ L9 k* o. a2 F
% r* }7 R6 q8 v7 t" K下载器是PICKIT3.' k- N7 n5 Z# b+ t6 d
/ H" }+ e# P- {/ K' d. t//***************************************************/ V. ~6 g' A% `/ ]4 G% X- z
// __________________
. V9 N4 A4 V* c- F/ m$ `// VDD-| 1 8 |-VSS
- N) d% [" L! U- q! Y0 t$ \ @( o1 O// GP5-| 2 27 |-GP0/DAT; {1 x5 A3 T6 J+ x
// GP4-| 3 26 |-GP1/CLK
8 U; O3 L S7 E% W. ]6 c* x//GP3/RMCLR--| 4 25 |-GP2
) R" H R) N* {+ v6 d0 |// |________________|
\2 p2 m/ o# C& d" q// 12F5088 u4 \0 a9 \7 c
//***************************************************
) z- e4 A/ ^. n0 o' g5 V// 看门狗和休眠模式试用
: Z7 F6 }3 R4 V/ ~4 o2 @& K: F/ M& s* w
, o1 S# e. D; [+ V#include7 D8 \5 X4 [ o5 w7 m& U+ X
#include; N7 {0 [0 C" o$ z/ R- @
" a( g' x/ V& ]* \4 \8 m+ K Z// #pragma config statements should precede project file includes.( W# ^$ P# ^% ]. }+ I
// Use project enums instead of #define for ON and OFF.
0 b, g, T9 a3 E) \( p) B1 @4 O5 A# [$ K* P7 W
// CONFIG5 [2 @& L% [7 V4 k9 B" ^: k
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
" | h% v7 y/ h0 _+ A% @#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
) }- |" a0 j! F+ R8 x. V+ L4 f#pragma config CP = OFF // Code Protection bit (Code protection off)/ d) _5 l& z2 o4 ?
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
$ o/ |' K% s8 x' L
$ M, x5 O, B6 e: F4 G#define uchar unsigned char
6 d9 F/ r$ S1 s; E#define uint unsigned int' T: s' Y) `. L) E5 o) Z
uchar count;4 h# j2 i+ w R) K, e- C
//uchar GP3_F;, Q- [: V, u4 H2 E, I' [$ y
void Init()
) O& `# X+ P! \% ?{% Y3 A& g0 `$ D7 @6 _7 B
TRIS=~0x3F; //GP3输入,其它输出7 F1 ^: q2 d( O4 I# ~
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S( e5 e- R2 U4 U, u( x
}9 a* K1 P+ K K
void main()
4 |4 W c9 E/ c4 h d{ 7 B; ^ D9 [4 v) g
Init();
1 _ K4 f! O& }1 n" ]* @
; F' V, x9 x, b2 B 7 b) S* O3 c8 k3 C' S+ g
while(1)2 Y* T& S3 ?% H
{, Z# k9 z/ ]* E/ e5 M$ t8 m
3 Z7 x( L8 d% }3 i% V. z if(nTO==0) //看门狗引起的复位
- X+ P1 v3 F2 Z1 ^ {
2 T) i) |" @2 M$ s% k! ]: l GP2=~GP2;+ Z, f$ l. r. Q1 j4 n0 |
}
, \$ m/ }1 U* D SLEEP();
' ?9 l0 s+ J7 C7 B& ?) r8 U1 O }
7 \' o( z2 ^. `+ l; p}
( H* J# X# |! W7 A# Y/ S
: F& s% h% W) P% D$ S _% U) t! h2 j/ S' Z: @* z3 I
PIC12F508单片机学习之三——按键唤醒3 `7 `( q0 Z* ?: d5 x9 ^& Q1 E
( L& i$ r( V0 v: h& r& j1 X: l9 C) f
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
7 x" r6 u9 z" K
6 K( B( ^4 Y! w9 F, E! u编译器用的XC8,编译环境IDE用的是MPLAB X IDE。# a. @ N4 N* J$ n7 M" G+ R; S2 U$ f
2 b, U! c. ?4 Y: E$ N
下载器是PICKIT3.2 f6 _ u2 p2 z5 [7 V2 p- Y
: k7 Q% h7 a) l- p//***************************************************$ |4 R( y2 S9 ~. A+ F
// __________________
6 k+ A. n/ R! Z* O( Q- v// VDD-| 1 8 |-VSS
; g8 K6 @& ^1 p+ B, z// GP5-| 2 27 |-GP0/DAT+ k5 i9 H) P' l$ ]2 ~( i
// GP4-| 3 26 |-GP1/CLK
5 ]: H* y6 U9 R//GP3/RMCLR--| 4 25 |-GP2, j: B7 F6 ` w0 V: v
// |________________|
: |9 e6 [8 e& C7 ~: \4 O// 12F508
5 z/ [/ u- }& [% l9 N# S//***************************************************
! l2 } _+ P0 m' v6 F. y- V6 p3 s( p q: o! L2 K( A+ a
//看门狗 休眠唤醒
; C2 S( j+ D; {+ y, F" A//按键唤醒: }% K' O8 E* \4 A
3 o5 @/ x8 t6 O T! M#include
7 S+ ?5 O; r u$ O0 P) ~#include0 g9 `7 j e0 J5 B
( ?0 t/ f0 B# Y! [4 V1 s
// #pragma config statements should precede project file includes.
% ]! P% {! L6 @2 u8 |// Use project enums instead of #define for ON and OFF.
/ n: u& N# }' {9 [0 v+ h$ {2 L2 l0 r7 ~& V: X3 Y% P
// CONFIG
4 n5 P: |9 E+ O#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
; z) e/ o0 @$ D7 s% D4 l#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
# c& v/ I, s }#pragma config CP = OFF // Code Protection bit (Code protection off)
@- E V3 } `# Z9 e0 ^#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD); ]" @5 [, i F' U' r( I' M* s
4 X; r+ F* C$ W7 l1 i7 d$ T#define uchar unsigned char
% N: y$ Q3 v+ s#define uint unsigned int B: n+ R! f! d6 W7 R
#define LED1 GP58 E- |5 T* F v7 y: K
#define LED2 GP41 Z$ M8 }5 W) _, E3 j+ ?& R
#define KEY GP3
1 q- D& @6 |( s! u/ Jbit KEY_F;
! q: `8 C( O' d6 ^; Suchar count;- c9 b) q4 `1 @+ @# b
//uchar GP3_F;% x Z" J& J" x& |$ t3 G
void Init()
; L" F7 n- o* Z" G' I# Q, V0 c! |{
/ o6 x1 ~$ h/ J, B/ f4 L' M TRIS=~0x3F; //GP3输入,其它输出2 b+ M* ^/ `! i q M0 \: Z0 Y
// OPTION=0x07; //这个寄存器上电复位均为1/ R! p1 o6 W* M. U' h
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
5 c$ H1 h: Q+ Q OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
( f R4 [' @$ b- c5 f' e/ e1 I // TMR0=0x63; //10ms
# Y1 I! X% [' N# O}
2 S9 s, E" n; ?+ [ o' `void main()
2 w' H" i+ ^# c0 a9 y6 O6 J{ 2 f- S7 y" ~; _7 R5 v
Init(); " J" r7 q8 x$ E1 b) ]& A6 p
while(1)% B% } ?- {7 e* x j+ I
{) A1 T6 X& R( l. Z! n( c- w
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
, {; m6 W0 J8 F0 K! K {
# L$ ^7 n" R5 m/ \% S# O& i+ M$ _- o2 o LED2=~LED2;- n' S1 _4 _7 J6 m+ V& n. c, K1 C
}
0 B5 _/ L9 C! e* U$ \ if(nTO==0) //看门狗引起的复位, @5 G% a5 P) b: ^! z
{& _7 R# }+ K _: u
LED1=~LED1;+ Z U% [9 K+ ?4 j
}
" P& X$ E4 H% T. i KEY_F=KEY; //读出休眠前的按键状态。
! t j& t C% C" i/ i7 \1 I SLEEP();
8 p' T- ?* F& f$ j- [% U } |
|