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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PIC12F508单片机学习之一——定时器% _4 k) c! J1 z* b! ^- R. ~

8 m* l) t8 r# h3 q# FPIC12F508单片机是没有中断的,定时器只能是查询方式。$ ]5 q* I6 A  n+ b" ^0 K' ^5 ?! H

' m. C: a; p6 Y4 Z编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
' P3 D! \* z; z1 s: e3 _' {( g$ ^7 b* |" U" x
//***************************************************
0 V1 b  N! _! a( A: L+ R8 q) j//             __________________
2 q( O! m: h4 K) P' l+ U3 B//             VDD-| 1            8 |-VSS" L+ Z( J; M3 D. d% _
//             GP5-| 2           27 |-GP0/DAT
' K/ I* l5 K( f$ W% Z! G; w! w: w//             GP4-| 3           26 |-GP1/CLK
! |; }/ O: v7 y5 W5 r! ^' V0 H//GP3/RMCLR--| 4           25 |-GP26 u. p: V: D, I" r
//             |________________|
7 R; R, }1 L0 D//               12F508
9 |7 E: I& I0 B$ k* V//***************************************************
" Q6 C' f0 Q- U+ A  ]9 m
* g2 k( c! i( }' t//定时器模式试用6 ?- g& W: W/ Z& X, y9 t# R6 ]
#include
- g6 c+ d: b0 `8 u* W#include
5 X# @8 Q1 C& ^0 m+ v0 f% k- n
; |7 O* B& Z/ v9 S0 `: h0 e// #pragma config statements should precede project file includes.
  N( l8 E" i* o$ u/ e// Use project enums instead of #define for ON and OFF.( M0 O  C5 S7 i$ F: e% K$ z+ Z
% `2 a1 h/ T6 a6 f% E& B8 Q
// CONFIG
& j+ Y( N# |8 m#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
, y5 v6 d8 e9 }; J#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
" J% P! b  w. H3 |#pragma config CP = OFF         // Code Protection bit (Code protection off)6 R& @3 Q- o+ A
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)3 [2 P; Z9 S, v: j* Y
# C' e8 d; P) W3 t: u
#define uchar unsigned char
) z3 c3 d; r' D/ b  x  j5 `#define uint unsigned int
( G9 X( M7 I$ Z' f2 W7 g& N) w. Cuchar  count;
+ f6 W# |3 o! ]6 X* c//uchar  GP3_F;
( h  d9 U9 U- i9 Vvoid Init()
# q: @! y6 `/ V# h9 `" O{! N# h' K0 s9 ]9 z5 m: G6 ~, R3 m
       TRIS=~0x3F;  //GP3输入,其它输出
$ n' _9 Y5 v9 R% g     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
( K, w, _3 |# `* z$ j     TMR0=0x63;   //10ms x=257-tJ/4F/ Y  L/ x& O& D% w" X
}
% y5 |' Q6 i$ Q5 kvoid  main()
3 g! u6 q* i/ Q; X0 |{  
4 ?5 [0 H) ~" i; ?+ A# n0 pInit();  ; K+ e4 J: }4 Y7 g1 E+ |
while(1)
/ c1 T% R' t1 @# M! S4 R" T. n9 q      if(TMR0==0xFF); K& k% ]% Y$ ^0 z0 Y
      {
0 z4 u1 g/ }3 E+ L( j& |       TMR0=0x63;   //
, B# H) E( z" |$ x/ E( |       if(++count==50)//1s; p, f$ }# v6 n4 i7 x- d
        {
/ q! m9 P. q8 w5 Z         count=0;. Z' p* _( v& t4 U
         GP2=~GP2;//LED闪烁1 f# w# Z( Q9 _. D3 R4 `
        }) e/ A5 M  N4 F; t* S" L# C
       }: @. x7 x9 Z: L
    }4 T+ I. `% x1 Z* p
} 5 J3 [: A3 M6 U0 `7 |% N  h6 Q
# Y# U( Q8 a9 z! c5 K9 R- N
5 b8 P, K; s; G! c1 d( z; Y0 H0 T
PIC12F508单片机学习之二——看门狗和休眠模式试用
/ d2 f! a/ |$ w+ E' g
2 c- x  Q: E3 J) CPIC12F508单片机是没有中断的,复位情况只能是查询方式。) q& |0 @/ s' \3 N4 O

  }- F4 t# u7 G2 b- ]8 N编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 f# n( c2 a! T5 F. ^
( W3 s7 e: K* Q4 ^6 {: a$ a
下载器是PICKIT3.5 L/ S& w+ r. u! m# w" a
$ X2 c1 G9 A( F& ~
//***************************************************
  f2 z4 A" W1 \/ W2 N1 _' ~* W# [//           __________________# r1 }1 c7 W: w3 L% K$ {0 l4 e
//       VDD-| 1            8 |-VSS
/ A( }8 L( q, q9 x* U0 t//       GP5-| 2           27 |-GP0/DAT5 ^0 k( h' ?! [3 Y# h
//       GP4-| 3           26 |-GP1/CLK
, a( S3 r) B5 Z2 w+ H* R8 v) o3 a//GP3/RMCLR--| 4           25 |-GP2/ R. z0 W7 }6 q( I! s# z; K; y- Z
//           |________________|" k/ f+ h! J8 j( F- G7 Q5 Z
//               12F508- `/ P4 p; Q( q! |) v
//***************************************************0 I+ F: o+ t2 }9 ~) O
// 看门狗和休眠模式试用# k2 ~: W+ E1 C$ F4 d( ?

6 J% J, a3 U, `/ j' h( G, g* h# B& L& G6 Y& L1 o5 t' T
#include, v& w3 L9 S9 s, G3 v' ~. P
#include0 {8 L7 i& g- W* {. d8 g' A$ A

0 J8 c0 {# v7 V5 _" z// #pragma config statements should precede project file includes.
6 F, ?; c9 G3 K2 G// Use project enums instead of #define for ON and OFF.
1 o; W+ \- @: @+ Z7 a) [' ]2 o
9 c7 U4 {; `; \/ [% |0 M// CONFIG  j* \( l- l- s+ D1 L( V
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
- M( a- \. Z) Y#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
/ A6 [# V$ G! h& \#pragma config CP = OFF         // Code Protection bit (Code protection off)
7 Y. i7 L3 N; O+ [$ w7 a#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)  ]8 Q2 s7 u: ?; u
# g) @5 _  ?  A" j% c. P( S4 c  |' c
#define uchar unsigned char. o% c, y, D4 D% w8 Q
#define uint unsigned int! X- P9 W3 }* F. H' J- h
uchar  count;& J7 {5 L9 e4 y0 I- ^
//uchar  GP3_F;/ y1 Z" o# g3 h* V
void Init(). w: P& N- y: U) e8 x- X, y
{1 I) `0 a2 {& S1 ^+ b) g8 D
    TRIS=~0x3F;  //GP3输入,其它输出& t; c! G8 W/ Q# _1 w
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
- B# n, d0 i/ n}
% k5 K4 Y0 m' l  [! Zvoid  main()8 K/ o  B6 c$ Q& B5 V
{  
$ n! k& j( G& H6 w# P* `Init();5 W: d8 t; Y7 A8 ?
( I* g2 B' A/ p% v' b! V
   ( q$ a- R- ?! c' w" \
while(1)
, {# ~2 n/ A0 m& `     {" C- j& s- u& u4 V0 z
- {; G2 C: S0 D( S7 E
    if(nTO==0)      //看门狗引起的复位, I5 K: h  |; ?& _+ Z$ ~  @9 x
   {: ~3 w+ f% z4 ^& ~( ?8 n& X3 \" D
      GP2=~GP2;' }  A% d9 H+ G  I5 t2 S
   }    2 W# u& q6 C6 r! d2 c/ x
         SLEEP();
" r$ ^, `( B; j" U% s' Z% g3 ]$ n2 d    }: A7 a3 K- X+ L, }, G+ ]
}
4 d% p  J) j4 {3 c8 y( }( Z3 h# E5 h7 b8 _1 t, S

/ F5 Y) _, e2 ~, jPIC12F508单片机学习之三——按键唤醒0 m- ^# s& d) W, O' B7 X# e; q
  ! d7 m& c; d; a. o* }9 H$ _
PIC12F508单片机是没有中断的,按键中断只能是查询方式。. d- M. z8 p! l" J, X
+ P$ g! h! {: H" w+ `6 P
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
& K9 K! p0 p4 X5 z& S
- g( f' ~+ {7 U* _, y下载器是PICKIT3.: x$ p! L5 |' t$ S
" u0 ?+ {# r8 U8 S
//***************************************************9 G9 _( r  E1 h/ g, I% l
//           __________________
* E' ]$ F3 [6 g0 J//       VDD-| 1            8 |-VSS
/ A. q# D" }2 E" C//       GP5-| 2           27 |-GP0/DAT
4 t$ X3 u) Y; Y7 T) R: U//       GP4-| 3           26 |-GP1/CLK
1 i! x* c8 \& {- T' a$ h) g//GP3/RMCLR--| 4           25 |-GP2& W4 z% H. ~6 K$ G6 N7 S8 b: B
//           |________________|3 M% Q9 R9 [) J3 |1 H
//               12F508/ d' F2 }7 A) e* D: n8 `" X
//***************************************************8 C! K; }! O( I- K. O0 K

2 M7 H% c) k1 m8 {9 [//看门狗 休眠唤醒* ?- l" b- F+ g, q  m
//按键唤醒
9 W. v$ [! r( @1 A& ?+ W/ V8 I4 w* d" C% A2 @
#include. Q0 A* ^. L# H% S. _( L
#include5 S! J/ R: g7 `# l$ u+ z' T5 E8 d
* p) w" D2 Q; d- Z
// #pragma config statements should precede project file includes.
  K, r. a# N9 @, h// Use project enums instead of #define for ON and OFF.# }0 D9 d( c$ j) }5 _

; a4 W' U$ C- A2 o// CONFIG
# ?$ l$ c* L5 ^; S: S3 G#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)! n, F/ W' X& L) n3 y3 b
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
5 u& w3 U3 {# C; E- V& l: D/ l( z) F#pragma config CP = OFF         // Code Protection bit (Code protection off)
. g) V0 ?6 f& ~/ s9 e0 s3 e#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
; [  r5 ]! Q, n6 j" o- d
$ V" b; N  W: p! {, K#define uchar unsigned char
1 m0 y4 X6 M! z* C1 F9 y1 x! _: }#define uint unsigned int5 W: T3 }/ g( r5 J: ?
#define LED1 GP5
* ~8 y9 P6 b# g# c#define LED2 GP4
7 D+ C7 F* R- R' s- j# V# t% ]#define KEY  GP37 n6 K6 \; g; [  h4 C
bit   KEY_F;
( t+ B# }8 i$ O# Z9 uuchar  count;
% N$ x4 c# x" u7 m! [4 B8 ]//uchar  GP3_F;
+ x6 A% I9 a5 {/ n2 q" \void Init()
7 E1 U( ~* L9 |* w! @& C" d' g. K{/ b* I  a$ M% m6 h1 o% M
   TRIS=~0x3F;  //GP3输入,其它输出
- D) c& L8 {+ M0 I9 }   // OPTION=0x07; //这个寄存器上电复位均为1( |% E6 ~$ [6 F1 s9 u7 O
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S+ _4 u5 V2 v8 c/ c! M# N, l' f, ~
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S3 n8 K5 \# X; G! {: |; p  b
  // TMR0=0x63;   //10ms9 A+ y2 P* O, f& j
}
% L% [' j7 }* U$ `( d. U8 R2 ^$ vvoid  main(), X2 H  H% U% J/ F- w! K, U
{  
6 t# Z9 q7 _0 [! T* @+ V& M* rInit();   ( X+ x  v# ]2 U# H
while(1)
) t1 j6 \8 |# s. k{
0 g7 ?1 [7 q6 G8 ?& G& v9 z    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒
+ C% T4 J* \) x. I7 M* D. x   {
" T/ k6 @$ _4 a     LED2=~LED2;
; k8 D. u. ]) V   }
8 a) t, V9 C- p2 x8 U. @    if(nTO==0)      //看门狗引起的复位
, |% v* f' F- V; E0 ^6 h   {+ D6 z. X& P9 y1 C
      LED1=~LED1;
9 ?, S8 S, @& f5 O: R   }
; ~+ a* A3 }8 V) U- G         KEY_F=KEY;   //读出休眠前的按键状态。
$ }9 [* e# O9 }9 Z6 r- v3 r         SLEEP();0 ^+ q0 t* W8 s1 p9 Z
    }

该用户从未签到

2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步7 Q$ X) g7 }. u5 d% i

该用户从未签到

3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!
- s2 t9 w% }5 f& B
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 07:25 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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