|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器
5 L& h v) o) }
. o. W2 C4 V! N- TPIC12F508单片机是没有中断的,定时器只能是查询方式。5 Y$ O9 r4 K/ X, s% N& }- E
* L8 `1 A, ~3 J w9 `" z% c
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。; C5 C# x4 G# |: T8 U
$ G4 n% Y2 F5 l4 x9 u, @5 L//***************************************************8 U1 M. ~4 \* G: `# }' Z" a; i
// __________________
9 C- J; \/ H3 C( a* m5 A4 e7 ]// VDD-| 1 8 |-VSS- [$ n1 F- B8 A/ t9 ?. C
// GP5-| 2 27 |-GP0/DAT1 u6 {7 ~9 B' p6 ]- R! E8 y
// GP4-| 3 26 |-GP1/CLK
# x& T# ?/ N9 T9 \6 D9 L//GP3/RMCLR--| 4 25 |-GP2: A* b& e* q5 S0 N0 ^8 M5 g
// |________________|3 S8 z. z( I0 W: n0 y+ R
// 12F5089 S# c/ ]/ y: b2 @
//***************************************************
& B, \2 u5 E; y! N- i- H: @5 I' Z+ J7 I' N% {1 f! g1 U
//定时器模式试用3 x) ]5 N) k1 ?/ z& `7 n8 Q
#include
' n( z8 A: ^0 z1 _# o#include
- u: y( ^7 f0 }2 L' _% a
) ]5 I6 I4 ^; L0 S+ B// #pragma config statements should precede project file includes.+ x* i/ g# S( Z, T7 r/ L0 ?/ ^
// Use project enums instead of #define for ON and OFF.4 R3 }, J+ G: Q( l. `& X: i& }
% I. l5 @7 v2 v7 x& p$ m7 X% K. Y O// CONFIG2 n8 `6 p; f# X' d" N9 ]
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)$ T8 G$ i3 E' K) k4 f5 i
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)6 K6 F" S( ?2 N3 B
#pragma config CP = OFF // Code Protection bit (Code protection off)
- h5 _8 b1 z0 l7 r' T5 M% ]' T#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)$ d J# }$ w- k" R n
5 ~% I# Y& i) C
#define uchar unsigned char
+ E" M3 I; d$ m; D#define uint unsigned int I" V) ^) ~; l0 D t& g: Z. z
uchar count;
- m; a, L9 d. u$ K# t1 G//uchar GP3_F;6 D% y4 w6 _# Q; P: \
void Init()1 E( x3 u @; {6 W: r
{
# Z& K! I( L2 N% E$ k TRIS=~0x3F; //GP3输入,其它输出: W5 l% s. u7 i& k6 j
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F) _7 v% y; ~# O4 T: M8 @
TMR0=0x63; //10ms x=257-tJ/4F8 u5 a: b5 X8 z
}9 p) ]' B8 t; @0 M) o: E, r
void main()$ f: \7 b7 x+ J/ G( i& U4 q |
{
" y4 u' T0 R7 g$ \( p8 @5 ~% LInit(); + d2 ]: V4 o3 v. X+ j
while(1)9 F* B2 Y7 P, @$ I
if(TMR0==0xFF)5 A! N, T/ e3 m
{
w1 r7 E1 d, d8 z$ T- ~1 C TMR0=0x63; //+ n3 c2 _' I; x9 R6 `5 m) `& ^
if(++count==50)//1s
7 \2 A# t7 }) v1 [ {. _4 O) ]$ F: z, d# a( Z
count=0;
0 z/ I# i+ H, t& O: V" ]8 W4 W* C GP2=~GP2;//LED闪烁+ b1 m3 P% U+ d% Q
}4 Y" L+ V: T0 {/ s* r2 l
}
% ^! Y; r4 D/ Q }
3 ], x# n. q! s% u, }: e}
5 h- q2 q4 ]+ X/ H' T( J% O2 H& Y# H& o, |! `/ r
9 E$ T6 B; c+ y1 RPIC12F508单片机学习之二——看门狗和休眠模式试用
' D/ @' G1 p7 C" z; Z; [- X P- F( P" P; w4 U
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
% _" \0 M" Q/ P+ g% e' Q0 x
0 I: a' x2 C" {) ~# l( ^3 Q编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
9 P. D3 u, O! y2 |! J \' r
* g8 V+ [3 M. Z# _下载器是PICKIT3.' i7 W1 S8 ? c9 A
7 ` [8 ?) ]7 \1 f( c; m( {2 k//***************************************************8 ?$ z/ C# e9 |: J. L y2 T
// __________________* T, y1 x- G4 k6 u6 R5 O3 W
// VDD-| 1 8 |-VSS
: ]2 H. u4 x% h& l2 y2 M) p! W3 `// GP5-| 2 27 |-GP0/DAT/ F8 T% @: U7 n7 R7 b$ f
// GP4-| 3 26 |-GP1/CLK4 O9 G( z# u6 ^! L: b# b1 V
//GP3/RMCLR--| 4 25 |-GP2; e5 Y/ g0 a" c( e7 ^1 \7 _
// |________________|
: d" F2 l" R2 _) u. \// 12F5080 R3 F( V; S* p$ ~ V; @ t. x
//***************************************************% U8 g* A/ A, |7 N/ q" V
// 看门狗和休眠模式试用
3 d2 |3 j, N& |' `! }3 |
+ t/ y0 i3 v, p& P% q7 W- p, W0 a. w# Y: w- [; c: R3 b
#include
5 w6 {( Y0 v' n1 i: z- a% P! J3 X#include) |$ K. m) Y& W) x% t$ `: V
8 E2 x0 n+ ~3 Q" K/ a [// #pragma config statements should precede project file includes.2 Q8 e6 ?' {! ~( Y0 Y, Q
// Use project enums instead of #define for ON and OFF.
5 L2 {: Y# d U. y( z8 m0 u& W( \9 H: j0 F; P9 Q$ _' ?
// CONFIG) n) t8 u9 |6 ~% F" p" Q4 z% `
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator). v4 m+ l" D0 O2 }- x( _* W, \
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable ). B" K" l8 N/ F. f+ _
#pragma config CP = OFF // Code Protection bit (Code protection off)8 S0 V: k- X) o
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)! M- T0 d0 r6 d- L1 b5 O
+ F& x- h# F4 T) }: L* G#define uchar unsigned char
4 S* o7 Y$ W& X' L4 a: F#define uint unsigned int5 s( G" @' c- {4 h1 E
uchar count;+ s( _6 M' }9 @$ B
//uchar GP3_F;
9 E9 ]2 F0 U' N( v& L y* F& ovoid Init()' h+ K/ H7 B1 r, Z+ n
{
- d3 j; }, J2 |% f& u; u$ T9 z TRIS=~0x3F; //GP3输入,其它输出5 b e4 I3 p3 _' {' U5 n8 g
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
# D0 k% d1 o4 R}
" }' w. o3 E( e: ovoid main()
& \( a O T* p4 K7 v{ 5 C9 ^3 ]6 _# h
Init();
( d$ |+ _: M/ h2 q8 B7 C2 l& N* q! H0 o; [0 H
1 [$ ^; f1 w- }$ M5 c. y% A. |: iwhile(1)
( w$ h. z* I$ ?6 V: U$ j, I {& T5 V# c' ~! a8 Y
4 c5 N" d1 z, k6 K
if(nTO==0) //看门狗引起的复位
' g8 h9 ]4 v/ j+ X, N' a' p {: V; b, ~2 m6 T; n! r! _' @
GP2=~GP2;3 b6 ?+ z( d" L* n) f* f: j
} 0 ^2 E8 }0 y2 M) ?# M- {1 W9 W
SLEEP();
3 a) ?' Z) O: [0 Y }8 Z' ?0 M1 w4 x _( e' B
}# c, \3 [$ Q' S' n
* W* D# v" S" E7 o) A& p1 ^. ?. }
7 c6 X' h. s% o9 D; u ^PIC12F508单片机学习之三——按键唤醒
0 z" F. g! z' Q+ P& a# U ' _0 H% |$ X% O; M
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
- T: N) ?8 Y5 h+ `
$ S) W4 n; _) b编译器用的XC8,编译环境IDE用的是MPLAB X IDE。/ ~" b' v2 N' Z2 h5 ?8 S5 f- e; l
# D& O9 q L1 e: ?下载器是PICKIT3.
& @; a* L2 i2 [) @& H: M
$ }) u. v8 a% ~( ^6 X3 c" S//***************************************************" w J b/ f& y; z
// __________________' X5 @8 ^+ {* M8 ]* c( N
// VDD-| 1 8 |-VSS
+ c- `+ c+ t4 O$ g) S/ l C5 ^4 R2 r" Z// GP5-| 2 27 |-GP0/DAT4 k. z" N. w4 Q% o8 `8 W+ k
// GP4-| 3 26 |-GP1/CLK
) V* e$ X1 ?! f9 @! `//GP3/RMCLR--| 4 25 |-GP2$ i4 m& @" I2 o$ ^+ t9 w# t
// |________________|
9 Q4 j1 K6 I! Y( e% J7 `( c// 12F508, l/ X# ]( L+ ]4 P7 S J, _& g
//***************************************************! _; o* X3 o! v0 g9 ^- C( x9 B
9 K4 }, ^( ?7 S. y//看门狗 休眠唤醒
1 h6 c0 [! b% K [& J) a, y) A, {//按键唤醒, d3 c' k8 ~; V9 d/ l8 l
8 v+ k( f3 U( P" e# n#include
1 Y- l/ X% l E# m2 o5 G: L7 p#include9 l5 X( I* j! F$ C! X
5 g* I( I3 R8 A
// #pragma config statements should precede project file includes.
, c8 E5 l; d2 ]// Use project enums instead of #define for ON and OFF.
3 J8 ?6 }" U. J d/ R
K$ Q- S/ E# f1 {2 l9 S/ u. ~! H0 m// CONFIG
2 k) q- E* U3 [3 Q/ ?#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)# z0 |* F' |$ F* a: h
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )* J% v( B8 f4 G. @. @6 F" S0 h
#pragma config CP = OFF // Code Protection bit (Code protection off)
0 ^( M# J1 M- C! x: ?#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)) q4 t" R3 Q! D4 T4 }' G
O, M" ~ H0 i
#define uchar unsigned char7 q' O; C' i5 u/ G; [5 o: I& m
#define uint unsigned int
5 R2 W4 N9 X+ }- p2 Z, {5 v% j#define LED1 GP5" x- N; G! e% }' }: b" m. r
#define LED2 GP4, \" Z5 e2 E& S8 p6 R+ R
#define KEY GP3
; I% X p# m& b6 O& o: Pbit KEY_F;. ]5 [' @( ~$ h4 ]5 j7 h
uchar count;
( c8 D* ~7 m/ e//uchar GP3_F;8 f' D. _- s- A6 L- G
void Init()- _5 N* s' @% Q0 ^7 Q$ C
{
/ o9 I* i3 B) W/ k5 k TRIS=~0x3F; //GP3输入,其它输出
3 u; M" t3 p# p" E Q# w; p // OPTION=0x07; //这个寄存器上电复位均为1
# ~' p! y0 a+ u9 L$ ^ // OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S6 L1 E& r4 }, Z# a/ e/ t; @
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
- T0 d5 F- G' |! C( S; I1 L: J! W // TMR0=0x63; //10ms6 f( ?+ c% W8 L6 Z
}
! S" S3 Z; V1 \2 L7 m+ q+ Kvoid main()
3 B! C: p) g' I1 G: ^1 m{
7 h; z1 Y# _2 a8 T# S: p+ MInit(); 1 w9 N0 A& ~. g7 q* m
while(1) t) l( z" K1 x" @9 [4 B0 G
{
+ y- V- l, F! i2 H& o/ Y3 p if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒9 O3 l" _" g# q
{
8 h( G4 j$ y3 `( m" s0 |; M- ` L LED2=~LED2;6 |) _0 C1 l% @- C5 O
}
+ N# J& o9 z) _2 c( y$ Y( k if(nTO==0) //看门狗引起的复位
, u2 k |- t' s {' @2 ~% a. W( `; F9 w8 d" {
LED1=~LED1;
+ S5 Y! z% ]# {% U G$ y: S0 m }/ L Z0 a. ]; v$ ^- x! ?, t
KEY_F=KEY; //读出休眠前的按键状态。
8 Q1 ]* ? U. P) q4 \' | SLEEP();1 W1 l o" j1 P7 J6 ^5 d, o+ a" p
} |
|