EDA365电子工程师网
标题:
PIC12F508单片机学习三个实例,请批评指正
[打印本页]
作者:
jerryli
时间:
2016-6-28 14:44
标题:
PIC12F508单片机学习三个实例,请批评指正
PIC12F508单片机学习之一——定时器
& X3 {4 b9 Z- m
0 V$ z1 P2 s3 h# D: A3 l* X& j
PIC12F508单片机是没有中断的,定时器只能是查询方式。
7 Y' E4 h: V% K' @6 y7 o
$ L) E1 D$ h1 y) E. u$ W$ J1 U
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
c$ F7 g/ k5 V
5 i6 n+ D$ ] C9 {5 F z
//***************************************************
8 ]* b) W9 S- Q6 {1 z# W- H' N
// __________________
( o' r) {1 M( l0 D3 o
// VDD-| 1 8 |-VSS
2 }4 X$ r3 F' d5 ?
// GP5-| 2 27 |-GP0/DAT
6 V5 S% m! `& {7 i; H# k
// GP4-| 3 26 |-GP1/CLK
1 j; ?" Q, L) K V8 F
//GP3/RMCLR--| 4 25 |-GP2
7 T. D% X, y7 L9 H; b& b; @0 S. T5 \
// |________________|
, p: n6 Y! p, B- l
// 12F508
* F) ~; K* R) ~. M0 |( k% W1 r
//***************************************************
- }5 X& J3 o7 _, `8 U
Z4 q9 w' H, D8 E8 F1 B* g; X
//定时器模式试用
. m( _& S; u: e" [5 q
#include
$ _0 i! [$ e; V* G) V( t
#include
0 [& X q6 n) G9 J
7 }' \7 @7 a9 a8 v# e1 Z" n$ O( w7 ^
// #pragma config statements should precede project file includes.
$ {3 b" b, A! S
// Use project enums instead of #define for ON and OFF.
% v; _. W5 D2 L; y9 B0 A" s# }
( u& F$ B; `1 M* @' E
// CONFIG
- `7 }' V8 p5 P- i
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
& z! Z0 V d# Z2 W
#pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
| ^: r9 E) g, R; Y
#pragma config CP = OFF // Code Protection bit (Code protection off)
% _% d& @" h! m" y+ A
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
) o! m6 k$ W8 w2 \; R8 j
2 f8 T% v! h/ X+ j* e; y/ R* n/ l
#define uchar unsigned char
7 M: x5 e0 r7 g) ]4 Q% P' U5 V* e H
#define uint unsigned int
4 ?! m0 q4 m' _' [. E
uchar count;
. f* q0 C% C+ M$ c6 u R' ~
//uchar GP3_F;
6 W7 u+ ^ b3 d
void Init()
: z! l6 C+ [8 a2 F
{
" ~8 P5 u2 c9 F6 }- e% O# ~) u* y
TRIS=~0x3F; //GP3输入,其它输出
) r7 v- u5 o5 e% P$ {; L9 \2 Y
OPTION=0xC5;//分频器给定时器 64 4MHz x=257-tJ/4F
* y1 i. `! @/ e' y4 l, Z5 Y: y/ I& Y
TMR0=0x63; //10ms x=257-tJ/4F
`0 X* T4 ~( W% ^% _9 z# b
}
8 z5 N ]2 O" w0 r3 P$ x1 D
void main()
2 q4 d7 l4 a3 G* {% l
{
$ H: b* k, @- ]- F# i
Init();
' \% B; f" K ~& o7 Q
while(1)
3 g8 w% n! e3 S4 {, n0 ~& l# O4 n" P
if(TMR0==0xFF)
! X6 p) Q5 a5 T2 C4 y9 e
{
+ Z- u! ?4 F6 |( @# P9 s0 d, {. I
TMR0=0x63; //
3 ?9 U, ]( l; o c; U8 B
if(++count==50)//1s
! B: ~7 J. K j M
{
; Y2 t9 y$ S7 L' K# F2 I5 n' S
count=0;
; `5 F( W, o3 u4 g( \
GP2=~GP2;//LED闪烁
% H& }/ e( L+ }4 I, L4 f' Q
}
" u* A) G6 s7 w
}
* Q, f. p4 |$ A9 g1 k% j
}
8 W, |" Z x( k6 ?8 r
}
% l1 U% ?" ^0 L3 D* w8 f, A
/ G* _$ U' I$ ~: L8 Y1 B
3 B4 S E0 v9 E3 v
PIC12F508单片机学习之二——看门狗和休眠模式试用
9 N' _, f2 R8 a/ q: C5 T0 q
6 m8 N8 L- h$ n6 E# [# p
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
* L: p# R3 M- A0 l' h0 P
* @2 u8 F5 a- K# c+ @' n; x- I
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
' D- N! |: m3 m: ]$ R# S. X9 b. C
4 Q6 b1 |6 o. R! v
下载器是PICKIT3.
; I/ i4 j! _% b
# ]1 m7 L5 H9 l7 P) S+ j( T1 ~% d
//***************************************************
# ^- [8 ?( Z* v0 w. _
// __________________
7 `1 C7 _, Q* |. \) ?6 W" Z/ @
// VDD-| 1 8 |-VSS
A: K3 b1 ^. Z# C7 L5 z7 W# _' ]
// GP5-| 2 27 |-GP0/DAT
4 F3 K9 d- l+ q9 ?
// GP4-| 3 26 |-GP1/CLK
* U5 U9 W" {( v6 ^ i9 C# d
//GP3/RMCLR--| 4 25 |-GP2
, z$ U% y, e' l) K: b% Q6 U
// |________________|
) F5 v6 k5 o6 D8 N( k: V2 w4 |4 l
// 12F508
$ Y8 T' [1 o! H1 A X
//***************************************************
- n- U# |1 J2 p9 f
// 看门狗和休眠模式试用
9 {2 ~, V/ B+ y" S: g7 Z* {3 { C
; U: ~0 g6 C7 @! S
# v# Y/ A4 ^8 I$ ^% f
#include
! Q6 }3 P! v8 L4 x! p* r7 C T8 ~
#include
H8 {$ R5 g$ Q
8 @& E. w! I6 j/ @/ ]
// #pragma config statements should precede project file includes.
. n- N' Y& ?0 }
// Use project enums instead of #define for ON and OFF.
- p. C+ N$ l" \# a7 v
8 X4 p& z/ N- g( n( r
// CONFIG
4 Z( _+ B. \! o
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
$ G" Y5 j6 s8 |2 u3 w: O
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
, j p9 y* v0 a2 o. }+ `/ P
#pragma config CP = OFF // Code Protection bit (Code protection off)
% Y9 m) [. { r& s. b& M
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
/ T9 ~8 Q$ ^! E" V v
- \ _" Z# o: W- z1 _; S
#define uchar unsigned char
: o$ l$ ^! E$ k( p8 j. i% p& v4 }
#define uint unsigned int
" |% F! R% u6 e+ C
uchar count;
$ R( Y0 H+ s0 C8 n5 u! b$ C
//uchar GP3_F;
8 P& e3 y- L" u; R
void Init()
9 t8 i+ v7 {6 u/ @& B& e+ r5 O
{
9 q+ z' T4 \2 }
TRIS=~0x3F; //GP3输入,其它输出
! ~0 Y" z, }/ `' ^7 i; b
OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
, e0 B. e) ~* h ~' E9 ^
}
* E% ~$ `- @1 Y
void main()
+ a" O' c! ?7 l0 Y+ m- e8 t
{
: D) K. T& U7 `5 E E- {
Init();
, o0 b6 B' l* l; d7 p3 o
; Z, R: y, e6 r# x1 T0 L
% P: W% k5 B# x4 G7 |# t9 G, T
while(1)
" w0 Q/ r! p9 C% o' P
{
- e$ f0 y; l4 l3 J$ K8 X( ]/ r
9 m& j1 b7 V" M: C9 |$ t! q
if(nTO==0) //看门狗引起的复位
T5 Y$ Q1 [3 H, o! z: L9 g2 x
{
" h# p. H% `" v2 o, {
GP2=~GP2;
/ c1 l$ e; U, n: a$ f( R
}
/ T( W- b! S' B0 y, Y! f9 L
SLEEP();
2 J6 a$ T) S$ W0 o7 m7 Q# }
}
* n4 D+ m T8 j$ E
}
! i) q$ ]! N7 A
' z% x7 g8 E5 Z, O& I C4 g
3 u0 ~, v3 e. E7 F8 o$ Z" L3 L
PIC12F508单片机学习之三——按键唤醒
$ _; a8 Y. `; R: }) ~2 u& @9 \
1 w( f1 G: G. R
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
8 v$ h5 U- w i& S2 d3 z3 v+ r
- a) i4 A7 w# u+ W$ ?/ I( `. s/ g1 R
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
* @# U+ l- t* e3 b* C1 `: M, \% M7 _
9 V, _( A- w1 D! V8 Y
下载器是PICKIT3.
6 w* B: i- i, y" @8 X& B
- {# m# b( E1 C" G- E8 W1 o7 H
//***************************************************
" u8 {3 y5 f$ L# P- Q5 y1 x
// __________________
$ w: q: M) ?' F( K
// VDD-| 1 8 |-VSS
0 a8 I' z$ W a& m5 N( S) A
// GP5-| 2 27 |-GP0/DAT
8 v/ y5 |# Y% q/ |# K
// GP4-| 3 26 |-GP1/CLK
1 b" e- C& c. b' c3 s4 `' P1 T5 ?; s
//GP3/RMCLR--| 4 25 |-GP2
( E( o* Y/ g; @, f0 ?
// |________________|
) v/ G( N# r% I$ L# t; z
// 12F508
. o4 y8 @6 n7 Y- T
//***************************************************
9 z* I: j% m) N$ g
7 l, f, H& B" m$ Z& s/ f. @
//看门狗 休眠唤醒
+ u2 Z! _8 P3 Q) R& }2 r6 C
//按键唤醒
( n: e( K/ d' R, G) e8 k
' f- t' ?9 g& L. q, V
#include
& D8 n+ Q) L( ~; o7 e
#include
( r S2 g6 H* d4 {( v
; }5 B$ ~, }: V, D
// #pragma config statements should precede project file includes.
% |0 E- {+ q2 P5 I
// Use project enums instead of #define for ON and OFF.
h8 b# D# ]6 a, X! s% ^
: k8 @/ }7 ~. h% p
// CONFIG
7 k2 y1 A) r2 j, f- W
#pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
+ m% v# t8 ]! D' i' O
#pragma config WDT = ON // Watchdog Timer Enable bit (WDT Enable )
, W/ `4 w: E: w3 S( ]
#pragma config CP = OFF // Code Protection bit (Code protection off)
' Y! u- C0 h: z0 r, Z
#pragma config MCLRE = OFF // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
4 V1 {; I2 S" K" J9 U
0 ]) x; I2 [& Z) t5 }2 X" }
#define uchar unsigned char
# [+ `/ a7 Y3 e) a& ]( `
#define uint unsigned int
( h3 a2 w7 V% L1 ?: ^" e. p
#define LED1 GP5
8 ]7 X5 C6 k/ E2 C. y' A
#define LED2 GP4
% ~ E& C) ?) ^. |3 `
#define KEY GP3
/ B4 O! z+ S$ I6 `
bit KEY_F;
+ o9 I; I4 w# p- [9 L/ y* ^2 T
uchar count;
3 H/ n! y& M& C2 y
//uchar GP3_F;
7 D& w* }; y* t } h$ [# k
void Init()
" C( j9 T/ L& G( }4 D
{
8 S# G( @! G, p- Q$ L6 u' `
TRIS=~0x3F; //GP3输入,其它输出
! A: l) x y, F9 R5 r, |% S: `
// OPTION=0x07; //这个寄存器上电复位均为1
# V. | O) Z/ }0 W- j* h- R
// OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
- p6 h! ]! @ m' P
OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能 定时器分配看门狗时间是18Ms*64=1.152S
3 X- }' g2 }+ d8 N4 {
// TMR0=0x63; //10ms
8 Q5 B1 E$ R8 L; h7 X
}
) T! |- z; ^) L* f2 F6 `" R6 A
void main()
7 |' u4 F9 `- Z6 Q S
{
9 I! m3 `8 _, o9 ]4 J
Init();
4 R6 B7 u) h2 g8 z
while(1)
" h% q& s1 ]& o1 B& J: t. X- ^
{
% J0 Z$ c- j" J! E% A0 A
if((GPWUF==1)&&(KEY==0)) //引脚引起的中断唤醒
0 o% W! _$ }3 t( ^8 G7 g
{
7 A% i$ t7 H" k4 g' ?5 D
LED2=~LED2;
$ h8 S( _- ?! h1 l+ X- Z$ u P; B
}
: h4 v A5 W8 L9 y
if(nTO==0) //看门狗引起的复位
( q; G: d$ ?4 U' Y$ o1 d0 i1 v
{
. l! m6 |4 f m j) B4 U; J
LED1=~LED1;
1 |! e: y/ N1 q6 V1 W
}
* t+ X5 a6 H% q6 N& R6 ^
KEY_F=KEY; //读出休眠前的按键状态。
$ |) q) F) [' H& Z$ Q2 o# d7 s9 F* g
SLEEP();
- B3 q* w" V8 C5 p! m1 V
}
作者:
jerryli
时间:
2016-6-28 14:45
资源多,学习不止步
# Z( v, ? e' r, t& Q
作者:
Hh0203
时间:
2016-6-29 10:47
路过捧场,谢谢分享!
" V& E6 q8 f) h) Q1 \
作者:
yhg-lee
时间:
2016-6-30 10:25
赞一个~
欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/)
Powered by Discuz! X3.2