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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PIC12F508单片机学习之一——定时器2 S4 [. d- H  ^% K+ H2 M
5 E/ e& B& f3 \1 Y
PIC12F508单片机是没有中断的,定时器只能是查询方式。) g- W. |3 M1 D
( ?. [  K0 Y7 I  J
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 |8 J0 n- d% |% |: A5 h
" I3 ]8 y! {: p
//***************************************************
: p3 w; e' J) e4 O2 v& w//             __________________
2 `2 C" _' S7 P: S7 P+ Q5 N, d( E1 a3 P//             VDD-| 1            8 |-VSS
1 {+ A3 |/ A5 @//             GP5-| 2           27 |-GP0/DAT$ r, N/ S. J0 D' a* ^1 ?/ B
//             GP4-| 3           26 |-GP1/CLK
+ g2 I! R$ h( F8 m8 Q+ H//GP3/RMCLR--| 4           25 |-GP25 }# ~4 x# N: c; C- s' M
//             |________________|
  @+ ]6 l6 f) ~6 V2 q. R2 l/ x//               12F508) ^% v( ~. w5 s$ j1 a' f
//***************************************************
- ?8 g) a7 D% P8 k8 c( F* b  K8 F
//定时器模式试用- ^+ M, m2 _5 X, j' y# x
#include
8 s" C+ p  H; l# f" }5 M- I; D#include
, x: z. O7 H0 r4 b
! ^8 E* ]; R$ F// #pragma config statements should precede project file includes.
: w4 h6 R9 Q' `% {1 s  y// Use project enums instead of #define for ON and OFF.
2 x/ s' [7 r% b+ G% u+ P  B/ V$ Q: o' F- b" T8 y1 t
// CONFIG+ c5 }* K* F( p3 G
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)5 \" }; |* j7 p6 D8 A
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)7 w5 l" q& ~1 g
#pragma config CP = OFF         // Code Protection bit (Code protection off)
" q) n/ R6 t) J% r#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
% t/ p+ M9 i2 c/ U: V# P& o" R7 Q" R0 H, Q1 R
#define uchar unsigned char8 S) D& \" o1 Y! ~2 u6 k
#define uint unsigned int
# F# ]5 G6 W+ @: ~uchar  count;
* v) z- w+ T+ ?" u' J" C8 s//uchar  GP3_F;2 I0 O! Y+ j) e5 s* c7 W  @. B
void Init()
) y% \5 f0 A2 B" ~- l1 |{) b( ?& @/ Z6 W* U$ L' C3 @
       TRIS=~0x3F;  //GP3输入,其它输出% d; t: o+ Y& }) f5 l0 n# E& \2 p
     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
0 ]4 g7 l  q# K' P: Z. Z9 Q  p     TMR0=0x63;   //10ms x=257-tJ/4F
$ x( ~( K$ d% x& [}
7 g2 }- h1 ~" v) D" j& a) dvoid  main()  p3 Z9 W+ |# s9 e" \5 X9 s
{  1 y3 s' u+ n% U6 k. n. u6 u
Init();  1 a$ d" b( y% Z# u3 `
while(1)' j8 M, n3 b& b! K
      if(TMR0==0xFF)6 o8 a: ^5 @1 W' K' k  U
      {
0 a" P( L4 e; Y) f) U       TMR0=0x63;   //
+ t# f6 _4 a, \% w" Z& R- v       if(++count==50)//1s
0 C1 {) n1 z5 b2 i# S+ h$ x6 Q        {
, `' x/ Z  A# W3 \' `         count=0;
- }/ U0 Q# Y+ y/ |! z$ q: L: o! K  ~1 d         GP2=~GP2;//LED闪烁
1 b7 }( C' J* e9 n. n        }
( g/ C- \) e. Y       }+ f/ j9 @2 x! k+ u0 P
    }* E) e  G6 M2 x' O' @4 n
} 3 c7 ^, ~0 y+ b' K/ X
. v3 @( B9 a' f) t/ z6 N3 f

. F. e  ]5 N3 c$ L4 o: aPIC12F508单片机学习之二——看门狗和休眠模式试用) O4 m$ Q' W: B5 g" E
! g4 y0 R' j; ?9 U; e
PIC12F508单片机是没有中断的,复位情况只能是查询方式。& p+ r: W. E! K* [; C, A& z
% E# ?+ M4 c/ J
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
& c3 u- n% E" X; M; F6 [- i
3 \. D; b7 A* }( Z2 U下载器是PICKIT3.
; a* k/ h" w5 o2 W4 \  X
0 {/ w7 w$ L: F! I/ Z//***************************************************
; @: f4 f* e! a: }6 ~+ s5 D//           __________________: Z) b& r$ \$ u2 u% N8 {9 ^
//       VDD-| 1            8 |-VSS5 o7 z7 ^: A, w  t
//       GP5-| 2           27 |-GP0/DAT
7 S9 L8 C( c4 i* _//       GP4-| 3           26 |-GP1/CLK% g$ {3 e5 m5 S; y3 V6 o$ T. H
//GP3/RMCLR--| 4           25 |-GP2
" }, N0 M: K/ n' |4 g$ o1 L4 S" C//           |________________|2 x; ^/ z! Y( {8 ~( R( g: X/ H
//               12F508
2 M% q, B* z* W$ J//***************************************************
. ~7 }9 t4 J  n1 g, L0 y) q' V// 看门狗和休眠模式试用
0 n& L" z1 {' h2 D% G- Y, ]7 q6 `7 W% N/ N: |
" ], p; E  A, w! ~$ t0 j
#include& \' |( X0 @  ~7 a  W* z8 ]& d/ {* Y
#include/ D! B/ o7 G, U2 ^0 ~- ~. z

