|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器$ r' ?$ k( j) r
! R7 i( g) [& s: y3 _ ~: _5 m
PIC12F508单片机是没有中断的,定时器只能是查询方式。
: `( f s# g" {# A7 G8 l8 o% W) o* P$ V+ y8 M( x) `
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
# l8 d5 g4 ~8 `. S9 W( d
4 x% p& m- D! l) A& s: p/ J8 F; t//***************************************************. i+ B9 n, d4 W
// __________________
# I; o$ E7 u# Z# ]% M b// VDD-| 1 8 |-VSS
8 v* S, j& j% {2 [// GP5-| 2 27 |-GP0/DAT$ F7 T* v! `' p* }# a
// GP4-| 3 26 |-GP1/CLK. z1 b& B& K0 C, f. q) ?4 n
//GP3/RMCLR--| 4 25 |-GP2
( ^3 k! `( ` ~8 z// |________________|2 `, E$ y0 o8 T' y- m
// 12F508
5 N' y2 j; q) R2 R1 O2 Y//***************************************************
6 E) F4 p3 \& _ L
6 e; b' R2 T6 ^$ W//定时器模式试用
; R' v8 W) g& L/ o* A* L#include4 X0 ]" e5 i3 B( n( g! d0 y
#include
4 ~: i/ j* b/ J; [, t7 S3 }+ N" F0 X/ r$ u6 b2 O$ C6 S: z. u
// #pragma config statements should precede project file includes.. a! p e) t3 N# ?+ g7 F7 h
// Use project enums instead of #define for ON and OFF.
' b$ {4 W6 D+ B* w2 w; Q7 U# X4 E' i- H
// CONFIG
! ~5 v4 z! n& E j3 |#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
/ z4 v7 C! D9 `* i) w#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)3 M( d3 ?& Y5 e) [
#pragma config CP = OFF // Code Protection bit (Code protection off)
1 e) D9 V& ?4 h# l#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)4 _. K- o, W1 ?; O
( J. Y7 Y- G" d7 O$ E
#define uchar unsigned char
3 X: f# x( t) S$ {/ n: N$ t#define uint unsigned int
3 g) G' y4 P/ O# N8 I( s" m# Muchar count;
, Y) F% o5 y* B//uchar GP3_F;
9 ]% y4 G- ^9 n; O! p6 s# T2 t7 L/ ?void Init()2 v/ W+ m5 D$ [: ~; S
{' r6 k1 w) ~* K- {4 ~3 ?( X* D
TRIS=~0x3F; //GP3输入,其它输出
$ \5 _7 f4 K8 L% J+ ? OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
5 h! M# U* {' M; D+ T* @3 Q: H TMR0=0x63; //10ms x=257-tJ/4F2 _: r |! u2 I9 |7 T4 Q
}
# O3 u1 |1 i9 n9 u* k* E [; Rvoid main()
& q: v# J* e5 H, ]' N{ , B$ N! s5 Q+ \' v: y: J
Init();
% U; f1 `' T, S9 c% ]while(1)7 c8 c6 h: b: I- I. O# d# H* }% L
if(TMR0==0xFF)
3 q" a- h1 s4 I f" |1 T% i& T/ [ {3 n) L+ i2 F" H) f6 Q
TMR0=0x63; //
# `1 |+ K" U1 o A! Q if(++count==50)//1s+ [; d( o$ d& l8 B
{
3 l" r& D' N& h9 B1 C' \! ~! Q$ ? count=0;
6 T; G/ D( p9 R) f& ` GP2=~GP2;//LED闪烁0 |& Q9 t. z4 f# e1 X
}4 W6 f; Y5 `* p8 M
}2 l3 s V0 y3 ~4 a/ L
}8 O( |- ` r, D: K5 G
}
( f$ L% I5 M- Z5 b& G# ?5 A9 _! l
- X2 }$ D1 z* c0 ?! b( oPIC12F508单片机学习之二——看门狗和休眠模式试用
. u4 K. T' }6 z: v- j- y( c& \8 e9 F$ m( D
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
5 P* _# \6 ^0 N
1 W) p9 f( M* Y+ ?7 H% ?9 N编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
* G/ A8 q" H1 z" `1 L
/ w1 C! p! u& _/ }) Q下载器是PICKIT3.
' Y3 I/ P& C" g9 s; c6 ^( N( `# j% j, u0 S
//***************************************************
: J* a7 t) ~5 ]5 l$ \// __________________, A' w. ` A2 a- P1 }
// VDD-| 1 8 |-VSS
) v4 b: W* R$ M3 F// GP5-| 2 27 |-GP0/DAT
* i9 @; O% o! P% W3 G// GP4-| 3 26 |-GP1/CLK7 j3 E6 P- S O2 W- H5 n" D8 p
//GP3/RMCLR--| 4 25 |-GP2
3 v1 m% u n) W" i5 P) |// |________________|
( K) |2 ~, w) ?// 12F5083 M8 \3 v, M/ n9 M$ X# j5 ]
//***************************************************
0 v- L6 g1 W4 G1 V& W// 看门狗和休眠模式试用& ?. ^$ u7 K/ e3 Z6 M
( Y @* M& I. b
, Y2 N7 M3 f7 e5 H$ ~#include- Q* ]$ ?) } z6 S
#include
' M; L- {$ H. `: ^& S/ e
* U" h1 D" M2 V6 q) |' W' w// #pragma config statements should precede project file includes.
6 l( q" r5 ?( p// Use project enums instead of #define for ON and OFF.7 k$ `7 K0 n: W, C8 ?' P7 g4 F
8 n) j! D: c0 U9 Z$ w- [- V
// CONFIG( y' C, Q8 x9 z
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
5 ]2 \' A6 t( n% j/ q0 P#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )1 e) D. w0 Z* E' ]% k8 Z7 R7 w2 h
#pragma config CP = OFF // Code Protection bit (Code protection off)3 \( v ]5 T, L8 c/ s) b* k
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)# F6 E& X, Q% S5 q/ L$ S% V$ A9 B
$ b( g; i& k* E( D9 I4 m. R
#define uchar unsigned char! V6 h0 U ~& Q3 S. U
#define uint unsigned int
0 N% X; g( D- z! K& Uuchar count;
- ]5 V$ ]# ^% @7 h: _4 l//uchar GP3_F;7 \* \6 D8 q: F/ J- e
void Init()* c0 N' C4 a+ C/ G8 q* y* `1 u+ Y
{
, E7 \* S6 w5 G& H" d" _ TRIS=~0x3F; //GP3输入,其它输出/ q8 V3 \5 k# I; j6 k1 p# B ?
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
. p, b5 p( {. z/ H; N# o: `" u}
1 z$ t* Z/ A' k8 A# b3 E) x! H$ evoid main()" J' E" H% v) P# G+ f$ J
{
1 I$ d2 w r' w' v7 S; E2 NInit();
0 B) h; P% X) V8 u+ c+ h7 `& U. b: f0 j' K7 Z6 C1 {. w: z/ \
" e) \' o. S2 ~/ t; v
while(1)
# a$ D1 Y+ t. J! c: j {
- |% m: _ E v
3 E# ]0 {! m# e; j/ m# h if(nTO==0) //看门狗引起的复位$ L9 P- e! M" D" n' A0 \& I7 W
{5 u, N- N5 h8 @+ s' H3 |. _- m
GP2=~GP2;- m+ n; t. X/ `1 z4 T. T
}
% }* v8 g& j1 I. _2 j SLEEP();4 W9 _; ]. o: ~, D! p8 T
}
+ _) R( l( A9 d. U/ o6 O}
* a8 z3 i5 J2 f3 c3 w) e) t$ A1 U" U- ~
% y- [3 T3 O8 ^$ r1 d f2 }4 c
PIC12F508单片机学习之三——按键唤醒
* j( v! W! ^0 S7 e x( n
5 W: ~2 s& L8 f- S$ q, xPIC12F508单片机是没有中断的,按键中断只能是查询方式。
3 }) _4 t3 q' {/ h5 `$ B9 b8 Z! @ B* x% N( q1 k9 {3 Z/ Z
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
3 a# G8 n) E1 C. `% _: ], k% F% ]
下载器是PICKIT3./ a; M3 Z0 B( N6 C) D8 z$ _
, F$ I3 M4 I1 X* O; M//***************************************************
: ?- e9 e6 \$ |( u// __________________* i4 ~! o8 p' @5 i8 ^
// VDD-| 1 8 |-VSS, U r+ `" q$ Y; x) j2 q c
// GP5-| 2 27 |-GP0/DAT
1 y" W3 y/ ^2 k- f" w! ]) ~3 a9 L8 n// GP4-| 3 26 |-GP1/CLK
0 l2 l5 p* V c' j8 m//GP3/RMCLR--| 4 25 |-GP2# Q* u( q8 A. [% `5 i4 E/ D% X
// |________________|% ?* W" J8 A2 M' v5 E% `
// 12F5089 k3 O% ]& H8 B
//***************************************************
w6 P2 I8 a/ t' M
k# y5 o$ S+ E+ H( d5 o H//看门狗 休眠唤醒
. ~5 F j" c. ~' k- A; d' ^//按键唤醒7 I0 y+ w& W. O, D
9 X0 O2 K2 ~ c0 X
#include+ ?7 p' `& L, ?% X4 r6 @3 ]" H
#include
2 [7 G( q- J2 b+ J8 P! z. p3 T, B/ z( t& a& Y: M
// #pragma config statements should precede project file includes.6 j( U& n+ o/ N& B4 s
// Use project enums instead of #define for ON and OFF.8 b# w: _: D6 l/ l( F' Q
/ _0 V% L2 h1 G) I! _! ~ C! @
// CONFIG0 T3 g2 C. o: ?1 L5 _: l
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator) p3 L7 w& d, q% y# o+ [
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )8 R+ R+ F% R- R1 a2 @4 D
#pragma config CP = OFF // Code Protection bit (Code protection off)
5 w3 s( g/ L7 n# `" I#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
: g% s f+ h& n4 [, z) Q0 J. U& v' `( ^% @, X% ~2 {5 M
#define uchar unsigned char+ N8 b, {: }. Y1 x1 C; w
#define uint unsigned int" `4 J% N) {& U0 X: ]" W' {
#define LED1 GP5- @. {, d, y: Q8 h# r( M
#define LED2 GP4+ i3 {; u; c/ \! P5 d$ \( h
#define KEY GP3' p5 N, ~; L( r9 f* f$ O% e3 ~
bit KEY_F;. f( x9 a3 H% c; |" N. y' i
uchar count;
. x6 }& [4 k* l- Z# a0 f# r( l; `//uchar GP3_F;! |' A% N6 C- k1 j# \7 N4 C+ d
void Init()
+ j' `+ Q/ P) G3 C8 ^{& v) F& f3 A9 F
TRIS=~0x3F; //GP3输入,其它输出
$ g' z* ~* B2 L/ ~5 M, V // OPTION=0x07; //这个寄存器上电复位均为14 i) x- n& A% l8 Q5 i
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
]5 {0 n3 N0 h v: B' `: K OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
( o0 H# c; \7 Y0 q# g- I, H // TMR0=0x63; //10ms
6 g: j- M4 r' S$ Y4 }* f}
3 a5 U; U# ~9 c. {void main()
5 ?* w4 B& c+ l5 t; e7 q{
; |6 p& P! Y S3 PInit(); ; G$ H& N: r8 j
while(1)- A+ S1 g8 F L( s
{- N/ |1 h, M/ I$ I
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
A$ R2 J( B- D% I% n3 X0 h {
2 [, f" ^' {$ f& @+ { LED2=~LED2;
. {. F& b* x4 q% h% q4 v }
6 V! l( s+ u; N if(nTO==0) //看门狗引起的复位9 C. K) O- O& G, G" C% `
{
- j& O" c& X8 V% I" ]8 k9 o LED1=~LED1;. o6 p7 ]6 R: v- B! e
}
8 K4 {( C3 X! V/ Z& ]. O+ K7 z KEY_F=KEY; //读出休眠前的按键状态。9 W6 B4 g; S, B: p- w0 ]
SLEEP();
% D0 R0 Y* z* M% } } |
|