|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
PIC12F508单片机学习之一——定时器
2 H2 N2 M! Z% V1 X4 |6 k4 O8 j/ V
0 z% y# w, }4 A2 ^! VPIC12F508单片机是没有中断的,定时器只能是查询方式。
* q! _! W9 |- _3 T6 M* F3 J
0 F, L. V( f9 q- M编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
5 \, ]* ^( F& x" X/ P( @ k4 Y5 n! ^( t' S1 B1 T
//***************************************************+ H" J0 i4 G: n5 [( n
// __________________4 b b. T6 {' H# _& D4 K
// VDD-| 1 8 |-VSS" X! |0 f- E( O. K
// GP5-| 2 27 |-GP0/DAT
9 r8 {1 b& A4 z; E// GP4-| 3 26 |-GP1/CLK
8 S4 C N5 V' ]) `9 q6 U3 N9 \//GP3/RMCLR--| 4 25 |-GP2/ J" K' |6 i$ N6 {% j8 k& h
// |________________|7 N& @, Y {% \; C; d- P" `5 c0 H
// 12F508$ p6 A# U! Y: x% S6 e7 C
//***************************************************
y0 f! I" s" r8 Z' i4 U: d& d/ u: O/ Q3 d+ d6 i; c4 V( r
//定时器模式试用
6 w$ M6 s% ~* b) {#include
. x5 d, z, a2 |$ E" _#include
& x3 M8 `6 C( r4 O. ~- W. h; G* n! u! [; _3 p
// #pragma config statements should precede project file includes.
% Q8 @2 Y/ e0 s/ v" j" c// Use project enums instead of #define for ON and OFF.
6 A: a2 @: B. N. E% \. G2 L4 ~
' ^7 p6 Q, ~( F! a3 H9 L3 l// CONFIG
! d, T, o5 g( V3 L8 m" x- c#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
C: o. _* d2 ?" x2 T#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled). v% d; p" W+ [
#pragma config CP = OFF // Code Protection bit (Code protection off)
) e' B6 K3 K' j" ~0 j#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
4 X" b+ D9 p" p" Z
# @+ h! ~! f! q2 c' x3 J#define uchar unsigned char; i r' A" V/ v& R4 b
#define uint unsigned int
9 e t m* E5 X! S% f: |$ quchar count;& G K- P; M9 f" l
//uchar GP3_F;
9 q( f6 N; `2 p: d) `' Yvoid Init()7 P2 p0 ?8 X z% T) `7 ?
{; O3 z9 } x' Q5 `2 ?
TRIS=~0x3F; //GP3输入,其它输出
! k8 M. L) Q2 m6 D OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
5 n/ U/ w) P8 |' | d4 y; u TMR0=0x63; //10ms x=257-tJ/4F
+ n6 M0 p* |0 p- U+ |7 c}" \3 p2 i& E( W" c, l" b
void main()
4 Y5 j5 U# I7 i- J3 S: d- i3 E{ + j; A$ V. o' o3 G
Init();
6 k2 u4 ?( d# U- Z! v; uwhile(1)4 J; t( Y: r" L# R2 n
if(TMR0==0xFF)
, v1 u" G" t9 Q1 q! T {
' { c# F9 u5 ~2 h& B0 ~5 C TMR0=0x63; //
( k) C' I: a1 U1 S5 f if(++count==50)//1s! ^9 Q3 s; J1 r2 q# ^
{; k0 i5 r7 _2 g% ^8 a2 C. \8 I
count=0;% t+ \# i4 A' p; R( d. A# {, d. S
GP2=~GP2;//LED闪烁
& D9 @1 M" Z$ M7 y }% i' Y9 g3 O5 V" b: |. L
}9 @+ m# \3 s6 w: h5 M7 \
}
, [0 v$ B4 j2 D, }' ?} $ @$ x+ q* s, Y, }
: f3 R4 L) y# S" r& ~% p, B& v
; @; s! D7 @* T/ x4 w4 ^PIC12F508单片机学习之二——看门狗和休眠模式试用2 s4 u! N! o' F: b3 @/ H
- X. b9 i& p( i$ oPIC12F508单片机是没有中断的,复位情况只能是查询方式。
; ? e6 H: ~' o& o1 c; a9 p7 U, V7 E# T
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。& S' n! |8 J4 a3 W
5 R# P0 c) W5 `( Y$ \$ y8 N下载器是PICKIT3.
- M$ K- c% t2 ^, y/ ]- w- o7 [. Q |$ O/ F3 B8 S, E; i) h) a
//***************************************************
8 T: A0 W" q/ D, M// __________________; _. g$ z. B4 F6 t; T4 m x
// VDD-| 1 8 |-VSS
$ R# B( j8 T, y$ f6 Q// GP5-| 2 27 |-GP0/DAT
6 h/ U& n) g, |, \& F: L% v4 R// GP4-| 3 26 |-GP1/CLK
9 s; }# N: l. @4 T; z: w2 W* H//GP3/RMCLR--| 4 25 |-GP2( P4 [8 R0 F! \" m& w8 U
// |________________|
! Z! D' Z) M( h// 12F508) w& B! E6 R9 V7 E3 x: j
//***************************************************- n9 Q. c# j8 m
// 看门狗和休眠模式试用! h. o. R& I W( f4 B* q
6 ~# n; p. p) k3 ?* A9 s4 m9 q* `: R: d' y+ w+ k# b. S' f2 d$ x9 `0 H
#include ]; C0 ]+ R& ?
#include' q( x0 X, T; q- C
9 ]* S# A: u3 v) \& b# [// #pragma config statements should precede project file includes.* m3 [( I/ W# Z/ O
// Use project enums instead of #define for ON and OFF.& t+ Q7 i# d1 ^7 U; w1 F5 o, w3 W
, L: o8 c: A6 _) a9 t+ ~
// CONFIG, _8 l. ?: P0 [& E, G& w f
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
/ x8 R8 A s, u T#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )+ O( O4 R z( I- ]) p- Z! `& ~! Q
#pragma config CP = OFF // Code Protection bit (Code protection off)
8 M/ ]& A4 s9 o& j; Q' S: v% I#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
* ]1 ^0 b( R0 |4 j
% b$ u3 L* L: B* y. R6 { T5 M#define uchar unsigned char, n5 s m% t/ h$ i6 G# ~0 \
#define uint unsigned int: P( k* n% \6 P3 y9 R! O* I
uchar count;0 q3 o E6 v' N# q, I- }$ h
//uchar GP3_F;
0 i" m. r1 g; C& c( x& i) D8 a8 Jvoid Init()
2 p) g5 l0 c. z, ^{
1 S& V9 u! Y" f4 K% o1 W3 G! C! e TRIS=~0x3F; //GP3输入,其它输出
2 U+ Y. _8 @; l0 `$ m OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
/ h+ R0 K G* z7 o) ]: \}
3 E$ a6 Z8 v: A: bvoid main()# S1 `2 p. H# j# x& g) ?# j* j- i
{
3 Z, H4 {5 ?0 KInit();4 S. Z' G9 Y Q. N' P( t# e
- O( s7 k, t# K* C/ E
& {# h6 o5 O0 x. c3 K1 @5 y& }while(1)- T' i. r2 `/ T/ z3 M: R$ `; T
{; H9 h/ I0 Y' Y7 H4 K2 v$ y6 Y8 P
$ `5 h& ~) D+ S% F0 i
if(nTO==0) //看门狗引起的复位$ ?2 I' O p7 B9 w
{
$ j8 d0 z2 ^2 q5 Q q; N1 H/ W GP2=~GP2; y0 H! s: u/ a2 r" T7 K
} % a' \1 l1 `% L" h* |& n
SLEEP();
6 H& J: [6 e1 I3 e, I* M. G: Z }
8 C. E% A+ ^7 k# f! c! c' w. F}
. _1 g# H: J/ z- T. S! E+ y o6 j0 ?/ p2 s) P( l S
6 z, W0 g4 i5 [7 v1 g/ ~8 ?4 `
PIC12F508单片机学习之三——按键唤醒* I" [) i3 M2 c, s2 A% f
: J3 N x; G9 x% T* F
PIC12F508单片机是没有中断的,按键中断只能是查询方式。4 N% Q" U2 n" X* Y$ a: K0 a1 ~7 F
; \- J3 }6 p8 `' _; l8 L编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
: K& s5 Y% I# ~; T4 G
3 k1 P) }7 S6 Z9 S5 v下载器是PICKIT3.
$ p2 W9 x2 y" t! M/ j5 u" y# w" P0 {$ U3 n4 ^
//***************************************************
2 N0 t0 X, \9 Z+ C# v' X6 c8 O// __________________
5 L4 H& I) U; _( S7 A8 M' N9 J; B// VDD-| 1 8 |-VSS# v5 |8 z# ?" e& h4 p/ c+ @
// GP5-| 2 27 |-GP0/DAT% D$ p8 \ f% j5 d% f) F: K
// GP4-| 3 26 |-GP1/CLK
6 x; i9 Y/ u6 t9 ^//GP3/RMCLR--| 4 25 |-GP2
6 @: W9 O, p/ F// |________________|* v% {3 O1 W. Y- G) F
// 12F508
$ q% p3 I8 f( d/ Y( i% G: s$ O//***************************************************% ]! q* N: g5 D
9 X4 h6 c$ G# e8 I//看门狗 休眠唤醒
8 @ ?; w4 v' C# H+ T) H5 P//按键唤醒
6 C/ U, D2 R" f6 `! k, c2 J3 L h/ u, P1 s
#include- V# u: |: s ^' ~: S4 _
#include- O, H* W: q4 ?7 B/ V7 V9 u! p
+ L% O4 @1 l ^. M' _, T, P
// #pragma config statements should precede project file includes." K$ B. D( Y) ]* r* D% f& r) d4 B
// Use project enums instead of #define for ON and OFF.
3 ^6 _; Z1 F: Q5 H/ Z! y, X e# u! H a7 s& @+ |& A! A
// CONFIG3 \+ H7 K- G( T2 ^6 h
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)/ y1 a! x5 M0 q8 f% U
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
$ N$ z8 ^' t* |4 x" ~6 K% m#pragma config CP = OFF // Code Protection bit (Code protection off)
8 S: J3 g, Y0 Z# \- V* Q7 x#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)5 e/ C6 c4 X: m" n! O( ]8 q
' m: | N7 [7 B, Y0 L4 V7 A
#define uchar unsigned char% D) c( A' X4 l k9 I+ I- U
#define uint unsigned int
6 x. G* ~/ @- _5 C#define LED1 GP5
3 B! N7 p; |$ |#define LED2 GP4
& r3 g ?2 C; S- m! G$ k#define KEY GP3
2 j# D* R% R0 l6 @% ^6 s3 |bit KEY_F;
4 E' {# X0 k6 c' y8 X/ puchar count;; b' B. g2 a+ L% b
//uchar GP3_F;
: {+ g/ O# i7 T, I; b) e _void Init()# W; ?4 e8 V# l8 H
{
& Q7 } I" `( x% Z: q3 [" E7 J TRIS=~0x3F; //GP3输入,其它输出- t2 b5 q3 C5 v
// OPTION=0x07; //这个寄存器上电复位均为1! E$ m0 e% [6 y1 s4 a8 f# Y
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
% y5 i6 R8 e/ g1 `0 F6 X OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S: N7 x( [6 ^4 p# |0 B$ F k& j
// TMR0=0x63; //10ms" z2 Z9 M# Y! g+ t! o* v6 k4 @- H
}
4 `6 o, K& N& \1 ~void main()
+ C5 p$ @$ t& j5 z3 H5 }7 R u1 N+ Y{
, A5 [1 i" O0 `6 K- I+ RInit(); ( F5 M$ U* l( b+ O
while(1)/ L) o* z! \1 R! x( ^
{) O8 s2 J4 o# P3 e; I! ]
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒+ _/ ?' e. p$ a( c! M! V, y
{; o/ U; L5 v& E5 }" B
LED2=~LED2; X# Y# Q7 D# Y4 r W9 N. Q
}6 y# P0 P- |& Y
if(nTO==0) //看门狗引起的复位 F2 p& u0 X: r K1 L w0 n
{: s l; m& N6 g$ u( [ z; m0 R$ s
LED1=~LED1;' e0 H0 i% Z( ^/ K2 c4 a
}' { w( ^( H5 l8 J8 h
KEY_F=KEY; //读出休眠前的按键状态。; t, F9 h) B" H
SLEEP();, V2 M# |5 K& V7 @8 ^9 j: w
} |
|