|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器2 S4 [. d- H ^% K+ H2 M
5 E/ e& B& f3 \1 Y
PIC12F508单片机是没有中断的,定时器只能是查询方式。) g- W. |3 M1 D
( ?. [ K0 Y7 I J
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 |8 J0 n- d% |% |: A5 h
" I3 ]8 y! {: p
//***************************************************
: p3 w; e' J) e4 O2 v& w// __________________
2 `2 C" _' S7 P: S7 P+ Q5 N, d( E1 a3 P// VDD-| 1 8 |-VSS
1 {+ A3 |/ A5 @// GP5-| 2 27 |-GP0/DAT$ r, N/ S. J0 D' a* ^1 ?/ B
// GP4-| 3 26 |-GP1/CLK
+ g2 I! R$ h( F8 m8 Q+ H//GP3/RMCLR--| 4 25 |-GP25 }# ~4 x# N: c; C- s' M
// |________________|
@+ ]6 l6 f) ~6 V2 q. R2 l/ x// 12F508) ^% v( ~. w5 s$ j1 a' f
//***************************************************
- ?8 g) a7 D% P8 k8 c( F* b K8 F
//定时器模式试用- ^+ M, m2 _5 X, j' y# x
#include
8 s" C+ p H; l# f" }5 M- I; D#include
, x: z. O7 H0 r4 b
! ^8 E* ]; R$ F// #pragma config statements should precede project file includes.
: w4 h6 R9 Q' `% {1 s y// Use project enums instead of #define for ON and OFF.
2 x/ s' [7 r% b+ G% u+ P B/ V$ Q: o' F- b" T8 y1 t
// CONFIG+ c5 }* K* F( p3 G
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)5 \" }; |* j7 p6 D8 A
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)7 w5 l" q& ~1 g
#pragma config CP = OFF // Code Protection bit (Code protection off)
" q) n/ R6 t) J% r#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
% t/ p+ M9 i2 c/ U: V# P& o" R7 Q" R0 H, Q1 R
#define uchar unsigned char8 S) D& \" o1 Y! ~2 u6 k
#define uint unsigned int
# F# ]5 G6 W+ @: ~uchar count;
* v) z- w+ T+ ?" u' J" C8 s//uchar GP3_F;2 I0 O! Y+ j) e5 s* c7 W @. B
void Init()
) y% \5 f0 A2 B" ~- l1 |{) b( ?& @/ Z6 W* U$ L' C3 @
TRIS=~0x3F; //GP3输入,其它输出% d; t: o+ Y& }) f5 l0 n# E& \2 p
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
0 ]4 g7 l q# K' P: Z. Z9 Q p TMR0=0x63; //10ms x=257-tJ/4F
$ x( ~( K$ d% x& [}
7 g2 }- h1 ~" v) D" j& a) dvoid main() p3 Z9 W+ |# s9 e" \5 X9 s
{ 1 y3 s' u+ n% U6 k. n. u6 u
Init(); 1 a$ d" b( y% Z# u3 `
while(1)' j8 M, n3 b& b! K
if(TMR0==0xFF)6 o8 a: ^5 @1 W' K' k U
{
0 a" P( L4 e; Y) f) U TMR0=0x63; //
+ t# f6 _4 a, \% w" Z& R- v if(++count==50)//1s
0 C1 {) n1 z5 b2 i# S+ h$ x6 Q {
, `' x/ Z A# W3 \' ` count=0;
- }/ U0 Q# Y+ y/ |! z$ q: L: o! K ~1 d GP2=~GP2;//LED闪烁
1 b7 }( C' J* e9 n. n }
( g/ C- \) e. Y }+ f/ j9 @2 x! k+ u0 P
}* E) e G6 M2 x' O' @4 n
} 3 c7 ^, ~0 y+ b' K/ X
. v3 @( B9 a' f) t/ z6 N3 f
. F. e ]5 N3 c$ L4 o: aPIC12F508单片机学习之二——看门狗和休眠模式试用) O4 m$ Q' W: B5 g" E
! g4 y0 R' j; ?9 U; e
PIC12F508单片机是没有中断的,复位情况只能是查询方式。& p+ r: W. E! K* [; C, A& z
% E# ?+ M4 c/ J
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
& c3 u- n% E" X; M; F6 [- i
3 \. D; b7 A* }( Z2 U下载器是PICKIT3.
; a* k/ h" w5 o2 W4 \ X
0 {/ w7 w$ L: F! I/ Z//***************************************************
; @: f4 f* e! a: }6 ~+ s5 D// __________________: Z) b& r$ \$ u2 u% N8 {9 ^
// VDD-| 1 8 |-VSS5 o7 z7 ^: A, w t
// GP5-| 2 27 |-GP0/DAT
7 S9 L8 C( c4 i* _// GP4-| 3 26 |-GP1/CLK% g$ {3 e5 m5 S; y3 V6 o$ T. H
//GP3/RMCLR--| 4 25 |-GP2
" }, N0 M: K/ n' |4 g$ o1 L4 S" C// |________________|2 x; ^/ z! Y( {8 ~( R( g: X/ H
// 12F508
2 M% q, B* z* W$ J//***************************************************
. ~7 }9 t4 J n1 g, L0 y) q' V// 看门狗和休眠模式试用
0 n& L" z1 {' h2 D% G- Y, ]7 q6 `7 W% N/ N: |
" ], p; E A, w! ~$ t0 j
#include& \' |( X0 @ ~7 a W* z8 ]& d/ {* Y
#include/ D! B/ o7 G, U2 ^0 ~- ~. z
7 z2 G: N" v" i// #pragma config statements should precede project file includes.
1 P4 Q6 i( r; I// Use project enums instead of #define for ON and OFF.) W$ W0 Z3 ^+ K3 h% I1 l
# U% ?4 J' V1 j5 q- u; x. Z// CONFIG- @, p2 s" ^+ H O9 f
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
: o/ H. C- |, X) q2 V8 S8 x; O4 n#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
A$ j y7 B k3 l3 }! I#pragma config CP = OFF // Code Protection bit (Code protection off)
; X5 _# l$ g" B: w* ?9 Q8 l* P#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
8 C- u# M U8 X" c
- g4 r z# @0 l+ L#define uchar unsigned char" P4 Q9 T- ]% \2 v8 S) o% b
#define uint unsigned int
: S- P2 N7 B$ }! Fuchar count;
/ F/ [4 B: v" Q& }# h# u8 c( D( V//uchar GP3_F;+ R1 a6 V( N3 ?+ E i5 ?' M
void Init() W5 s2 s# M8 ]8 `6 n) ]: m8 y1 P
{; j' i0 m0 n3 X! B
TRIS=~0x3F; //GP3输入,其它输出: g& q7 z2 ^0 M0 {; j# o9 q
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
2 \) \! D' m9 M9 \1 L} W! H+ H" O; ?
void main()
" a* S! O. W. y1 Y0 P{ ; v* V: Y# V* c$ U9 R- G
Init();
6 {% s4 C; s2 t0 b/ C; J) Q# S2 v4 \! e6 Y6 B
; d1 h0 D: x( s: ^) `+ m8 o/ N3 nwhile(1)
/ |9 p3 v5 ^5 u3 _+ B. p# K% N {
6 @" w- d2 f; m6 o
4 @! T" Y+ B: c) l if(nTO==0) //看门狗引起的复位
* I& D, H+ B% O {' j- \( I# _) S4 l5 ^
GP2=~GP2;
# r, C- V' Z- l( h+ T } C: _. k9 f2 y8 _
SLEEP();
4 L' y+ G& i u5 Y3 b }
. _: }5 y+ B# H- D! D$ M6 G}& c6 i" V0 w% K( w+ g
' U# O' A$ B$ v' e
2 s1 ?! L! ~3 d: |) ZPIC12F508单片机学习之三——按键唤醒+ t9 D) }4 X- E' D( K% n
1 N$ {8 d1 |3 J+ @; X0 A0 V
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
4 i W! G8 Z$ y" m1 ~
; d8 A6 c+ V! h2 _# X& |# m& H. z# I编译器用的XC8,编译环境IDE用的是MPLAB X IDE。! l& D/ a2 K, K
+ U% }% T, W+ V0 O6 h下载器是PICKIT3.4 u8 M; w8 M5 m" |
, C3 U# e4 y, n6 }( k//***************************************************3 i, O: s# A' e1 c; z) A( M+ L
// __________________
n* r) s( T. Z: |' u I& }( K// VDD-| 1 8 |-VSS9 W& q$ O C L1 [! S
// GP5-| 2 27 |-GP0/DAT
- n4 w- |& U. @( w. v// GP4-| 3 26 |-GP1/CLK4 J3 q: ]2 d0 C& j
//GP3/RMCLR--| 4 25 |-GP29 d. v/ C4 o- L" v4 E$ S6 w
// |________________|
1 S5 w) u' ?, s) h7 }// 12F508# q5 G4 X( G8 m% B' n! t# R
//***************************************************# g0 U4 G# l0 a2 T/ k4 e3 n
: h* D( y- R5 R! }
//看门狗 休眠唤醒
* s; f' \) k" v; g e//按键唤醒
! I% c% ]9 w9 g( |4 j+ f! Q" r& s. g7 l; B$ `8 Z
#include
& s) h- |- _7 N0 }+ v V5 }/ I#include5 O5 w9 t& i; p; a
! m; I2 m) X; c. ?' n
// #pragma config statements should precede project file includes.
! q' u$ ^ }5 J W$ h; f// Use project enums instead of #define for ON and OFF.
) s/ k# e' w1 q) n5 ~7 c: \0 c4 `0 L# O% L2 z) S' s
// CONFIG
' Q6 u$ _/ \( {3 D#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)1 E- j* f8 B* u4 S
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )9 x$ ~; \) W2 M
#pragma config CP = OFF // Code Protection bit (Code protection off)
1 b a! N0 r3 q. C9 C8 b3 W% r#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)7 J7 K% x, s3 _8 A0 s; n3 k
9 y. O& K# R7 s9 @9 e( ]#define uchar unsigned char6 u$ ]) r1 u2 Y
#define uint unsigned int
6 d* d# C0 [( w6 ~3 h0 u#define LED1 GP57 m7 i2 J& p# P
#define LED2 GP4
# @6 p1 a! \* o#define KEY GP37 q6 l+ ?- L/ w8 F
bit KEY_F;" U0 J- S/ m! U4 T! `8 I5 k @+ K$ z4 n
uchar count;
+ _2 H5 A V! O3 ~//uchar GP3_F;: d' Y$ Z! ^5 |% _5 o
void Init() n* I0 ~ h9 u9 r" f( d b
{5 G- [, o7 e) l! _6 A* G! B6 `# |
TRIS=~0x3F; //GP3输入,其它输出
& G) }4 W2 i& g. w // OPTION=0x07; //这个寄存器上电复位均为11 i, D1 ?) T8 G/ F
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S9 S$ ~/ B3 G! C& X* V
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
& _' D, y! X( y( }+ s) \/ Q8 ? // TMR0=0x63; //10ms& g5 k, W. T7 W7 A3 [' b5 f1 D
}- }# _% f3 v% S
void main()
: w+ c9 Y9 Y+ h4 Q. @{ 0 S3 |# q1 i% }( e ^4 g+ G. z4 Q$ O1 M
Init(); + C$ W( j/ \3 \$ z
while(1)% P* Y) e+ a. I \( b1 E
{
4 P7 O& w1 w4 a# I; _) X if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
. ^. m' J( }& C( _' p {* u: F( U7 n" ]
LED2=~LED2;
& K6 n4 P% o: v$ ` }+ u' [; Q0 R" [2 t& }5 o7 e
if(nTO==0) //看门狗引起的复位4 B- K" }. G/ ]$ Y& {" S9 s
{
7 w! T/ n: K9 E LED1=~LED1;
7 \1 n! k, G. \ }
" V/ _; H! |0 f KEY_F=KEY; //读出休眠前的按键状态。- j* s! O- S6 B# b5 D7 Y I, `; A
SLEEP();& V1 u5 n& l: p! v" U
} |
|