|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器8 f0 a- K2 z1 c' ^( `
! N6 ]6 L( a1 N( f5 u& OPIC12F508单片机是没有中断的,定时器只能是查询方式。 f! z4 Z) H9 X( C& Z, R y
4 T$ ?; D# t% P( w
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
' {% s/ v8 q3 N, \: _- Y; v% Z
* F# x$ M. c Q6 M//***************************************************
8 T" |( p4 W. l) Z7 u' B" h// __________________
$ y% C( {! {# O! v' c// VDD-| 1 8 |-VSS) k$ z5 p' t& w- Z
// GP5-| 2 27 |-GP0/DAT6 N9 o) D0 a8 a/ t, ?
// GP4-| 3 26 |-GP1/CLK
& W D+ ~& G: B: p. Z//GP3/RMCLR--| 4 25 |-GP2
- u h B6 _1 k9 Z% X! S( l0 m// |________________|
, C: x7 c2 f' O! Q- ~: ~// 12F508
0 D8 P; M9 T8 O' d" v//***************************************************
5 R% j0 |1 N5 _! y0 E$ `- ~* z0 a* b# O
//定时器模式试用5 G2 ~, S& Q6 u% S; P: U! f
#include
3 T* e* U$ p0 n3 u4 n- W% G8 y$ |#include4 R% R; N5 o8 b, U
* M0 a8 g) E6 N4 j5 ?: t
// #pragma config statements should precede project file includes.
/ O9 d1 C9 S# `) j7 ~ m: L0 ^// Use project enums instead of #define for ON and OFF.
. P8 i! _+ w) M/ f$ V2 `* J5 {; H- Q1 x$ n+ F. B
// CONFIG
' _$ k8 ^0 Y3 R. ]4 Z#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)" {2 V6 A- {, p$ ^" L
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)+ R; s/ N. F3 `7 J1 X3 `1 H! J
#pragma config CP = OFF // Code Protection bit (Code protection off)
% f7 _2 w2 z1 w) G#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
5 @) ], @% e5 h! W' |. F. [# Y2 H7 i' u7 F7 h
#define uchar unsigned char5 Z. D% _4 C7 n: E3 e
#define uint unsigned int
T0 n5 j- Q. B' L( ?uchar count;
2 h% r( a0 I- h$ |4 j& {" i7 J//uchar GP3_F;
2 {( |# g' m1 ]# _6 [3 t! qvoid Init()
6 z ]9 K, i3 z; ~{1 |: b+ j) q) k/ P( J
TRIS=~0x3F; //GP3输入,其它输出
- q# `+ ~: t& g3 I! m9 U. W4 I OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
8 ?+ O4 B$ k8 Q0 u, q6 x7 g TMR0=0x63; //10ms x=257-tJ/4F ]; E! j$ d n4 D: h
}$ R) Y, |8 Q u) c- F
void main()
3 h3 D8 X) Z) |8 u5 A{
; P# D8 g! X7 v) l5 z( H* t2 g, _, hInit();
% T/ n4 b8 S+ Lwhile(1)
, V/ H f! S" {! ` if(TMR0==0xFF)
) r! T0 _8 k8 U& R3 i {) V, a9 F- p# ?, a! @
TMR0=0x63; //) z" m q j* @9 M O
if(++count==50)//1s
1 R$ A. `2 a L3 Q {
( l, K1 i/ R, d' t. i count=0;
/ u, e0 G+ R% ~0 P GP2=~GP2;//LED闪烁
n2 M f( Q/ t2 ^5 \; i: s }
! A4 }7 w0 b7 q- g+ z }$ M; n. ~7 u* P8 R4 W. X
}
1 |% b' R" R. c. K. @}
/ o: o; K6 P, t! a0 X }' E" @$ O7 D1 L+ [% D
# P; L. I4 I* n6 {9 @PIC12F508单片机学习之二——看门狗和休眠模式试用
6 U0 V% b6 s; F2 \/ m
: O$ B& c# Y: x w ? m0 [PIC12F508单片机是没有中断的,复位情况只能是查询方式。
% Z6 D; i9 J$ b$ M
1 s+ Q3 f. K& C8 `; U编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
5 R+ _. N" J1 h2 J$ Y, c
0 x; H) v3 m1 K7 V: n2 ?4 M下载器是PICKIT3. f' r' ?* R; X6 ?
( g) P1 I. K/ {( C4 J& a
//***************************************************
: l) }$ G' G- A) Z7 t1 x// __________________
! P( B7 K% h& f' t' y6 D// VDD-| 1 8 |-VSS
C% g9 l& c% C, ~3 C// GP5-| 2 27 |-GP0/DAT, }+ z4 G) m' \9 Z
// GP4-| 3 26 |-GP1/CLK$ a+ D) G! z8 t7 F# W' M( H
//GP3/RMCLR--| 4 25 |-GP28 z: f1 i# q2 D8 R
// |________________|, a d6 c* X8 i" ^ a, K
// 12F508
; W9 w0 ^' T8 W//***************************************************
2 C2 ~3 g- {9 h' T+ V8 d- Q// 看门狗和休眠模式试用
& }( O* a/ Y% `+ P3 [
* D0 N; y$ u+ t! R- I4 a( x/ m( }5 a2 e& c
#include; j% D/ F' j5 {4 E' `9 r
#include6 a! c. C! g1 l9 v3 @% o
% N9 _9 C! h& y8 K! B
// #pragma config statements should precede project file includes.
2 C+ ] Z" a- {; F// Use project enums instead of #define for ON and OFF.
. C3 f7 O$ S: {1 I3 T( p+ D2 Z9 {- u2 z4 E# [
// CONFIG
9 `# F. \$ Q p4 W0 n#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
[' ?3 L8 t- d+ u#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable ) W0 F% x9 R% |) ^8 w+ y; }
#pragma config CP = OFF // Code Protection bit (Code protection off)
, y: I: P7 A- Y6 _#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
! L3 l& `% g2 v% S. f( N5 j j) v+ g$ p
#define uchar unsigned char
$ V- u4 y+ w4 U4 n5 J# S1 ?+ `#define uint unsigned int
+ y; |- [# C9 W0 ?# E2 g9 ]uchar count;5 R* L; e; j: c7 h8 T2 P, i- U
//uchar GP3_F;: Z: o9 g8 Y/ I6 K* @
void Init()
6 d' C6 r5 y! U9 e( h' h0 c8 N4 x6 O{
$ z _+ ~. Q+ G% \! p TRIS=~0x3F; //GP3输入,其它输出
9 }3 W6 u" p' Y) R7 ~, f% X4 a* }2 X OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S+ i4 k/ I; L+ I8 V( C& M: L% N
}
( y7 {* V2 ?1 }( ~$ tvoid main()
) p1 O) T" h1 X( i{
" H" d N: D( |2 X, |* JInit();7 _; E. c& {+ {
# I# P, m+ V# R$ H6 C6 I2 p6 x9 X- y# }! e
4 v u0 C* P( _! h) I; w- N
while(1)
% @9 K% Q$ g! T' [+ z+ ~ V r {
+ g9 w& ^3 w' m
) q P* Z3 ^. m, q; f if(nTO==0) //看门狗引起的复位0 k6 r, ? A+ k; L* I# a. L
{: {& H! x# Z' {( h; W) g
GP2=~GP2;, G; D! x# R' W j$ p) r- f" z
} 6 T; z/ p# ~5 @5 G0 H5 p0 C" f7 Z
SLEEP();% }2 N" ]- I+ M
} _7 p4 m2 d h0 {
}$ k& H& Y) N1 F/ N
n7 f. l5 J" H4 D1 c/ H9 d
7 }7 r; Z0 Y- l7 T! x
PIC12F508单片机学习之三——按键唤醒
. Z. @1 y; q2 T" u+ V8 J6 v" h 9 Z: r' J1 c- u4 H
PIC12F508单片机是没有中断的,按键中断只能是查询方式。9 X+ p6 \+ y" O! Y0 r! B- D
" j# R* ]: n* J! m9 y6 G; {& K7 Q9 L' u编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
) {* @. \& t3 Z3 Z% I
& j9 d; j( @4 P0 b0 t下载器是PICKIT3.9 k& _6 p, S! l5 ]" T; z8 ^7 O
1 i* _& E2 y' p4 i. W//***************************************************, n& I$ G: \' O$ U0 e. H
// __________________8 o( s- D4 q) t, r8 [
// VDD-| 1 8 |-VSS c ?. m3 v' v' P! m8 K, d W
// GP5-| 2 27 |-GP0/DAT/ w1 s, I' r2 B |5 [9 @
// GP4-| 3 26 |-GP1/CLK4 T5 K* ~1 ~4 {: Y
//GP3/RMCLR--| 4 25 |-GP2- d& N4 `% g. ^1 C! g0 w- \
// |________________|* `& Y8 X0 W/ [+ E. z, y
// 12F508- ^6 C8 O, ^7 P" A1 |
//***************************************************
3 r& p2 q y7 I, d7 ^) c/ _. T& K
& x: h: B' t) A3 t//看门狗 休眠唤醒% M1 M9 f0 _/ C/ `% B1 X5 L6 {
//按键唤醒
: I0 ]" M! T- b% i6 c% H$ `- V1 b' F
#include
' p: ^$ K$ l% b: S6 n. Q#include4 U/ B8 ]0 c% l9 s- m
/ m6 ]2 F+ M7 U
// #pragma config statements should precede project file includes.( p: D6 @8 p2 Q
// Use project enums instead of #define for ON and OFF.. Q" }; u# Z' }# M
" Z M' x8 b* K% {+ | t// CONFIG; e4 q1 \& e$ C. b5 J9 r
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
: L) y; Y8 G! s% ~3 w2 |8 D#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )- s8 S: o* v% t( C/ b, j- Z/ I
#pragma config CP = OFF // Code Protection bit (Code protection off)- s% p/ G. I6 G7 q9 P. p
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD) M- T0 A, b2 i: X% S4 z% q
6 ~, f2 C- H- M1 X' S9 m#define uchar unsigned char @$ b9 ^( K' }9 w
#define uint unsigned int8 X' ^, g$ m3 |
#define LED1 GP56 o/ p, A$ C6 G# l
#define LED2 GP4
( {1 |/ t7 N+ U. [7 ?* h- P- j- h#define KEY GP3, R+ N$ L* L9 K& L7 ?: a/ C
bit KEY_F;
' A0 w3 M6 S1 t9 Ruchar count;, ~& K$ {& g4 I/ i" j5 l
//uchar GP3_F;
4 L' g2 R, F" I6 z, ]8 W3 vvoid Init()
% g3 T. [% E8 L( |+ V$ t{
/ I" W# k! q5 A7 q, z TRIS=~0x3F; //GP3输入,其它输出0 R% `3 A* m) W' t' ?
// OPTION=0x07; //这个寄存器上电复位均为1
7 Z$ n7 p A8 M1 G8 {' l) P // OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S: \' R- q: u* g% U# J& d
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
: \0 t# h, M1 `; v // TMR0=0x63; //10ms! | O9 I& Z+ ?& R0 K! H
}
5 P, L! N3 i3 w% a, ?3 G, G) `void main()% L. s0 s/ ]6 L2 W. s% T
{ 5 \" `. K& O& V$ m7 U- v5 ~
Init();
6 ]' h! d2 I% lwhile(1)
3 ^/ M6 K& |) C' ?' k* d1 T) E9 Z6 _6 d{) ], `% _! j7 Z7 P6 Q
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
, v- C/ B( F/ z {
; v: S! ~+ R; C: z8 X LED2=~LED2;
& Y, Y9 `, g( U- t& R }! N3 C% D2 t8 P* |
if(nTO==0) //看门狗引起的复位: A1 L( V \- Z3 `9 s
{% ~- d9 j# F& q9 r# [
LED1=~LED1;/ _# Y' X7 s; j, M2 J" ~$ R
}# s3 Q! [% K: ?) L5 `) C0 ^ n
KEY_F=KEY; //读出休眠前的按键状态。; o! z; K+ \7 d: t5 |6 B
SLEEP();3 Z- r6 Q4 {: s8 m3 m
} |
|