找回密码
 注册
关于网站域名变更的通知
查看: 411|回复: 3
打印 上一主题 下一主题

PIC12F508单片机学习三个实例,请批评指正

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-6-28 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
PIC12F508单片机学习之一——定时器" ~" x  q& f) ^9 b4 T/ o

5 M5 f0 G. ]" a- v# n) gPIC12F508单片机是没有中断的,定时器只能是查询方式。
- P5 L; S8 W; M+ a" |0 N2 y- h& Y
% E$ h, z! @4 l  }0 X( ~- b编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
. u  H* }4 [- h. o# G. e# R' z" [6 g
//***************************************************
, {* o9 U( g: a1 I  l/ ^//             __________________* A' P1 N* t" \1 W4 S
//             VDD-| 1            8 |-VSS) Z7 ^& C$ q# J# ~9 K  j4 O: c
//             GP5-| 2           27 |-GP0/DAT
$ N# X- |) d+ k) ]/ P; K//             GP4-| 3           26 |-GP1/CLK& i/ N% T5 L6 i& i+ G; Z
//GP3/RMCLR--| 4           25 |-GP2
- Q+ [# B5 n' h- ^, R2 V% _//             |________________|
( o# r) M2 L/ w, I9 n, x//               12F508
  O4 v9 r* i7 M  ?//***************************************************
+ a. X* S8 z2 {& \+ S6 g: Z
% k. q& x- G0 q) K" R/ o: o//定时器模式试用
2 ^/ R$ y- |4 O% p#include$ ~) N; r0 Y# B
#include
. E8 R2 d7 }  X! k) x5 s$ W
( n) ~: A: Z; f1 m+ r$ U// #pragma config statements should precede project file includes.
& Z# h  |0 I, l0 U3 ?// Use project enums instead of #define for ON and OFF.% h, H" \2 u0 p$ n

' x* ]. ]0 n7 G8 c3 D// CONFIG6 q( @7 ~; V# H! D
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)8 Y4 E6 l# ]/ y, g) ^' e# y
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
/ X! z: a. `+ S; |1 h#pragma config CP = OFF         // Code Protection bit (Code protection off)
# c# T3 j% o. P$ k#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
' ~7 h( l: V/ x
% J% ^5 q5 J; \#define uchar unsigned char
) M5 O; x0 @6 B2 V$ P  P#define uint unsigned int2 H: c' J7 G# E$ B! d0 R
uchar  count;
+ N0 @4 P- O( `( l. c//uchar  GP3_F;
- F( N# C4 q" i& s+ d6 U( l( }4 @void Init()
$ U4 h' {, q0 B( L! R( G{
4 \8 L3 M3 j6 ~- C4 ]       TRIS=~0x3F;  //GP3输入,其它输出
* S2 C' S; U. F8 `; M" N& F% T     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
6 \, d2 d* P/ |) M/ d# D6 K) j     TMR0=0x63;   //10ms x=257-tJ/4F
2 Z# X) T# X3 z. B' M: L# O1 E}( J2 `/ c6 r# D, M  S& K5 T
void  main()
) Z- ?) {, ^& b" ]$ Z{  
; k6 b3 C: v' q0 B! S, NInit();  , D" N6 G: C$ N0 L$ @1 \
while(1)
) t8 E6 n1 p0 J& G+ p      if(TMR0==0xFF)
* y. f! I2 G! H0 l$ q      {
3 E# J+ z  ?+ l0 o       TMR0=0x63;   //
: n" c3 y' Q5 l- y       if(++count==50)//1s: `, H& Z6 Z0 a+ ~( h9 B9 Y! v
        {& s8 q* w4 L, b7 C7 G
         count=0;! B' W! i8 E" I+ n0 G2 Z' L! T
         GP2=~GP2;//LED闪烁
! r( j/ G2 Q3 o- }9 R: }5 j        }! J) U; K1 |# @1 v0 i5 H- t0 H* ^
       }* e& ^" Q& x/ ~( |
    }