7 z2 G: N" v" i// #pragma config statements should precede project file includes.
1 P4 Q6 i( r; I// Use project enums instead of #define for ON and OFF.) W$ W0 Z3 ^+ K3 h% I1 l

# U% ?4 J' V1 j5 q- u; x. Z// CONFIG- @, p2 s" ^+ H  O9 f
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
: o/ H. C- |, X) q2 V8 S8 x; O4 n#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
  A$ j  y7 B  k3 l3 }! I#pragma config CP = OFF         // Code Protection bit (Code protection off)
; X5 _# l$ g" B: w* ?9 Q8 l* P#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
8 C- u# M  U8 X" c
- g4 r  z# @0 l+ L#define uchar unsigned char" P4 Q9 T- ]% \2 v8 S) o% b
#define uint unsigned int
: S- P2 N7 B$ }! Fuchar  count;
/ F/ [4 B: v" Q& }# h# u8 c( D( V//uchar  GP3_F;+ R1 a6 V( N3 ?+ E  i5 ?' M
void Init()  W5 s2 s# M8 ]8 `6 n) ]: m8 y1 P
{; j' i0 m0 n3 X! B
    TRIS=~0x3F;  //GP3输入,其它输出: g& q7 z2 ^0 M0 {; j# o9 q
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
2 \) \! D' m9 M9 \1 L}  W! H+ H" O; ?
void  main()
" a* S! O. W. y1 Y0 P{  ; v* V: Y# V* c$ U9 R- G
Init();
6 {% s4 C; s2 t0 b/ C; J) Q# S2 v4 \! e6 Y6 B
   
; d1 h0 D: x( s: ^) `+ m8 o/ N3 nwhile(1)
/ |9 p3 v5 ^5 u3 _+ B. p# K% N     {
6 @" w- d2 f; m6 o
4 @! T" Y+ B: c) l    if(nTO==0)      //看门狗引起的复位
* I& D, H+ B% O   {' j- \( I# _) S4 l5 ^
      GP2=~GP2;
# r, C- V' Z- l( h+ T   }      C: _. k9 f2 y8 _
         SLEEP();
4 L' y+ G& i  u5 Y3 b    }
. _: }5 y+ B# H- D! D$ M6 G}& c6 i" V0 w% K( w+ g
' U# O' A$ B$ v' e

2 s1 ?! L! ~3 d: |) ZPIC12F508单片机学习之三——按键唤醒+ t9 D) }4 X- E' D( K% n
  1 N$ {8 d1 |3 J+ @; X0 A0 V
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
4 i  W! G8 Z$ y" m1 ~
; d8 A6 c+ V! h2 _# X& |# m& H. z# I编译器用的XC8,编译环境IDE用的是MPLAB X IDE。! l& D/ a2 K, K

+ U% }% T, W+ V0 O6 h下载器是PICKIT3.4 u8 M; w8 M5 m" |

, C3 U# e4 y, n6 }( k//***************************************************3 i, O: s# A' e1 c; z) A( M+ L
//           __________________
  n* r) s( T. Z: |' u  I& }( K//       VDD-| 1            8 |-VSS9 W& q$ O  C  L1 [! S
//       GP5-| 2           27 |-GP0/DAT
- n4 w- |& U. @( w. v//       GP4-| 3           26 |-GP1/CLK4 J3 q: ]2 d0 C& j
//GP3/RMCLR--| 4           25 |-GP29 d. v/ C4 o- L" v4 E$ S6 w
//           |________________|
1 S5 w) u' ?, s) h7 }//               12F508# q5 G4 X( G8 m% B' n! t# R
//***************************************************# g0 U4 G# l0 a2 T/ k4 e3 n
: h* D( y- R5 R! }
//看门狗 休眠唤醒
* s; f' \) k" v; g  e//按键唤醒
! I% c% ]9 w9 g( |4 j+ f! Q" r& s. g7 l; B$ `8 Z
#include
& s) h- |- _7 N0 }+ v  V5 }/ I#include5 O5 w9 t& i; p; a
! m; I2 m) X; c. ?' n
// #pragma config statements should precede project file includes.
! q' u$ ^  }5 J  W$ h; f// Use project enums instead of #define for ON and OFF.
) s/ k# e' w1 q) n5 ~7 c: \0 c4 `0 L# O% L2 z) S' s
// CONFIG
' Q6 u$ _/ \( {3 D#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)1 E- j* f8 B* u4 S
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )9 x$ ~; \) W2 M
#pragma config CP = OFF         // Code Protection bit (Code protection off)
1 b  a! N0 r3 q. C9 C8 b3 W% r#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)7 J7 K% x, s3 _8 A0 s; n3 k

