|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器: r) `; |0 u A% G- q/ c
: I' x7 D, T$ F: R5 E* S3 NPIC12F508单片机是没有中断的,定时器只能是查询方式。
; e% s1 K" L7 \1 N5 ~6 q( {+ [
/ X3 j, m' P4 B3 ` s5 c5 I4 o编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 n, ]- {# Y- V1 M2 y2 z
/ ? H& q( R# E! h# F- X c C; Y L! u2 G
//***************************************************
* P. s3 u, i0 I' d. P// __________________
" l: `6 b! u9 U. o; I% s4 H// VDD-| 1 8 |-VSS% c, A: W. b( O8 l- X
// GP5-| 2 27 |-GP0/DAT% A, ]0 ` S4 Z) I" _0 @( d9 f& |
// GP4-| 3 26 |-GP1/CLK. v4 h1 w+ `, |4 {5 T8 l
//GP3/RMCLR--| 4 25 |-GP2
% d9 l$ N: w$ o5 \5 Z1 _5 [5 K// |________________|. J7 T" V9 l; B6 M4 {' W( I
// 12F508
! N5 p. A* ~$ q//***************************************************
4 m5 }) ~/ c% O; A0 D% D# G
# Z* Y$ H5 B4 k9 g8 F//定时器模式试用. M a$ x" @/ ?4 J! i5 |$ {
#include1 `1 ]7 M: s* h; R; w3 @
#include
% L1 S. N1 ]; v; N0 b/ u
: I& C3 Y6 Y' u" S8 [+ r& I6 D7 u// #pragma config statements should precede project file includes.
0 N W3 A. J' o. _' Q( t// Use project enums instead of #define for ON and OFF.
/ b/ n. ]' Q a5 o, \3 H7 R4 j/ @3 Y. h
// CONFIG
2 h o8 f4 M5 ^! C#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator) Q. B( z' f3 V5 ?
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)9 V, Q$ j. J' I+ @9 B9 t
#pragma config CP = OFF // Code Protection bit (Code protection off)
6 m" r2 \- W9 d( J& I' U$ _#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)/ Q: ^8 G. e# a+ H& B; h5 q) O. ]9 u
0 Y! L: o3 y7 m& Z#define uchar unsigned char
$ U8 i% \# c5 Y: ^#define uint unsigned int
; V4 q: z: _7 ]3 ]* g( juchar count;
! z4 Q1 z' g' [; z0 @% T//uchar GP3_F;
, e N- l' M+ }" z4 w3 {+ vvoid Init()$ K9 M1 b3 i9 }; W+ P8 A
{
7 ^$ `6 l1 Z- M. R6 i: h9 C% h9 [ TRIS=~0x3F; //GP3输入,其它输出
8 m, E+ n7 _ j; w OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
; F& S+ ~9 [4 J J+ ^. `: H& O# i TMR0=0x63; //10ms x=257-tJ/4F; I! A0 s/ B( _$ B7 H3 P' Q
}3 x: s; q) n+ h4 P7 \6 y
void main()
4 V" z# W, D: D/ r, m. y% A{ # D5 I- i- ?3 d
Init(); 1 e/ g( N: o- k8 c8 H3 J
while(1)2 M9 n7 `/ p, T5 W$ l& @
if(TMR0==0xFF)
) A$ A c8 A* m9 S {% k3 X8 i+ @: W6 r6 z1 \6 K1 O
TMR0=0x63; //% Y* r% Z o- U; l8 E
if(++count==50)//1s
# |* C! Q6 \0 k g5 t {; _" F( @' D5 }% o9 ]
count=0;- _' w, N0 Y8 e3 c) E& g
GP2=~GP2;//LED闪烁 {; {* ?1 {! b3 j9 C) P. Q
}7 W& Y- @! [( [/ _3 B; [5 z3 t6 q/ @
}! F- m% N' G3 o% Y' X: X3 X6 t) s- f
} j+ N+ I3 u5 j% u
}
! i( _, r' F: P/ F9 c# x
8 U4 o @" j) m" m G
7 Z3 o+ J& O, J7 ?! T8 \& A' DPIC12F508单片机学习之二——看门狗和休眠模式试用7 b* I( C+ p5 s. C8 R3 G0 b% A2 }
% S6 j5 z1 F( i e
PIC12F508单片机是没有中断的,复位情况只能是查询方式。' J) [( A* n4 c& M. d) k- v
. K7 j! S/ D& a& W& ^编译器用的XC8,编译环境IDE用的是MPLAB X IDE。" g4 c9 m2 [8 X% P3 Z( t8 Q
# Q+ w& S. G: s2 }下载器是PICKIT3.
; j$ W! n6 P" A( x0 c) {% d
- A) U3 N2 x% c2 F' w% Z) U h//***************************************************
7 b% V% T2 s4 F1 W+ h: J8 s// __________________5 s) M* X6 I/ n/ w8 o
// VDD-| 1 8 |-VSS
7 V5 H8 _9 J' ~+ a. @7 w5 I// GP5-| 2 27 |-GP0/DAT1 G. F7 s" d4 ?
// GP4-| 3 26 |-GP1/CLK+ e' @3 b4 ^+ G: C, K
//GP3/RMCLR--| 4 25 |-GP2
# z; F7 P- o: J4 O* K) j9 J" C7 \( B// |________________|. z4 b0 \1 a8 X
// 12F508
$ N$ `8 N( d V, J7 m: h* a: h$ M# r//***************************************************
6 [7 O! M y4 C1 F' d0 ~6 s// 看门狗和休眠模式试用
1 ~7 }* ]7 X: z$ Z2 d# R/ ] z. x/ i; u4 x1 L( g5 o; N
* O5 u0 x6 A- x% T+ N. M
#include
. g- r7 B$ Z5 \* |8 b#include
* e `" U, U, _8 r q: e! h
$ m) o( u1 J* v% l// #pragma config statements should precede project file includes.
' S- C# {, b7 L* W @3 w5 n& z// Use project enums instead of #define for ON and OFF.
( r# n$ a/ w6 A6 J! }4 m2 x, \ l6 Y9 j
// CONFIG1 |; K+ A- w- D! z: R. y6 T
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
+ k: K) e6 m2 z- B" |; a' [+ m#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
: r- j- b0 P7 c p2 E: t+ S/ p#pragma config CP = OFF // Code Protection bit (Code protection off)3 T# X' D( W3 Q
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)' r/ u2 {4 |' b5 n4 Y. _ _
! J% G% |$ ?# \
#define uchar unsigned char6 K- t, `9 S" ?' i+ K7 v& Z
#define uint unsigned int
( X5 c* k6 a2 `uchar count;
/ M" O" C- L6 ~* \. T" l( q' ^0 x5 F( M" E//uchar GP3_F;: H* b- j; B8 M" l6 b
void Init()
* o: P! K9 a' ~& H( B* ]) J* M{: M2 n( K3 M# S5 H3 j& u" C, |
TRIS=~0x3F; //GP3输入,其它输出/ {" l/ m) [6 ?) `
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S1 g! E: D: t/ O
}
4 I5 b4 t3 T5 R- @' o4 zvoid main()
2 [8 n8 _# L0 O0 P{
) B& P' B/ I3 w3 C$ EInit();
* H5 X, O$ j& H4 d) a! M
2 E+ h8 S- f6 B, e( E; Z2 Y. s) ~ & g: B$ @" P2 ^% \) i, Z- H
while(1) |, s% G4 K* F/ ~% n2 h
{
2 O7 D& ^5 E0 o: _1 |$ r3 v
# Y; ^+ p1 x8 S! V+ o% G+ N if(nTO==0) //看门狗引起的复位
" a) s7 ^. H; B6 G/ [& w( q/ m {
# L3 R) m8 E! v7 \' d GP2=~GP2;
/ l/ B+ D8 o+ T9 `( J8 y }
5 q' O3 K( R- ?" m6 Y SLEEP();+ U# p6 u* n) L7 Q
}( S- V# Q' Q( \6 h# Y
}* {8 n k0 }8 e! \# R& h3 m
6 K4 z6 J1 s3 h9 }! ~3 X
8 y8 ~: o- h2 F. a! w; U ]PIC12F508单片机学习之三——按键唤醒
" |2 S, j& B6 i( @( f' }6 ~# ] " }1 W8 d3 _ z' B+ s) r
PIC12F508单片机是没有中断的,按键中断只能是查询方式。 [2 l" o, X( E' H$ h8 ?
, J! \5 B: |. l; q/ W4 f( ?2 N
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。4 V5 N) E0 i0 b6 o" K8 y$ B- B5 o f; f
9 q( m; T2 F- N/ K! @下载器是PICKIT3.5 D5 J8 W% T5 X- B- S0 Z1 m N
/ \, X9 T+ n7 @3 b6 ]9 E. ^//***************************************************
6 s- v6 n# T7 _* ~' a, c7 r// __________________% i( d9 B9 d" Z3 ]9 U8 L( t% J
// VDD-| 1 8 |-VSS
: P! ]; _% {$ N: w// GP5-| 2 27 |-GP0/DAT* H+ _: q; E8 T D( P
// GP4-| 3 26 |-GP1/CLK. S8 X& x$ F- N- Q! z0 y
//GP3/RMCLR--| 4 25 |-GP26 s1 T" d4 |0 O+ H' z q
// |________________|' h3 P& Y3 x' c
// 12F508
* S' \% H( s; h, u7 M//***************************************************
$ g$ B5 U% M& D' V! s& c
8 v1 ~/ @* V/ |5 V: c. Y) n2 O; y& ^//看门狗 休眠唤醒
5 {! u8 l7 \) o//按键唤醒
5 ^: i8 k* z1 Q7 V
' t% e) |5 R% m- m9 ~ A/ I7 a8 b#include$ A% [/ O3 \# u
#include
5 [+ R. A' t" V8 }
7 r- Z3 v* {; I: L* @" R( h// #pragma config statements should precede project file includes.7 {* ?1 t) _8 j
// Use project enums instead of #define for ON and OFF.% B9 e9 x# Q7 ^
8 h+ I+ T2 `4 ?
// CONFIG
; {( N, A3 k) @$ |- [0 D0 G& g#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)/ ^9 q! M5 H! H0 l; P
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
0 H2 m( v% C2 i J6 o" e! b#pragma config CP = OFF // Code Protection bit (Code protection off): D4 d5 [' a: K
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)9 _* B) ? X8 k% S( c
m+ b0 V4 n# H) J0 _- u, H+ E
#define uchar unsigned char
4 E+ M- q' a# P+ H; p2 I, T#define uint unsigned int
, C5 d/ W, i6 @4 c2 P+ H#define LED1 GP5, R, i& X' O! h# |( Q
#define LED2 GP4
' o6 y+ M7 }$ X8 C#define KEY GP3
& Z1 z1 u0 ^/ R* sbit KEY_F;) z M% u1 K' R7 F
uchar count;4 [! ~9 W% z% c) c& Q' ] l
//uchar GP3_F;
) b- g5 k& [8 b: d2 @void Init()
* [/ m4 Y6 o% t# ]9 `{5 ?3 U% Y7 ?# E3 \
TRIS=~0x3F; //GP3输入,其它输出: m9 l, G! _" V( \3 R
// OPTION=0x07; //这个寄存器上电复位均为1
+ ?. e* T; [/ ]6 ~ // OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S- N2 x! L0 O; i7 i4 Z! I0 |- Y
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S/ d4 r: J( z7 ?7 Q+ a$ G6 O
// TMR0=0x63; //10ms
. q8 v+ r" n* @}, L- a7 n6 g6 i: k
void main()
$ R7 x" v$ ~4 l6 P{ ) s5 {$ Q. X% v" Y# B# |
Init(); 1 U; m9 i+ z% R. I. F/ ?
while(1)( _3 } m& q/ ]7 q; |; |
{
" w+ ~; o5 A+ U, u if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
; {. h+ x6 b: |# J: A. _3 L {$ i8 m3 Q- j* G2 a' h/ F
LED2=~LED2;
* M2 S8 ~9 t0 Y y4 @& d7 J5 Q' k }
# h8 k/ \! _3 [! J1 O0 _ if(nTO==0) //看门狗引起的复位
; }9 J9 ]4 T4 r9 g6 h7 b/ A0 ^' w( A {
7 A# x* n1 S6 ?) A$ u# ?. _ LED1=~LED1;! K+ h$ N+ ?0 N* \+ }
}9 ~6 \5 [' Z- D) l0 V. F! ?
KEY_F=KEY; //读出休眠前的按键状态。
5 F) N6 e2 X" Y8 V# N% W6 v SLEEP();
, G# W% x) K0 X- K- Q e } |
|