|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器4 u6 _$ x, k# e w1 D% A7 T
5 L( b) i/ M9 T% _; QPIC12F508单片机是没有中断的,定时器只能是查询方式。
, T5 L1 A' t _6 p4 V3 s7 V/ Q' s( |* h9 I$ h
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 s. _* N( `+ s5 ~) G2 Z
' T6 w6 `+ \- M# l8 S- x//***************************************************
9 |: A6 g8 i9 c1 O// __________________" ]- k+ b0 ^8 _/ L! \$ @
// VDD-| 1 8 |-VSS
6 Q. Q3 w% { s; X// GP5-| 2 27 |-GP0/DAT
) L l$ L" I4 p# d% J// GP4-| 3 26 |-GP1/CLK
6 f) B2 k( E- S//GP3/RMCLR--| 4 25 |-GP2
+ W3 T) @# L0 U6 |! Y// |________________|
+ g0 U1 \% [+ d n1 ?, Z2 {- t: w// 12F508
+ F! r/ a9 \$ L4 y% T4 u4 P) x//***************************************************
! x6 ~! w, W% E% V/ i p8 E, G8 L7 D M) q) c" @
//定时器模式试用
& Y$ F5 s- E% U#include
4 d5 t% k2 _! c#include8 c' f# a/ H3 L* n
0 u2 K6 B. E; i; w// #pragma config statements should precede project file includes.+ ]8 g0 ? ^, l4 d! A
// Use project enums instead of #define for ON and OFF.( ~* `6 Y& i2 g3 K
6 Q. H7 o8 ?8 \
// CONFIG5 Y0 c( O7 x8 R6 J8 S3 `( S
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator): K5 \8 r* ?& f# N0 ^
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
8 M& ~- _/ m. j9 [#pragma config CP = OFF // Code Protection bit (Code protection off)1 D# f* J d9 ^2 F: S$ t/ [7 Q
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)5 I6 s+ S) Y1 O& c
8 J/ U; h- b4 |2 ]5 W
#define uchar unsigned char$ j* y6 E. \4 y% o0 l
#define uint unsigned int
. a6 T+ a- r) G, j# h' Iuchar count;
, I1 {- U: ]8 `) i+ c3 x//uchar GP3_F;5 w# W. Q( E0 J* s
void Init()3 S4 z7 @/ A6 }9 I+ F
{
& R- C8 j2 g& p% K8 ?- L TRIS=~0x3F; //GP3输入,其它输出: K( n6 J/ |3 |
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F5 P. M+ R8 R2 i
TMR0=0x63; //10ms x=257-tJ/4F/ u) M# T- B2 ~+ k
}* U8 P2 a4 m' o$ S" H# ?
void main()8 ?$ J7 [- ~: F5 ]# A+ R
{
; W2 `" n K ^3 m7 Z6 ~- B) [Init(); ! f" |7 H* S# O5 \+ }- z& x+ H, S+ Q
while(1)
5 b* q2 S5 {( w' X4 K; I9 `% K" V if(TMR0==0xFF)
7 C, x: D( z2 r! n0 D0 I- z0 D {
; {& l* i6 j, M: C8 q8 C; s TMR0=0x63; //
' m) {% p, V& }# _- W5 H" S. C if(++count==50)//1s
6 f7 ^# w$ O& V, i& R) A3 ~ {
0 m' u+ `! c* z count=0;
4 N, ?6 V! q+ C GP2=~GP2;//LED闪烁" V; c1 O' [/ y+ U3 |. e
}
( M4 w$ Y+ V# o9 [ }- F2 \$ t$ D* H/ |2 `9 j7 t
}
5 r; d0 _) U7 c7 e: d$ {. x8 m- l& G}
! ?( B' S' X- d- @& ~1 [2 |6 @
8 n4 m) l3 J/ L) C2 \' k- J% s
) a7 O b; `4 l! jPIC12F508单片机学习之二——看门狗和休眠模式试用/ H5 A6 U- ]% g' c6 J7 j
{- D+ M% ^8 N% ^9 ?$ K7 I" fPIC12F508单片机是没有中断的,复位情况只能是查询方式。5 x( C$ g8 G: U6 ?0 k, O
8 x! u8 U$ H+ |( j, z编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
2 @* c8 `8 B- a$ F# t( u* `! u9 M/ N7 O# r4 C) a
下载器是PICKIT3.
. U0 D; G; s! b- f0 p& q0 n( A! u; j0 i+ x' U
//***************************************************
# V5 K8 U+ \3 S" y6 W// __________________
3 z% z' K, `9 K& T9 |* b// VDD-| 1 8 |-VSS
0 K/ C) D% A5 R, `// GP5-| 2 27 |-GP0/DAT+ J2 f2 P* h, d0 P5 t: \; J6 K
// GP4-| 3 26 |-GP1/CLK
6 ?( @7 b) x8 Q2 m( k//GP3/RMCLR--| 4 25 |-GP2! u) |1 Z5 A# b, X3 \+ e* @
// |________________|
8 u* K% y0 `* G// 12F5080 b4 r4 {1 s& `( ^* T, _
//***************************************************
2 Y; c; }8 o& Q, V: J$ L3 g" m// 看门狗和休眠模式试用! ?5 S9 V1 U+ f0 n" q
8 \6 x2 _$ r% X1 { L1 w% P3 u4 ]; Z$ T5 \" R* j
#include
: i$ C3 d: Y6 k#include1 t; @% f( X7 V- s, L0 p
; t7 {7 R0 k' S# I+ K// #pragma config statements should precede project file includes.
% @0 {$ ?6 S# t4 a9 s. H, Q4 `$ l// Use project enums instead of #define for ON and OFF.
7 T; Q( a; X7 _1 I3 P) h
/ m, X6 h$ v, X" `// CONFIG! j- H" _' {0 l# z9 s/ x. O
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
) O) w; s2 b* N& o#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
6 ]7 a- l: `0 ~: r8 a6 a#pragma config CP = OFF // Code Protection bit (Code protection off)& E: V7 V Q7 v# \" o+ N6 w
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
?) H! W% g% A! M1 f' X. K* g
3 H% D; K! I7 w- ]3 }4 P#define uchar unsigned char
' E( e6 X5 ` i+ |/ t1 w#define uint unsigned int8 m- e; g8 V1 ^2 W" G
uchar count;' C, T- s: s% z% C. x+ h" v6 H
//uchar GP3_F;4 J: g, u& V1 Y |
void Init(); K2 A+ ^5 K2 A0 w2 O- l+ M5 I
{. X% T8 Y! |, E( A8 @' ]. A1 W
TRIS=~0x3F; //GP3输入,其它输出6 ]+ [1 @5 e- S$ i
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S6 o! D3 m6 f7 ^, U1 M
}7 t5 q; u1 h7 h9 T$ J$ @- j
void main()
' z# r. A, o1 Z+ r3 \{
0 U# Y0 D% z. t$ L! @$ ~Init();
+ \% a3 D; [, J/ f( X( Q& Q" O: w& E7 y0 I7 H" z* [
' c1 @; M( ?) m7 o: Q1 N, dwhile(1)
) e9 v2 n, |, h S- F; c {* l1 Z, ?" B, j, D, L
1 Q4 k" y) n! } if(nTO==0) //看门狗引起的复位
9 ?" f9 K3 v/ h% R8 w: O( z {
, M5 }& W) H: i6 `) G GP2=~GP2;; L4 x9 F4 H8 c# S& ?; ], y- z4 i
} 9 Y! k: _; m( ]+ R w$ f
SLEEP();/ Q- R2 \; i7 e
}
% S$ }+ v8 y% k& z* v" D# K}$ Z6 g; S% C+ e0 a* N( d1 a' ^% D
/ ]1 q* h2 R6 M z
4 ?6 H9 C9 l# u- d# oPIC12F508单片机学习之三——按键唤醒; m0 d" i4 K2 b0 z' o( X; v, [
1 H# \* z8 N7 X( ]# J& v& l
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
$ y9 W. K! j. q! d# l
: G+ _) W- i* ~7 h# w3 o编译器用的XC8,编译环境IDE用的是MPLAB X IDE。+ }7 o1 O! |0 `/ K
3 X! }2 E& x1 U* i) S下载器是PICKIT3.5 B8 S: i; i5 E! E. _# I7 N
+ E- u' r8 f& s9 K& [: @
//***************************************************' I O6 J1 J G5 B5 m/ h
// __________________
6 _+ @3 F6 u0 r) M' w0 O7 y// VDD-| 1 8 |-VSS+ L0 H. t0 L) `; W" \, {- ]* Z
// GP5-| 2 27 |-GP0/DAT
D* d2 [8 z+ p, L// GP4-| 3 26 |-GP1/CLK
7 J v' ~" U* K% H+ S//GP3/RMCLR--| 4 25 |-GP2# C4 q* g9 ?1 r0 K( ^( h* _- R3 Q& `5 R
// |________________|% g! ]9 w' Q6 p, T9 `, X
// 12F5084 Q/ [- O* |6 b% U9 Q# {
//***************************************************5 w1 S K6 o' o/ m
, Z, l h) H' G3 r' Z
//看门狗 休眠唤醒
2 O, b8 {/ T, N9 d; x* X" W//按键唤醒
8 Y( V2 X0 P# g# H( i3 c1 O, L. w1 L
#include
6 }( w! T# c, W/ }1 q( A& p& R4 d" j#include; c2 d& F! X7 i M) U+ B
+ F7 w/ Y* X+ ?1 p. F
// #pragma config statements should precede project file includes.1 H& N. s" H; ]; D4 U% V- e% h' d
// Use project enums instead of #define for ON and OFF.
! S* H. ]! j! d; n4 o. t+ \2 k7 b
// CONFIG4 a+ H6 u& y3 K2 R. v- L3 U+ \) g. y2 P
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)) [) j6 u7 E/ X$ V6 g
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
( Q4 ?' L3 }8 Y2 z) c8 p2 T6 B5 N. ]" U#pragma config CP = OFF // Code Protection bit (Code protection off)
- R. s/ e/ l4 S9 v#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)) p) ?( T0 ?+ X5 p @! a l% c
" R; f4 X4 O6 Q5 w, ^2 r
#define uchar unsigned char" z* B$ ]. Z) v6 D( d
#define uint unsigned int- F7 G/ a1 H6 i7 I. L9 Q( J
#define LED1 GP57 \$ d# t9 W8 B# R4 j9 s0 R/ T1 V
#define LED2 GP4" V9 E# ~' m) I. f/ u6 A
#define KEY GP3
# ]& }$ t3 I3 i9 h: {/ i( M( Q2 kbit KEY_F;0 E& S# F% k2 \8 c
uchar count;. g5 ]. U; x% N! q0 w( v
//uchar GP3_F;
' C r7 }/ N# Yvoid Init()( F) v* u8 X- `" `; t5 y# _/ q m
{1 j: d+ o. k) ?* ]' Z
TRIS=~0x3F; //GP3输入,其它输出+ k. `2 b. h3 I) N) K
// OPTION=0x07; //这个寄存器上电复位均为1
4 @ S+ K" f9 ~/ A // OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
2 u% t7 l! ]3 C* \$ o: o OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S; b- |8 g. s0 g/ h+ F
// TMR0=0x63; //10ms
! b* P. y: J5 Q4 u" ]! j. ^8 `4 p6 D} P# ^4 E" [+ U4 L
void main()% b) ~0 q: S) q8 S1 J6 I
{
8 z A' U& ~4 a3 p( Q* N7 mInit(); $ A* H) }8 F+ D4 }% Y
while(1)1 d3 b* K& }! l0 o+ D
{
- S6 I) V" [" c6 ]# p if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒 [8 g- [: V. ~3 H6 A& m& V
{
+ M3 f0 z* V# ~% v4 V- E' j LED2=~LED2;
& e3 p3 u) d# M3 O' @5 G }
H7 t5 [! y3 D7 ~7 I$ R if(nTO==0) //看门狗引起的复位3 m2 [5 t/ q4 Q* X: ?1 H( C
{/ ^$ K+ b9 S" G" N E# [$ [$ `
LED1=~LED1;
9 k! ~/ H" g0 |) D }
/ ]8 R: e6 s( P ^ KEY_F=KEY; //读出休眠前的按键状态。
+ z5 ^! a4 b( q1 q SLEEP();
3 ]4 y v1 ]2 K9 ^5 J/ e* a, T } |
|