| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
PIC12F508单片机学习之一——定时器" ~" x  q& f) ^9 b4 T/ o 
 
5 M5 f0 G. ]" a- v# n) gPIC12F508单片机是没有中断的,定时器只能是查询方式。 
- P5 L; S8 W; M+ a" |0 N2 y- h& Y 
% E$ h, z! @4 l  }0 X( ~- b编译器用的XC8,编译环境IDE用的是MPLAB X IDE。 
. u  H* }4 [- h. o# G. e# R' z" [6 g 
//*************************************************** 
, {* o9 U( g: a1 I  l/ ^//             __________________* A' P1 N* t" \1 W4 S 
//             VDD-| 1            8 |-VSS) Z7 ^& C$ q# J# ~9 K  j4 O: c 
//             GP5-| 2           27 |-GP0/DAT 
$ N# X- |) d+ k) ]/ P; K//             GP4-| 3           26 |-GP1/CLK& i/ N% T5 L6 i& i+ G; Z 
//GP3/RMCLR--| 4           25 |-GP2 
- Q+ [# B5 n' h- ^, R2 V% _//             |________________| 
( o# r) M2 L/ w, I9 n, x//               12F508 
  O4 v9 r* i7 M  ?//*************************************************** 
+ a. X* S8 z2 {& \+ S6 g: Z 
% k. q& x- G0 q) K" R/ o: o//定时器模式试用 
2 ^/ R$ y- |4 O% p#include$ ~) N; r0 Y# B 
#include 
. E8 R2 d7 }  X! k) x5 s$ W 
( n) ~: A: Z; f1 m+ r$ U// #pragma config statements should precede project file includes. 
& Z# h  |0 I, l0 U3 ?// Use project enums instead of #define for ON and OFF.% h, H" \2 u0 p$ n 
 
' x* ]. ]0 n7 G8 c3 D// CONFIG6 q( @7 ~; V# H! D 
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)8 Y4 E6 l# ]/ y, g) ^' e# y 
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled) 
/ X! z: a. `+ S; |1 h#pragma config CP = OFF         // Code Protection bit (Code protection off) 
# c# T3 j% o. P$ k#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD) 
' ~7 h( l: V/ x 
% J% ^5 q5 J; \#define uchar unsigned char 
) M5 O; x0 @6 B2 V$ P  P#define uint unsigned int2 H: c' J7 G# E$ B! d0 R 
uchar  count; 
+ N0 @4 P- O( `( l. c//uchar  GP3_F; 
- F( N# C4 q" i& s+ d6 U( l( }4 @void Init() 
$ U4 h' {, q0 B( L! R( G{ 
4 \8 L3 M3 j6 ~- C4 ]       TRIS=~0x3F;  //GP3输入,其它输出 
* S2 C' S; U. F8 `; M" N& F% T     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F 
6 \, d2 d* P/ |) M/ d# D6 K) j     TMR0=0x63;   //10ms x=257-tJ/4F 
2 Z# X) T# X3 z. B' M: L# O1 E}( J2 `/ c6 r# D, M  S& K5 T 
void  main() 
) Z- ?) {, ^& b" ]$ Z{   
; k6 b3 C: v' q0 B! S, NInit();  , D" N6 G: C$ N0 L$ @1 \ 
while(1) 
) t8 E6 n1 p0 J& G+ p      if(TMR0==0xFF) 
* y. f! I2 G! H0 l$ q      { 
3 E# J+ z  ?+ l0 o       TMR0=0x63;   // 
: n" c3 y' Q5 l- y       if(++count==50)//1s: `, H& Z6 Z0 a+ ~( h9 B9 Y! v 
        {& s8 q* w4 L, b7 C7 G 
         count=0;! B' W! i8 E" I+ n0 G2 Z' L! T 
         GP2=~GP2;//LED闪烁 
! r( j/ G2 Q3 o- }9 R: }5 j        }! J) U; K1 |# @1 v0 i5 H- t0 H* ^ 
       }* e& ^" Q& x/ ~( | 
    } 
