|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器% _4 k) c! J1 z* b! ^- R. ~
8 m* l) t8 r# h3 q# FPIC12F508单片机是没有中断的,定时器只能是查询方式。$ ]5 q* I6 A n+ b" ^0 K' ^5 ?! H
' m. C: a; p6 Y4 Z编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
' P3 D! \* z; z1 s: e3 _' {( g$ ^7 b* |" U" x
//***************************************************
0 V1 b N! _! a( A: L+ R8 q) j// __________________
2 q( O! m: h4 K) P' l+ U3 B// VDD-| 1 8 |-VSS" L+ Z( J; M3 D. d% _
// GP5-| 2 27 |-GP0/DAT
' K/ I* l5 K( f$ W% Z! G; w! w: w// GP4-| 3 26 |-GP1/CLK
! |; }/ O: v7 y5 W5 r! ^' V0 H//GP3/RMCLR--| 4 25 |-GP26 u. p: V: D, I" r
// |________________|
7 R; R, }1 L0 D// 12F508
9 |7 E: I& I0 B$ k* V//***************************************************
" Q6 C' f0 Q- U+ A ]9 m
* g2 k( c! i( }' t//定时器模式试用6 ?- g& W: W/ Z& X, y9 t# R6 ]
#include
- g6 c+ d: b0 `8 u* W#include
5 X# @8 Q1 C& ^0 m+ v0 f% k- n
; |7 O* B& Z/ v9 S0 `: h0 e// #pragma config statements should precede project file includes.
N( l8 E" i* o$ u/ e// Use project enums instead of #define for ON and OFF.( M0 O C5 S7 i$ F: e% K$ z+ Z
% `2 a1 h/ T6 a6 f% E& B8 Q
// CONFIG
& j+ Y( N# |8 m#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
, y5 v6 d8 e9 }; J#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
" J% P! b w. H3 |#pragma config CP = OFF // Code Protection bit (Code protection off)6 R& @3 Q- o+ A
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)3 [2 P; Z9 S, v: j* Y
# C' e8 d; P) W3 t: u
#define uchar unsigned char
) z3 c3 d; r' D/ b x j5 `#define uint unsigned int
( G9 X( M7 I$ Z' f2 W7 g& N) w. Cuchar count;
+ f6 W# |3 o! ]6 X* c//uchar GP3_F;
( h d9 U9 U- i9 Vvoid Init()
# q: @! y6 `/ V# h9 `" O{! N# h' K0 s9 ]9 z5 m: G6 ~, R3 m
TRIS=~0x3F; //GP3输入,其它输出
$ n' _9 Y5 v9 R% g OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
( K, w, _3 |# `* z$ j TMR0=0x63; //10ms x=257-tJ/4F/ Y L/ x& O& D% w" X
}
% y5 |' Q6 i$ Q5 kvoid main()
3 g! u6 q* i/ Q; X0 |{
4 ?5 [0 H) ~" i; ?+ A# n0 pInit(); ; K+ e4 J: }4 Y7 g1 E+ |
while(1)
/ c1 T% R' t1 @# M! S4 R" T. n9 q if(TMR0==0xFF); K& k% ]% Y$ ^0 z0 Y
{
0 z4 u1 g/ }3 E+ L( j& | TMR0=0x63; //
, B# H) E( z" |$ x/ E( | if(++count==50)//1s; p, f$ }# v6 n4 i7 x- d
{
/ q! m9 P. q8 w5 Z count=0;. Z' p* _( v& t4 U
GP2=~GP2;//LED闪烁1 f# w# Z( Q9 _. D3 R4 `
}) e/ A5 M N4 F; t* S" L# C
}: @. x7 x9 Z: L
}4 T+ I. `% x1 Z* p
} 5 J3 [: A3 M6 U0 `7 |% N h6 Q
# Y# U( Q8 a9 z! c5 K9 R- N
5 b8 P, K; s; G! c1 d( z; Y0 H0 T
PIC12F508单片机学习之二——看门狗和休眠模式试用
/ d2 f! a/ |$ w+ E' g
2 c- x Q: E3 J) CPIC12F508单片机是没有中断的,复位情况只能是查询方式。) q& |0 @/ s' \3 N4 O
}- F4 t# u7 G2 b- ]8 N编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 f# n( c2 a! T5 F. ^
( W3 s7 e: K* Q4 ^6 {: a$ a
下载器是PICKIT3.5 L/ S& w+ r. u! m# w" a
$ X2 c1 G9 A( F& ~
//***************************************************
f2 z4 A" W1 \/ W2 N1 _' ~* W# [// __________________# r1 }1 c7 W: w3 L% K$ {0 l4 e
// VDD-| 1 8 |-VSS
/ A( }8 L( q, q9 x* U0 t// GP5-| 2 27 |-GP0/DAT5 ^0 k( h' ?! [3 Y# h
// GP4-| 3 26 |-GP1/CLK
, a( S3 r) B5 Z2 w+ H* R8 v) o3 a//GP3/RMCLR--| 4 25 |-GP2/ R. z0 W7 }6 q( I! s# z; K; y- Z
// |________________|" k/ f+ h! J8 j( F- G7 Q5 Z
// 12F508- `/ P4 p; Q( q! |) v
//***************************************************0 I+ F: o+ t2 }9 ~) O
// 看门狗和休眠模式试用# k2 ~: W+ E1 C$ F4 d( ?
6 J% J, a3 U, `/ j' h( G, g* h# B& L& G6 Y& L1 o5 t' T
#include, v& w3 L9 S9 s, G3 v' ~. P
#include0 {8 L7 i& g- W* {. d8 g' A$ A
0 J8 c0 {# v7 V5 _" z// #pragma config statements should precede project file includes.
6 F, ?; c9 G3 K2 G// Use project enums instead of #define for ON and OFF.
1 o; W+ \- @: @+ Z7 a) [' ]2 o
9 c7 U4 {; `; \/ [% |0 M// CONFIG j* \( l- l- s+ D1 L( V
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
- M( a- \. Z) Y#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
/ A6 [# V$ G! h& \#pragma config CP = OFF // Code Protection bit (Code protection off)
7 Y. i7 L3 N; O+ [$ w7 a#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD) ]8 Q2 s7 u: ?; u
# g) @5 _ ? A" j% c. P( S4 c |' c
#define uchar unsigned char. o% c, y, D4 D% w8 Q
#define uint unsigned int! X- P9 W3 }* F. H' J- h
uchar count;& J7 {5 L9 e4 y0 I- ^
//uchar GP3_F;/ y1 Z" o# g3 h* V
void Init(). w: P& N- y: U) e8 x- X, y
{1 I) `0 a2 {& S1 ^+ b) g8 D
TRIS=~0x3F; //GP3输入,其它输出& t; c! G8 W/ Q# _1 w
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
- B# n, d0 i/ n}
% k5 K4 Y0 m' l [! Zvoid main()8 K/ o B6 c$ Q& B5 V
{
$ n! k& j( G& H6 w# P* `Init();5 W: d8 t; Y7 A8 ?
( I* g2 B' A/ p% v' b! V
( q$ a- R- ?! c' w" \
while(1)
, {# ~2 n/ A0 m& ` {" C- j& s- u& u4 V0 z
- {; G2 C: S0 D( S7 E
if(nTO==0) //看门狗引起的复位, I5 K: h |; ?& _+ Z$ ~ @9 x
{: ~3 w+ f% z4 ^& ~( ?8 n& X3 \" D
GP2=~GP2;' } A% d9 H+ G I5 t2 S
} 2 W# u& q6 C6 r! d2 c/ x
SLEEP();
" r$ ^, `( B; j" U% s' Z% g3 ]$ n2 d }: A7 a3 K- X+ L, }, G+ ]
}
4 d% p J) j4 {3 c8 y( }( Z3 h# E5 h7 b8 _1 t, S
/ F5 Y) _, e2 ~, jPIC12F508单片机学习之三——按键唤醒0 m- ^# s& d) W, O' B7 X# e; q
! d7 m& c; d; a. o* }9 H$ _
PIC12F508单片机是没有中断的,按键中断只能是查询方式。. d- M. z8 p! l" J, X
+ P$ g! h! {: H" w+ `6 P
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
& K9 K! p0 p4 X5 z& S
- g( f' ~+ {7 U* _, y下载器是PICKIT3.: x$ p! L5 |' t$ S
" u0 ?+ {# r8 U8 S
//***************************************************9 G9 _( r E1 h/ g, I% l
// __________________
* E' ]$ F3 [6 g0 J// VDD-| 1 8 |-VSS
/ A. q# D" }2 E" C// GP5-| 2 27 |-GP0/DAT
4 t$ X3 u) Y; Y7 T) R: U// GP4-| 3 26 |-GP1/CLK
1 i! x* c8 \& {- T' a$ h) g//GP3/RMCLR--| 4 25 |-GP2& W4 z% H. ~6 K$ G6 N7 S8 b: B
// |________________|3 M% Q9 R9 [) J3 |1 H
// 12F508/ d' F2 }7 A) e* D: n8 `" X
//***************************************************8 C! K; }! O( I- K. O0 K
2 M7 H% c) k1 m8 {9 [//看门狗 休眠唤醒* ?- l" b- F+ g, q m
//按键唤醒
9 W. v$ [! r( @1 A& ?+ W/ V8 I4 w* d" C% A2 @
#include. Q0 A* ^. L# H% S. _( L
#include5 S! J/ R: g7 `# l$ u+ z' T5 E8 d
* p) w" D2 Q; d- Z
// #pragma config statements should precede project file includes.
K, r. a# N9 @, h// Use project enums instead of #define for ON and OFF.# }0 D9 d( c$ j) }5 _
; a4 W' U$ C- A2 o// CONFIG
# ?$ l$ c* L5 ^; S: S3 G#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)! n, F/ W' X& L) n3 y3 b
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
5 u& w3 U3 {# C; E- V& l: D/ l( z) F#pragma config CP = OFF // Code Protection bit (Code protection off)
. g) V0 ?6 f& ~/ s9 e0 s3 e#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
; [ r5 ]! Q, n6 j" o- d
$ V" b; N W: p! {, K#define uchar unsigned char
1 m0 y4 X6 M! z* C1 F9 y1 x! _: }#define uint unsigned int5 W: T3 }/ g( r5 J: ?
#define LED1 GP5
* ~8 y9 P6 b# g# c#define LED2 GP4
7 D+ C7 F* R- R' s- j# V# t% ]#define KEY GP37 n6 K6 \; g; [ h4 C
bit KEY_F;
( t+ B# }8 i$ O# Z9 uuchar count;
% N$ x4 c# x" u7 m! [4 B8 ]//uchar GP3_F;
+ x6 A% I9 a5 {/ n2 q" \void Init()
7 E1 U( ~* L9 |* w! @& C" d' g. K{/ b* I a$ M% m6 h1 o% M
TRIS=~0x3F; //GP3输入,其它输出
- D) c& L8 {+ M0 I9 } // OPTION=0x07; //这个寄存器上电复位均为1( |% E6 ~$ [6 F1 s9 u7 O
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S+ _4 u5 V2 v8 c/ c! M# N, l' f, ~
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S3 n8 K5 \# X; G! {: |; p b
// TMR0=0x63; //10ms9 A+ y2 P* O, f& j
}
% L% [' j7 }* U$ `( d. U8 R2 ^$ vvoid main(), X2 H H% U% J/ F- w! K, U
{
6 t# Z9 q7 _0 [! T* @+ V& M* rInit(); ( X+ x v# ]2 U# H
while(1)
) t1 j6 \8 |# s. k{
0 g7 ?1 [7 q6 G8 ?& G& v9 z if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
+ C% T4 J* \) x. I7 M* D. x {
" T/ k6 @$ _4 a LED2=~LED2;
; k8 D. u. ]) V }
8 a) t, V9 C- p2 x8 U. @ if(nTO==0) //看门狗引起的复位
, |% v* f' F- V; E0 ^6 h {+ D6 z. X& P9 y1 C
LED1=~LED1;
9 ?, S8 S, @& f5 O: R }
; ~+ a* A3 }8 V) U- G KEY_F=KEY; //读出休眠前的按键状态。
$ }9 [* e# O9 }9 Z6 r- v3 r SLEEP();0 ^+ q0 t* W8 s1 p9 Z
} |
|