9 y. O& K# R7 s9 @9 e( ]#define uchar unsigned char6 u$ ]) r1 u2 Y
#define uint unsigned int
6 d* d# C0 [( w6 ~3 h0 u#define LED1 GP57 m7 i2 J& p# P
#define LED2 GP4
# @6 p1 a! \* o#define KEY  GP37 q6 l+ ?- L/ w8 F
bit   KEY_F;" U0 J- S/ m! U4 T! `8 I5 k  @+ K$ z4 n
uchar  count;
+ _2 H5 A  V! O3 ~//uchar  GP3_F;: d' Y$ Z! ^5 |% _5 o
void Init()  n* I0 ~  h9 u9 r" f( d  b
{5 G- [, o7 e) l! _6 A* G! B6 `# |
   TRIS=~0x3F;  //GP3输入,其它输出
& G) }4 W2 i& g. w   // OPTION=0x07; //这个寄存器上电复位均为11 i, D1 ?) T8 G/ F
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S9 S$ ~/ B3 G! C& X* V
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S
& _' D, y! X( y( }+ s) \/ Q8 ?  // TMR0=0x63;   //10ms& g5 k, W. T7 W7 A3 [' b5 f1 D
}- }# _% f3 v% S
void  main()
: w+ c9 Y9 Y+ h4 Q. @{  0 S3 |# q1 i% }( e  ^4 g+ G. z4 Q$ O1 M
Init();   + C$ W( j/ \3 \$ z
while(1)% P* Y) e+ a. I  \( b1 E
{
4 P7 O& w1 w4 a# I; _) X    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒
. ^. m' J( }& C( _' p   {* u: F( U7 n" ]
     LED2=~LED2;
& K6 n4 P% o: v$ `   }+ u' [; Q0 R" [2 t& }5 o7 e
    if(nTO==0)      //看门狗引起的复位4 B- K" }. G/ ]$ Y& {" S9 s
   {
7 w! T/ n: K9 E      LED1=~LED1;
7 \1 n! k, G. \   }
" V/ _; H! |0 f         KEY_F=KEY;   //读出休眠前的按键状态。- j* s! O- S6 B# b5 D7 Y  I, `; A
         SLEEP();& V1 u5 n& l: p! v" U
    }

该用户从未签到

2#
发表于 2016-6-1 17:29 | 只看该作者
谢谢楼主分享!!

该用户从未签到

3#
发表于 2016-12-12 14:18 | 只看该作者
楼主辛苦了!
, R: ]" s# z5 E2 O0 p: `! P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 11:33 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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