7 O5 ^5 G/ Y8 E& x, K}
) o* t* J5 l9 X* o/ f) ]
# a/ ~0 l$ _9 Z: s. ]; M5 ~1 t; w
PIC12F508单片机学习之二——看门狗和休眠模式试用$ d/ [8 D5 [+ h& @7 I' S- o3 ^
5 v  y! p) N" O5 F" n8 m  a8 @
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
* K7 K( J& a4 t  T! n; W5 T
) R4 j4 n; Q  t9 Y+ _编译器用的XC8,编译环境IDE用的是MPLAB X IDE。; N) L. J: W( ~3 L/ h& {2 Q0 J. ^

1 ?3 p# e% {5 a% B3 p, ~: n4 K下载器是PICKIT3." M$ A7 @3 Q: Y% m8 g& B, R" R5 \

3 k2 B8 N  y" d/ e1 ]//***************************************************3 \+ n4 v2 P, o" ~' o" _0 v$ K" G
//           __________________& d  o, L. L5 B) f: Z. q3 b
//       VDD-| 1            8 |-VSS
0 v) N( z* a! W+ Z" ^( C" {6 z  m//       GP5-| 2           27 |-GP0/DAT; e" r4 p' |+ \7 @
//       GP4-| 3           26 |-GP1/CLK
: {& R6 x1 b* T3 w//GP3/RMCLR--| 4           25 |-GP2, c' S; y( v5 h( ]
//           |________________|
, S) p# @( |- S( z5 U1 M//               12F508- }# c% g! T! M5 a5 s+ A! q
//***************************************************
3 j* W( T( H9 v' h3 E  Z! l: }// 看门狗和休眠模式试用7 I" B! C0 R5 f3 U3 g5 U/ K3 t# i' x

" R# n) t/ L9 Z' b( \* W5 ]' s
/ J' v; @1 Q" z; E# ~0 R3 _% t#include9 @0 z' i6 O' T6 e1 O
#include
; q* y9 A% E  l) H" a! `* f4 w% K# k& B5 S: f8 V  [
// #pragma config statements should precede project file includes.
, B' z, z+ z! X2 ]// Use project enums instead of #define for ON and OFF., k6 s4 y5 K. }0 _

& [3 \$ U& v/ n9 S// CONFIG
( v  ^6 Y. a5 `0 j% J) H. p8 |#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)5 x1 D) q8 @* m# }7 a$ x/ a" i( }
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
' q" A; A3 L: v3 ^) G  C% `#pragma config CP = OFF         // Code Protection bit (Code protection off)' X( W7 o! l' ~+ J, b
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
9 }# ?) h$ z% u1 A( F4 [; w5 ~! Q! g0 B) ^$ |
#define uchar unsigned char
' [4 t) f7 ~* I2 R4 Q4 Z3 K#define uint unsigned int
; U* N' n: d& Tuchar  count;1 B# _* ^/ _/ a. M1 ~. b0 C
//uchar  GP3_F;
$ _" E1 w5 ]  N2 v7 s; kvoid Init()4 d7 h* k+ x0 W' D9 [
{0 q: _3 @& W' X6 S. \+ g; R, A
    TRIS=~0x3F;  //GP3输入,其它输出
) E8 R0 u" N2 G& V! t' ^    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
; d  B7 j1 S4 T8 o}
4 O0 d- _% R+ s8 D! h% [* zvoid  main()
% k! H/ F, K1 {; S) p7 @# q{  
5 S* v. h3 ~8 [, l7 wInit();+ G8 ^9 f5 _  V3 |
& t6 G7 @; L! G9 X5 X) {. t
   
' I  J5 B0 A6 V2 _& j) Y7 j) ewhile(1)" b9 i/ O  g! w7 {
     {( _1 `# U- S/ q* m
. _! \! f6 I! B  Z# m) \
    if(nTO==0)      //看门狗引起的复位
$ W# ?" O8 I5 ~! P) L) Y& z5 G/ ?   {
  k9 V; X7 ]+ k% F3 r      GP2=~GP2;6 D( N, v- f, x% i! K9 C' |
   }   
& B4 D/ q9 o& E! i- {( _8 W$ p         SLEEP();1 S4 {7 [6 X5 t: r& d: S
    }! J" I/ ?' @1 D3 I/ R
}
& U$ e/ O; l; l/ c9 w0 _5 V4 S2 Y; u& C+ _

8 R* ^/ A! ^7 I7 xPIC12F508单片机学习之三——按键唤醒
  [+ O& t% O6 U9 M% y  8 k9 }: I5 c3 L- K' V0 n
PIC12F508单片机是没有中断的,按键中断只能是查询方式。8 {. Q5 v4 r- {6 |( w

" ^+ k9 M, U& `0 Y3 |编译器用的XC8,编译环境IDE用的是MPLAB X IDE。" v& n9 f; P# a- m0 H5 z

  s/ x$ V+ \, w( C3 B8 Z下载器是PICKIT3.
$ }' k3 K* q+ x& p/ N( ~- K3 J& g0 y0 J) S, P- i
//***************************************************/ b7 ^5 C! r1 u, A
//           __________________+ |+ u( m( ]" j) J, x' g: t
//       VDD-| 1            8 |-VSS
6 w* w' ?3 @7 s( A& W3 g9 j//       GP5-| 2           27 |-GP0/DAT! y6 B4 D6 C( N7 D' S; |
//       GP4-| 3           26 |-GP1/CLK* }' p+ T% t6 t4 G
//GP3/RMCLR--| 4           25 |-GP2
5 B0 C: Z, q1 M1 H//           |________________|( @! H, u, P- E# _& H! Z
//               12F508' c, x( A- W2 [5 V
//***************************************************2 k% j& S/ I: r1 n* n' W
% t# B- X5 L/ Y, F/ m
//看门狗 休眠唤醒( u; t2 h/ Q- f0 R7 Z* p
//按键唤醒! J4 m4 m3 @+ b
) G" P( r6 p7 a  R" g, ^
#include3 w0 L( K; H  R! r! p$ w
#include
" u0 h3 O2 j& c, A/ I
/ {  `0 a# y/ b4 R- M( }// #pragma config statements should precede project file includes.
, P1 V3 q& y4 Q/ R// Use project enums instead of #define for ON and OFF.
3 K; p; k- Z  D4 \. h5 j
. S4 }/ h: p' r9 K// CONFIG
/ T( w& ]  u# a' f# h5 M9 ~#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator), `# c) c/ c6 ?
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )7 k8 ~4 v, |( n3 j6 a  j% e
#pragma config CP = OFF         // Code Protection bit (Code protection off)
/ j) I: P6 C7 o9 h. `; w7 \#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
5 v0 I' ?: T' p( K( r, R
" a) @' l1 I$ B7 s+ \, t; V#define uchar unsigned char
& {4 k! U1 y, @$ i6 Y# o1 D#define uint unsigned int8 l6 x; G+ |5 q* A" Y8 j. s. w- Y
#define LED1 GP5
% }! \: f  v& H2 h#define LED2 GP4
& S/ b7 H; f5 D: @#define KEY  GP34 a& j  s9 i$ e4 H4 r- F
bit   KEY_F;
% j- ?, s2 j7 C+ cuchar  count;( d: {9 r2 F; v! F( [( m
//uchar  GP3_F;
( s. D, `& i) A2 R. L) evoid Init()
: }  _' X$ e1 R! Q: I8 ~7 X6 l  H2 a{
, X9 X' r  F1 x   TRIS=~0x3F;  //GP3输入,其它输出
2 G# V" P- e# l# G0 S" x/ L   // OPTION=0x07; //这个寄存器上电复位均为10 X3 c  }, [4 T0 t
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S# Y4 h# ^" r8 Q$ @1 D0 _& f6 I$ u
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S
9 C2 _  Z1 j" v6 Z2 e9 i1 w7 D+ }9 e  // TMR0=0x63;   //10ms) _3 J0 g4 m8 |
}
* O3 L) B" U) x- uvoid  main()
, w" W2 N0 n( V" m. J{  
5 z% j7 J4 l. b6 U* U+ n6 B4 HInit();   ) Z' I7 A# ?; F( B3 }9 ~
while(1)3 D+ H! S9 _* Y) X( w! i9 B. y
{
% Y" o8 L; n- k9 H1 c    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒7 t# n% @6 Y0 G7 c
   {
" Y, r- G( G! z" F, N+ @     LED2=~LED2;' e1 @6 b$ [( f6 P; Q9 S0 R
   }' l  M  t3 A! C; ]! T* w. v
    if(nTO==0)      //看门狗引起的复位
" O( J6 _. m& `' z5 d8 r) c' Q* g   {$ B! U+ P; |' ^5 J4 v' a. `. i
      LED1=~LED1;
- t5 \! X  M- L7 w) Y   }. [$ y( O6 @- E5 R
         KEY_F=KEY;   //读出休眠前的按键状态。' n# j: k4 d* \* g
         SLEEP();0 x! X, [( A1 [. Z8 V' }% O+ s
    }

该用户从未签到

2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步
" g" c1 S1 K+ l3 K1 E

该用户从未签到

3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!
0 G- `7 n8 G7 Z, \! p: ^! J$ x, u
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-4 13:52 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表