7 O5 ^5 G/ Y8 E& x, K}  
) o* t* J5 l9 X* o/ f) ] 
# a/ ~0 l$ _9 Z: s. ]; M5 ~1 t; w 
PIC12F508单片机学习之二——看门狗和休眠模式试用$ d/ [8 D5 [+ h& @7 I' S- o3 ^ 
5 v  y! p) N" O5 F" n8 m  a8 @ 
PIC12F508单片机是没有中断的,复位情况只能是查询方式。 
* K7 K( J& a4 t  T! n; W5 T 
) R4 j4 n; Q  t9 Y+ _编译器用的XC8,编译环境IDE用的是MPLAB X IDE。; N) L. J: W( ~3 L/ h& {2 Q0 J. ^ 
 
1 ?3 p# e% {5 a% B3 p, ~: n4 K下载器是PICKIT3." M$ A7 @3 Q: Y% m8 g& B, R" R5 \ 
 
3 k2 B8 N  y" d/ e1 ]//***************************************************3 \+ n4 v2 P, o" ~' o" _0 v$ K" G 
//           __________________& d  o, L. L5 B) f: Z. q3 b 
//       VDD-| 1            8 |-VSS 
0 v) N( z* a! W+ Z" ^( C" {6 z  m//       GP5-| 2           27 |-GP0/DAT; e" r4 p' |+ \7 @ 
//       GP4-| 3           26 |-GP1/CLK 
: {& R6 x1 b* T3 w//GP3/RMCLR--| 4           25 |-GP2, c' S; y( v5 h( ] 
//           |________________| 
, S) p# @( |- S( z5 U1 M//               12F508- }# c% g! T! M5 a5 s+ A! q 
//*************************************************** 
3 j* W( T( H9 v' h3 E  Z! l: }// 看门狗和休眠模式试用7 I" B! C0 R5 f3 U3 g5 U/ K3 t# i' x 
 
" R# n) t/ L9 Z' b( \* W5 ]' s 
/ J' v; @1 Q" z; E# ~0 R3 _% t#include9 @0 z' i6 O' T6 e1 O 
#include 
; q* y9 A% E  l) H" a! `* f4 w% K# k& B5 S: f8 V  [ 
// #pragma config statements should precede project file includes. 
, B' z, z+ z! X2 ]// Use project enums instead of #define for ON and OFF., k6 s4 y5 K. }0 _ 
 
& [3 \$ U& v/ n9 S// CONFIG 
( v  ^6 Y. a5 `0 j% J) H. p8 |#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)5 x1 D) q8 @* m# }7 a$ x/ a" i( } 
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable ) 
' q" A; A3 L: v3 ^) G  C% `#pragma config CP = OFF         // Code Protection bit (Code protection off)' X( W7 o! l' ~+ J, b 
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD) 
9 }# ?) h$ z% u1 A( F4 [; w5 ~! Q! g0 B) ^$ | 
#define uchar unsigned char 
' [4 t) f7 ~* I2 R4 Q4 Z3 K#define uint unsigned int 
; U* N' n: d& Tuchar  count;1 B# _* ^/ _/ a. M1 ~. b0 C 
//uchar  GP3_F; 
$ _" E1 w5 ]  N2 v7 s; kvoid Init()4 d7 h* k+ x0 W' D9 [ 
{0 q: _3 @& W' X6 S. \+ g; R, A 
    TRIS=~0x3F;  //GP3输入,其它输出 
) E8 R0 u" N2 G& V! t' ^    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S 
; d  B7 j1 S4 T8 o} 
4 O0 d- _% R+ s8 D! h% [* zvoid  main() 
% k! H/ F, K1 {; S) p7 @# q{   
5 S* v. h3 ~8 [, l7 wInit();+ G8 ^9 f5 _  V3 | 
& t6 G7 @; L! G9 X5 X) {. t 
    
' I  J5 B0 A6 V2 _& j) Y7 j) ewhile(1)" b9 i/ O  g! w7 { 
     {( _1 `# U- S/ q* m 
. _! \! f6 I! B  Z# m) \ 
    if(nTO==0)      //看门狗引起的复位 
$ W# ?" O8 I5 ~! P) L) Y& z5 G/ ?   { 
  k9 V; X7 ]+ k% F3 r      GP2=~GP2;6 D( N, v- f, x% i! K9 C' | 
   }     
& B4 D/ q9 o& E! i- {( _8 W$ p         SLEEP();1 S4 {7 [6 X5 t: r& d: S 
    }! J" I/ ?' @1 D3 I/ R 
} 
& U$ e/ O; l; l/ c9 w0 _5 V4 S2 Y; u& C+ _ 
 
8 R* ^/ A! ^7 I7 xPIC12F508单片机学习之三——按键唤醒 
  [+ O& t% O6 U9 M% y  8 k9 }: I5 c3 L- K' V0 n 
PIC12F508单片机是没有中断的,按键中断只能是查询方式。8 {. Q5 v4 r- {6 |( w 
 
" ^+ k9 M, U& `0 Y3 |编译器用的XC8,编译环境IDE用的是MPLAB X IDE。" v& n9 f; P# a- m0 H5 z 
 
  s/ x$ V+ \, w( C3 B8 Z下载器是PICKIT3. 
$ }' k3 K* q+ x& p/ N( ~- K3 J& g0 y0 J) S, P- i 
//***************************************************/ b7 ^5 C! r1 u, A 
//           __________________+ |+ u( m( ]" j) J, x' g: t 
//       VDD-| 1            8 |-VSS 
6 w* w' ?3 @7 s( A& W3 g9 j//       GP5-| 2           27 |-GP0/DAT! y6 B4 D6 C( N7 D' S; | 
//       GP4-| 3           26 |-GP1/CLK* }' p+ T% t6 t4 G 
//GP3/RMCLR--| 4           25 |-GP2 
5 B0 C: Z, q1 M1 H//           |________________|( @! H, u, P- E# _& H! Z 
//               12F508' c, x( A- W2 [5 V 
//***************************************************2 k% j& S/ I: r1 n* n' W 
% t# B- X5 L/ Y, F/ m 
//看门狗 休眠唤醒( u; t2 h/ Q- f0 R7 Z* p 
//按键唤醒! J4 m4 m3 @+ b 
) G" P( r6 p7 a  R" g, ^ 
#include3 w0 L( K; H  R! r! p$ w 
#include 
" u0 h3 O2 j& c, A/ I 
/ {  `0 a# y/ b4 R- M( }// #pragma config statements should precede project file includes. 
, P1 V3 q& y4 Q/ R// Use project enums instead of #define for ON and OFF. 
3 K; p; k- Z  D4 \. h5 j 
. S4 }/ h: p' r9 K// CONFIG 
/ T( w& ]  u# a' f# h5 M9 ~#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator), `# c) c/ c6 ? 
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )7 k8 ~4 v, |( n3 j6 a  j% e 
#pragma config CP = OFF         // Code Protection bit (Code protection off) 
/ j) I: P6 C7 o9 h. `; w7 \#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD) 
5 v0 I' ?: T' p( K( r, R 
" a) @' l1 I$ B7 s+ \, t; V#define uchar unsigned char 
& {4 k! U1 y, @$ i6 Y# o1 D#define uint unsigned int8 l6 x; G+ |5 q* A" Y8 j. s. w- Y 
#define LED1 GP5 
% }! \: f  v& H2 h#define LED2 GP4 
& S/ b7 H; f5 D: @#define KEY  GP34 a& j  s9 i$ e4 H4 r- F 
bit   KEY_F; 
% j- ?, s2 j7 C+ cuchar  count;( d: {9 r2 F; v! F( [( m 
//uchar  GP3_F; 
( s. D, `& i) A2 R. L) evoid Init() 
: }  _' X$ e1 R! Q: I8 ~7 X6 l  H2 a{ 
, X9 X' r  F1 x   TRIS=~0x3F;  //GP3输入,其它输出 
2 G# V" P- e# l# G0 S" x/ L   // OPTION=0x07; //这个寄存器上电复位均为10 X3 c  }, [4 T0 t 
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S# Y4 h# ^" r8 Q$ @1 D0 _& f6 I$ u 
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S 
9 C2 _  Z1 j" v6 Z2 e9 i1 w7 D+ }9 e  // TMR0=0x63;   //10ms) _3 J0 g4 m8 | 
} 
* O3 L) B" U) x- uvoid  main() 
, w" W2 N0 n( V" m. J{   
5 z% j7 J4 l. b6 U* U+ n6 B4 HInit();   ) Z' I7 A# ?; F( B3 }9 ~ 
while(1)3 D+ H! S9 _* Y) X( w! i9 B. y 
{ 
% Y" o8 L; n- k9 H1 c    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒7 t# n% @6 Y0 G7 c 
   { 
" Y, r- G( G! z" F, N+ @     LED2=~LED2;' e1 @6 b$ [( f6 P; Q9 S0 R 
   }' l  M  t3 A! C; ]! T* w. v 
    if(nTO==0)      //看门狗引起的复位 
" O( J6 _. m& `' z5 d8 r) c' Q* g   {$ B! U+ P; |' ^5 J4 v' a. `. i 
      LED1=~LED1; 
- t5 \! X  M- L7 w) Y   }. [$ y( O6 @- E5 R 
         KEY_F=KEY;   //读出休眠前的按键状态。' n# j: k4 d* \* g 
         SLEEP();0 x! X, [( A1 [. Z8 V' }% O+ s 
    } |   
 
 
 
 |