|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器
) N) ^. e) ]: h. \
# N6 j) j# L1 |+ y, ?PIC12F508单片机是没有中断的,定时器只能是查询方式。
; ~2 C- z, X6 Y
+ G. l$ |; c1 S8 x: c$ z( d编译器用的XC8,编译环境IDE用的是MPLAB X IDE。% h5 ?6 j8 [5 G. e9 U1 o q
4 a- R2 g& n/ Z: o//***************************************************3 `# |" v! ?. i- Q
// __________________( E+ X$ k0 {( h& s/ {/ R/ _
// VDD-| 1 8 |-VSS
; O& F/ e5 Q* |" z4 n9 e// GP5-| 2 27 |-GP0/DAT
7 \& h) O5 C Z# ~6 h' P, p/ }// GP4-| 3 26 |-GP1/CLK
' T# C! x# `2 p. I5 R. K6 O//GP3/RMCLR--| 4 25 |-GP2
' a$ U( E. O7 V" [8 }// |________________|# ` E$ ~4 a5 j
// 12F508; }: Q/ T z0 P. \2 h a2 B
//***************************************************3 k, s! }; T0 q$ ~6 q- p! F
2 a) g' i/ c" w- A. |$ y//定时器模式试用6 U4 W h$ M& N/ f
#include. r- ^6 Q y8 L Y8 M" K4 K0 w5 g
#include+ y' \: Y; f% b3 \8 I1 z, R B. y
4 x$ A* t1 l1 a5 ^( D0 Q: J! x* r# E// #pragma config statements should precede project file includes. e5 V& U! ~8 o! S5 s8 D1 N3 U
// Use project enums instead of #define for ON and OFF.
3 T6 U2 L# s8 ?- x( ]1 G9 r3 S3 A) W' `! o% V
// CONFIG* d0 ^. _! b3 N# K1 o
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)- B# K* f3 c# T" v7 Z% H
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
# N0 l0 v) X4 w: M( `" K% H8 b#pragma config CP = OFF // Code Protection bit (Code protection off); ~; B! h3 Z2 J4 |+ a9 @
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)3 `& e6 u; q m4 o5 r4 ]% L
7 D% p9 | P } |/ g. }" y
#define uchar unsigned char5 }9 @# ^5 g2 W$ ?0 n1 b& r
#define uint unsigned int
' A* }, [; j4 q3 l: vuchar count;
% r: |, ]! P* w3 D( u+ G9 i' n/ v//uchar GP3_F;+ k; Y J2 ]1 |4 q9 p9 k
void Init(). m. t' K: M0 s+ N3 c
{
+ L* C# M" m- k# g ]! v TRIS=~0x3F; //GP3输入,其它输出
J1 l9 T. q1 Z$ [5 _0 G- n OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
6 k( z+ P9 I: g4 j3 j/ r2 W) \7 N TMR0=0x63; //10ms x=257-tJ/4F9 |2 s2 j3 v/ ]
}
" X1 ?) V2 e W! a4 Y: _void main()
' d' u- n# c! [, P8 F8 Z{ ) `8 p7 z' _3 s/ v" [7 [" I
Init();
, j0 j! j1 ]& v- f- A& vwhile(1). d1 a5 T7 N+ F9 B0 S9 ~& i
if(TMR0==0xFF)# j( f7 u1 I7 }6 M! P4 H
{
9 T# W, w/ L0 V5 e& m1 u, R8 Y+ J4 b$ M TMR0=0x63; //
5 e) R5 s7 ?/ Z! C% T! j if(++count==50)//1s( N: q% W) W# y% g' o
{
7 w# Y9 s8 z J* ], A# Y Q count=0;
( g* z D3 B$ o* c' ~- h. ~6 s GP2=~GP2;//LED闪烁8 E, }7 A! d3 l& j3 g/ ^( {7 D
}
/ l/ P# @; D2 }0 _ } y* x: q- A) X+ Y7 A/ ^
}9 d% ^% |' r' G% M' k) j$ f F
}
2 g+ O, i; T& ]2 d5 m( R' q; r0 D
; C d* m# ]! ^, s J7 D* vPIC12F508单片机学习之二——看门狗和休眠模式试用
6 Y) }6 m% A2 ~2 z8 c
7 h' M: l5 Y$ a- zPIC12F508单片机是没有中断的,复位情况只能是查询方式。
4 t. G$ Y. B" f. v% d, V! ~1 @2 a- w' p" G
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
X& B3 T" G, X; t& t- m) K9 }4 q8 `+ _/ g& D8 G# R6 A8 w
下载器是PICKIT3.
; l& x, K6 M- l/ _$ J' O9 L5 l. \9 k: k! }1 g* F: _8 I
//*************************************************** ]( l; ^6 J3 N$ {/ v
// __________________# S% I1 |# L4 W+ I
// VDD-| 1 8 |-VSS8 u( Z4 E% t: K+ U8 {
// GP5-| 2 27 |-GP0/DAT7 Q% |# M. i1 U0 A* u0 C
// GP4-| 3 26 |-GP1/CLK
( g( O) v6 b: O$ T//GP3/RMCLR--| 4 25 |-GP2
W3 b; R/ K# `; V! D* h' Z// |________________|5 S% h. V4 w$ g' J4 p' O
// 12F508
% T# L8 B d/ f//**************************************************** d3 l! z k7 Y% S! H8 ~& |
// 看门狗和休眠模式试用) \: U* M2 u" _! x1 N$ X$ K/ ^8 _4 v
: v+ b% D! G/ V! ]6 g. k
( X: O7 Z/ L7 D" g e8 [% m/ b- Q! j
#include
u+ O4 p# R# r1 {1 b2 U/ `#include" V8 P8 [6 H9 l: k* Q
3 J2 y2 T6 k8 _+ M// #pragma config statements should precede project file includes.
9 v+ R1 K( \6 {7 Z( t// Use project enums instead of #define for ON and OFF.2 l% O# u& _- {. d( P
' H5 `) [* u- l1 \9 m6 N// CONFIG
# K* V* i& _. F, n#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
1 y0 x& h/ j; d1 _#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
; E& w! t7 W. z$ m#pragma config CP = OFF // Code Protection bit (Code protection off)
g7 q3 x. h+ l1 c5 V; C8 t# d4 }# F0 i#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)! h! R% A) S) ^7 Q- O
E y! [7 i( f% }& D#define uchar unsigned char% K! `, T) \4 r: r, Q' R
#define uint unsigned int
- _9 D$ \- m {% U9 nuchar count;
. a: l, h% I# T5 D//uchar GP3_F;
) D7 J+ ]% ?: e+ I$ i; @+ Y+ E2 Cvoid Init()5 G% e) ^* x8 I4 w! O2 W* s
{
& M9 a& Q& Z5 W TRIS=~0x3F; //GP3输入,其它输出% U% s# ]2 f5 m" Z5 N. Q' V
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
/ C5 _ {$ k+ n7 J! f7 f}
8 g1 C$ ^$ I, M x0 ~3 Z1 L4 tvoid main()& r3 D% n s6 G k2 ^' j: d
{
9 D3 Z4 Q4 _7 j2 lInit();
- H- |: S3 w; g
' e4 ?; c. Y5 x. Q; x
9 b8 E4 a* c- i5 bwhile(1)- W: |( G5 ~" f; z
{
5 d/ T2 B+ y- G% Z! m: z
4 p0 g; D! ?& i. k# A& q( u if(nTO==0) //看门狗引起的复位, c: T( G* U/ x. g3 K+ P
{2 a7 {6 @5 k3 q# D# t
GP2=~GP2;; F7 n D* T8 C
} / B2 C- y- k. r5 g& i
SLEEP();; O% H; @6 V' @! t
}
; U) I/ G) D. V. F7 r/ b0 [}- @1 ^- @8 I R7 |# C/ K& E2 |
9 b! E9 g9 C" s' B5 L( Y8 j: ^
1 H2 x% t: c9 A
PIC12F508单片机学习之三——按键唤醒
" {5 `2 w5 i1 I/ q! [/ U0 E 4 x+ T% s9 ^) U0 [ G6 c
PIC12F508单片机是没有中断的,按键中断只能是查询方式。9 y, C& t& a3 n2 P. Z
0 D' Y3 T" Y, W
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。3 o2 Z/ W+ ~1 b( A% N, I' n6 C
' u$ e% \" t4 L# S, H! n下载器是PICKIT3.
5 q( L E3 {4 f3 J# m3 N! g, s: f. e
//***************************************************1 O5 |- ^% J# Q. L6 S
// __________________3 B, ^4 B" G% k1 p9 v0 l) U
// VDD-| 1 8 |-VSS
3 a/ E+ a- C% G3 \4 n// GP5-| 2 27 |-GP0/DAT
9 f0 E: W( E5 P8 ^// GP4-| 3 26 |-GP1/CLK
# c8 z/ G3 U9 ~; e//GP3/RMCLR--| 4 25 |-GP2
" `; J% B+ P$ ~6 D$ V& v// |________________|
9 q5 G% ^, x, k+ r- z// 12F508: }* T' [- P3 \( I
//***************************************************- d/ w2 I2 @% N% z
8 S% R4 h9 t+ a9 b
//看门狗 休眠唤醒
9 k M4 v% z* y* }( ?$ ~) \. X, `! U//按键唤醒3 v% E2 U( A+ A) h$ `4 ^4 s: \
6 ^% A5 s2 N0 {1 I#include
% @. u2 }7 w7 q8 y1 e, A' z" f#include
' Y) p; g" }) P4 e1 s+ D* E/ J; z: K8 W: w
// #pragma config statements should precede project file includes.8 t/ _% S2 z) R% p5 g; r0 Y4 k6 C
// Use project enums instead of #define for ON and OFF.! @9 J2 n3 p7 G' K# W2 O
C) R! K' ~7 z! t: B5 g0 s6 a, H
// CONFIG4 ^# ~, m: `% I
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)$ ^" z; G4 z& z9 g: _
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
1 A5 D& U7 \/ V/ o! s" Q% _#pragma config CP = OFF // Code Protection bit (Code protection off)
( \% I; ?, i1 t4 d% K7 K#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)# e* G: f% B4 y9 k4 l( E% m
' z" K# J5 ?2 g, r' U" W% V
#define uchar unsigned char
$ _2 Z0 i1 J3 h! ^, U* W8 F#define uint unsigned int6 Z! F$ j l0 A1 p4 a8 o
#define LED1 GP5$ ]! Z- R' t3 B1 ^. G- {
#define LED2 GP44 n4 O5 c. W9 {' ]) v
#define KEY GP3& X& v4 r; T- F$ q0 L
bit KEY_F;" c' w- ~0 w2 K/ T6 W0 X& J
uchar count;
, w& y$ B2 {0 F2 Z7 v9 f7 t( Q6 a//uchar GP3_F;
2 m- Z3 ^+ V6 }+ Z0 Nvoid Init()
3 t" r6 K3 p, [* x8 t7 E5 }{* t: g5 b2 S! k% e
TRIS=~0x3F; //GP3输入,其它输出4 N6 \- Q# K) w0 Z4 {9 ^0 V* K
// OPTION=0x07; //这个寄存器上电复位均为1
# Z) C C1 G4 e1 D( n% U // OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S6 q6 ^, E. C- K I2 v" D' L
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
6 N2 @: s, L/ t! \ // TMR0=0x63; //10ms
/ ]# c* G( t) s# Q' E}
8 Z# j$ G' l& o% Ivoid main(): y8 R' l3 h8 j/ [$ M
{
" C+ Z3 T' T* z! P! |# hInit(); % l4 G! m' k. u# n \) j5 Y, r, X
while(1)
& l: M2 ?' }3 H; g{
; M" n0 x( z ?+ g& C! m7 v if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒( V& F' M6 k- s5 B$ I
{
4 @8 `) _. i1 h LED2=~LED2;
8 B8 [! i( n/ i }4 c6 R" Y {, _+ f
if(nTO==0) //看门狗引起的复位0 @3 o$ w3 {/ _ p1 h2 V& J/ L4 R
{
/ J& O/ S# c- V# W4 y3 e9 Y LED1=~LED1;
3 w. ~' H6 J! n# D3 Z3 k6 w }
6 r h2 j+ o4 _5 w; S* q KEY_F=KEY; //读出休眠前的按键状态。
3 Z Z% N" H; F' f6 _$ X. Z+ l SLEEP();7 ]6 R' o- T- ~' v
} |
|