|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器
# i" M# a8 V" m; z# W7 F) b' H: v
9 c p m( B+ V% ^2 o) S" g' JPIC12F508单片机是没有中断的,定时器只能是查询方式。
$ _. Q1 z) h% j; K1 t% f; P% _# e7 z K2 C$ e5 k1 q
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。# `" c( z6 Q, J( I6 b& g
# E6 [2 ^7 P. X
//***************************************************+ l! c( `, k+ ~/ ]
// __________________
3 o( m2 U# M2 f4 z// VDD-| 1 8 |-VSS
9 f/ x2 y! Y; ^! S// GP5-| 2 27 |-GP0/DAT# o% M8 r9 [8 j. ~7 M _3 t" i
// GP4-| 3 26 |-GP1/CLK
' p8 D/ [, W: K2 h) N9 k//GP3/RMCLR--| 4 25 |-GP2: c' G4 h" s K
// |________________|4 o9 o8 e) P5 A
// 12F508
Y- p" k4 Q+ L3 Q' V$ L/ @- I//***************************************************
' V- ^# H) u( W' m# V9 v7 Z! c& ]. F- O. S& E0 m, G# S
//定时器模式试用
, {4 _8 P: u6 K( C#include
, |: w- [' l8 N: ~" T#include
6 q+ J& d) \0 c. |% W2 v8 ^% |. s+ ?7 L- i X2 v5 j; ~* C
// #pragma config statements should precede project file includes.. Y5 j+ C9 r+ |# g) a" n Q
// Use project enums instead of #define for ON and OFF.
0 h E; p7 t/ E3 d" e& }4 M& N* @; Z0 F+ g$ E
// CONFIG. C. P* U5 u$ l9 d' G
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator), A$ T8 ~8 H" y- W" N* w
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)8 ]2 q( f5 b2 h0 |& D3 N
#pragma config CP = OFF // Code Protection bit (Code protection off)5 q# _- R( w( Q
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)& r) _# K9 Z8 G8 Z7 p3 H+ @* ~; d
) P/ u6 m8 ~+ r N+ H5 b: S# L. }
#define uchar unsigned char$ l1 O! N. ^1 i# {+ ]6 E" G# d' o! @1 u
#define uint unsigned int* u; u2 S% b* J M8 u7 S
uchar count;
. Y" ?: G* Y+ u& p- x//uchar GP3_F;
9 i- G& U7 E5 f6 Gvoid Init()
) s/ V$ `% c1 ~6 ^6 K8 l& o' s{
" R) i' @! N% v' Z2 \4 ]# d TRIS=~0x3F; //GP3输入,其它输出
. R, a, x0 x3 ^& \% O I& |" F OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
& D8 w0 \" S- |! L TMR0=0x63; //10ms x=257-tJ/4F
$ a/ B& h2 U# [- ~; I% n7 Q* L+ V}) n9 n5 R+ z" x: y3 \
void main()
! U6 h, `2 w1 G+ b3 ~{
% V1 i* ` i! H( z4 i; dInit(); 4 @: N9 `/ n Y# C5 r
while(1)
9 Y; P& k2 {! j6 _# f- X if(TMR0==0xFF)
- e; }8 A/ f3 P+ v3 H, Y& n' | {
! G* f' B0 ~- H TMR0=0x63; //
3 s) h' i2 m! N, ~$ i- ], N, ` if(++count==50)//1s' A" u% D" D* ~& W: k5 Q
{; D& l6 N3 A+ Y+ s- h9 Y% Q* `5 Z
count=0;
3 a7 ^1 G) p0 J5 L( | a" w GP2=~GP2;//LED闪烁
. B- V% f1 r! k! }1 t }
# ~2 T+ O7 Y$ Z( \1 @ }
# k1 v3 \1 ^; F }
% {' _" c4 I0 Y( c% w/ {: B}
3 ^& A5 M% Q1 i1 @4 G
) w+ b/ Y5 B; T4 z3 k, z$ y
* v% v' }/ j8 m; D! t% y) b) i6 dPIC12F508单片机学习之二——看门狗和休眠模式试用& z' p& q8 j4 V6 m/ g* i D) ]; A* f
( z( i& g' Y' G0 x9 W# NPIC12F508单片机是没有中断的,复位情况只能是查询方式。
! n- { Q% O; \' j' d: m) e% e: G
( d* F+ f5 Y+ @ h编译器用的XC8,编译环境IDE用的是MPLAB X IDE。! p0 ]5 w6 }+ O7 s: [8 Q4 ]
j6 V2 C8 p5 C下载器是PICKIT3.! Y0 O% v% Q/ D2 E W4 Y
3 ], F0 ?# e c% a* ?- U% R8 @8 i* ^" F
//***************************************************
0 Z# ~5 V( M+ ~3 R% S7 a: N// __________________, X- F# D) V! K7 Q
// VDD-| 1 8 |-VSS
& W* \* D0 c" {5 O: ?, z9 V9 S1 ]// GP5-| 2 27 |-GP0/DAT/ k, S) r% r- E6 z
// GP4-| 3 26 |-GP1/CLK
I; Y/ ?. b- a/ e2 X( e//GP3/RMCLR--| 4 25 |-GP26 C- x4 l5 q# b8 D. q5 F. u! n& z
// |________________|
/ M$ p+ ]& z' a0 b' Y( r! k i// 12F508
" m7 a# L. V1 T& ^* B//***************************************************
- K% g3 h/ z# ^; `// 看门狗和休眠模式试用' j& M4 w1 X' S1 g' l# l0 L9 t* H
6 v8 f6 c6 [, c7 o k; m# b
) A2 Z7 e( q9 k+ |8 a& T#include+ ]$ M5 A# x" x
#include
' j! D& i$ v, P$ a6 Q$ K# O) J7 k7 f ^. F! u- ^4 I! ]" c) z3 W
// #pragma config statements should precede project file includes.& [8 ^; E! L* I5 N, l
// Use project enums instead of #define for ON and OFF.
, k9 d" h" _" K( f* M3 j: i- E( z2 C% p
// CONFIG) }: f0 J5 \. h- c( i
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
$ d$ z" Z8 z; U1 S# D( ^, Y" p#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )! U( b. @ ?& K6 W, f5 D
#pragma config CP = OFF // Code Protection bit (Code protection off)4 X5 g) C6 W5 R4 X: O
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
5 t. e+ }& F- i; P3 B& a* m
/ y! c M4 z, n9 _+ M8 o#define uchar unsigned char0 ?2 Y4 O9 R' r, }) I* n
#define uint unsigned int
" e& }+ X% r; duchar count;
1 A9 r3 D6 E2 g2 A+ m# K//uchar GP3_F;% X( {: T1 Y% F3 a7 a: ^( a! t
void Init()0 K q* S* E# O6 u. {
{
% U# q7 c* y* Y4 P0 c [) V TRIS=~0x3F; //GP3输入,其它输出
' a' z& Q- z+ c# p6 Z1 U OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S1 _7 q& U: W; ?( S8 `5 H! Q% N
}
+ B" Z/ t+ c3 ]void main()2 f4 _8 p5 U/ V7 P @3 `6 D
{
9 p, W% M$ y5 L% |7 HInit();
( v$ T& q; a5 H! t7 l, L& J' o9 H0 |: l% S. v# W' l, @
* M7 c$ c" U- w; U7 [! |3 t5 a
while(1)
6 \* ~" H$ X E$ s8 j {+ x X8 S! l; v8 } C1 s3 A- `: |. N
# x% R, ~7 l# E if(nTO==0) //看门狗引起的复位
5 {) q* j7 f3 u s {
: Y1 t# n' _7 U6 v. L( O n GP2=~GP2;
0 Q5 |" G7 b+ U1 S8 B }
2 M, g- c+ N0 o/ b" R1 L0 | SLEEP();" {& l2 R" x* t+ x
}
3 C- L0 F: J. W3 B+ x}0 u) I8 o7 y. J+ C/ U L
( Y: x+ `6 ?+ ~" B6 J! A
( C( C7 e9 o/ w h, {PIC12F508单片机学习之三——按键唤醒
5 y& O* L* [& J
" x3 j5 g7 F" D/ a' E8 S4 \" D: U+ `PIC12F508单片机是没有中断的,按键中断只能是查询方式。# x5 Y" ]& C" x
+ P3 k; v% [' M" L2 K5 w
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
& W" n- M2 U& \6 |6 N2 c! a7 @: [5 i8 W/ n) y9 T
下载器是PICKIT3.
* q) H, I; D0 \6 o2 m- p& }5 u M6 I+ X. S/ \5 c e
//***************************************************
) {+ p2 l7 s; p0 S; P// __________________
1 G! Q7 s. n% _0 p" p( t1 u6 l$ g// VDD-| 1 8 |-VSS8 y- g- ^* G9 W. \' ?8 [: m
// GP5-| 2 27 |-GP0/DAT( L3 W G, {3 I
// GP4-| 3 26 |-GP1/CLK
7 z7 u/ m! _% @3 T" l$ Y. [//GP3/RMCLR--| 4 25 |-GP2
: L% G( m* G* e: ^& {# i// |________________|/ U; {& t1 U3 B8 q/ @% L/ I
// 12F508
' Q; T! {, V7 H9 Q8 n5 I//***************************************************
" E! k" Y- y! _+ Z9 {4 \- f
* v4 `9 j* c$ i d3 h' t6 ~/ D//看门狗 休眠唤醒: p1 @( G, _1 _$ w; o
//按键唤醒
+ J8 i7 d8 U! H1 b7 r6 [* @" B1 r+ G& I% _' d2 z. L# G
#include
( K2 a2 y6 v2 a3 i2 Y#include
- r/ r6 a7 T& D8 q+ V5 x& N8 I0 b/ p3 l9 `' m/ R5 e
// #pragma config statements should precede project file includes.
% V K# h: Y. l% \// Use project enums instead of #define for ON and OFF.
4 u7 V1 } }/ V, ^
0 ]0 t7 K/ i3 D: g- h+ A$ H// CONFIG- \; k% S) T& l+ C- U
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
( T/ ^9 Z. C0 X4 Y! _( Q#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )6 o3 O1 w% @$ i3 _
#pragma config CP = OFF // Code Protection bit (Code protection off). i7 M! U7 q3 t6 ~% O: ?
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)8 ]- P! p4 o* g! [8 Y
9 a6 ^- Y$ _, E: P
#define uchar unsigned char
! U# _( g4 z, a#define uint unsigned int
( L) J4 g9 S" B5 e( ]; M% u9 L0 @% O: t# _#define LED1 GP5
h; F6 V! _6 e4 r i+ j8 z#define LED2 GP46 F1 t( ~9 ?% [+ M) b8 j' Z0 t0 a
#define KEY GP3
* P" P* x: E- i1 P1 p- Obit KEY_F;$ |) Q7 `$ j5 X% u
uchar count;
3 q( _: D3 d- \3 K/ Y//uchar GP3_F;
1 _6 x" ^: N3 s3 s# Dvoid Init()
7 z" ^( ~$ I! D6 u! ~{/ J1 P$ L. i' R8 c$ K2 Q6 w
TRIS=~0x3F; //GP3输入,其它输出
4 Y3 d$ \) {/ y- i4 z7 Y, Y // OPTION=0x07; //这个寄存器上电复位均为1; [9 r9 e, @ f
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S6 ^# ?% N/ Y, M6 m2 f0 C4 o. W# U$ P
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S' }, ^% v! c/ \5 V6 r' z
// TMR0=0x63; //10ms
3 ]- H* g. h2 [4 a}
) x8 F0 |0 S% A+ E, r5 G, [void main()
- P/ @; U9 D% s( j( l4 z0 v* z{
5 R* O9 U4 w5 }6 k; ?' ]. C7 sInit(); 3 d0 U0 e8 b% t2 ?& |6 E
while(1): D% V+ o, s2 \/ A+ y
{
2 r8 {9 {+ y) ~7 ]' K6 ~ if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
" ~, }6 i% |) ]3 y; j# n {: `2 m5 Y8 B" c. K4 i5 |* [$ N3 a7 O
LED2=~LED2;
/ S$ [2 G( l7 w1 D) M) ~ }
# r7 ~/ {, o: h/ ]4 z" h, y+ @ if(nTO==0) //看门狗引起的复位
! n7 u9 w+ E5 P0 m- k/ G {
; X4 O7 L/ A( K LED1=~LED1;
* P% p u5 w3 L' u# a6 D }
% e7 N' x+ }, w. j% d- [( W9 n KEY_F=KEY; //读出休眠前的按键状态。1 f; L. W5 L* c0 \% ?1 e; q) _3 a
SLEEP();+ b+ Z9 {% D+ K0 q( c9 m
} |
|