找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 67|回复: 2
打印 上一主题 下一主题

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

[复制链接]

193

主题

569

帖子

1397

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x
PIC12F508单片机学习之一——定时器
& H6 Q/ `6 Y" q7 Q4 J* p$ e' A9 p/ V" q5 w2 K4 D/ S2 b+ i5 ~# i# ?
PIC12F508单片机是没有中断的,定时器只能是查询方式。
% i2 N. m" E* c& G/ L* ^  N9 ^8 m" X0 ?' H* {- f( o, d
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
  W# i9 g. ?( q2 ^) k4 ^2 ]6 U" P$ ]
//***************************************************
# h0 U- S+ C% K( g- [( J2 \//             __________________5 ^- Y* Z( `% j, q4 `- z/ l; q% ^
//             VDD-| 1            8 |-VSS% _0 P7 Z. w+ g  B; s1 x
//             GP5-| 2           27 |-GP0/DAT, W6 e3 ]  Y: V# F8 V7 J0 c5 H! v( {
//             GP4-| 3           26 |-GP1/CLK
# B$ b8 A& T: d; Z& C//GP3/RMCLR--| 4           25 |-GP2
8 l% W  u3 w, e% p2 S, `6 H; i* H3 a//             |________________|
3 [$ Q! U( R; S; E0 w" l8 }( h  E, b. O//               12F508# z" W" m8 a3 c$ }' c9 e
//***************************************************+ {# }# d1 O) V# N1 E( D0 W

: y9 P9 Z3 r2 s# C5 H6 i! U" W//定时器模式试用
0 ?( a7 K3 c  `# M8 F' d#include% u4 I' ^( N6 i) d/ G
#include6 N8 q+ t8 r' V$ b+ U' b4 B& ~& t
+ E! M( L: d5 u) }0 a5 s# Z0 n
// #pragma config statements should precede project file includes.# d' u! V$ R% `/ u5 |" S
// Use project enums instead of #define for ON and OFF.
9 X/ s, S0 k7 x
. V2 N* p- B. f. z// CONFIG  y( c1 J0 f# _% W7 r) Q* g1 Y
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
/ A% [" p( B$ n) C#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
$ J3 ~* K. R2 G' j) g( E. x2 t#pragma config CP = OFF         // Code Protection bit (Code protection off)
( x; U2 K/ J, s9 L, @; d- H#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
! J, m8 U- ]6 v' ]6 C" Z7 U+ N0 n* o. `
#define uchar unsigned char) C5 Z. Z9 e7 c& v5 D3 D# Z
#define uint unsigned int
/ s$ G( H1 P, r! y5 M, Zuchar  count;
: q: m, U% o  W/ Y//uchar  GP3_F;
, e$ E. j5 Q: \! O& k& u1 Ivoid Init()
8 x( U' o0 [' `3 Y% Y{
/ C- B3 h. c4 ~# q, z       TRIS=~0x3F;  //GP3输入,其它输出3 v9 s; Y9 q3 D/ P6 {
     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F1 h3 P2 @' w2 j, |# b
     TMR0=0x63;   //10ms x=257-tJ/4F2 d. I" V2 G( H, x0 b: q
}
/ ^- Q7 y, Z/ Y; J" z, [void  main()6 @3 b  p- \( ~3 }- f
{  4 t9 k1 i! a+ ~5 Z% s( w
Init();  
6 |$ M- A" i! Z  m1 z5 _while(1)/ X# Z* D- C3 |
      if(TMR0==0xFF)
4 Z0 D+ I8 ]% j, L1 O; @. O      {
# A* Q- G* S* l" h9 i+ b: q       TMR0=0x63;   //' t: X" ]+ ~0 c: E
       if(++count==50)//1s" s+ y7 W8 o# d4 f' y* `. {5 W
        {$ N: W, [: }2 _& [7 i6 `
         count=0;
# ]1 ~( G+ L( B9 N1 u, d1 x2 J$ k         GP2=~GP2;//LED闪烁
6 |) l4 ~) ~. _5 b        }6 ?0 @' e0 Z, p
       }
' M9 ^, Q* t# _" g9 h3 ^  ^    }- _: N4 \- N1 `. t
} 1 y% J2 \' D  g$ E9 K- ]8 d  z2 P# }& E

8 f, b3 j! t- r$ H
3 e) _9 @+ m2 U2 APIC12F508单片机学习之二——看门狗和休眠模式试用% \( {1 }0 P4 U/ n& W  R1 c

& F  w" T6 @9 k" E" n; qPIC12F508单片机是没有中断的,复位情况只能是查询方式。
, _  \  C0 M/ x1 n
( X/ z& y3 |3 T5 }! M, U, z$ ]编译器用的XC8,编译环境IDE用的是MPLAB X IDE。6 D5 a) d/ L9 k* o. a2 F

% r* }7 R6 q8 v7 t" K下载器是PICKIT3.' k- N7 n5 Z# b+ t6 d

/ H" }+ e# P- {/ K' d. t//***************************************************/ V. ~6 g' A% `/ ]4 G% X- z
//           __________________
. V9 N4 A4 V* c- F/ m$ `//       VDD-| 1            8 |-VSS
- N) d% [" L! U- q! Y0 t$ \  @( o1 O//       GP5-| 2           27 |-GP0/DAT; {1 x5 A3 T6 J+ x
//       GP4-| 3           26 |-GP1/CLK
8 U; O3 L  S7 E% W. ]6 c* x//GP3/RMCLR--| 4           25 |-GP2
) R" H  R) N* {+ v6 d0 |//           |________________|
  \2 p2 m/ o# C& d" q//               12F5088 u4 \0 a9 \7 c
//***************************************************
) z- e4 A/ ^. n0 o' g5 V// 看门狗和休眠模式试用
: Z7 F6 }3 R4 V/ ~4 o2 @& K: F/ M& s* w

, o1 S# e. D; [+ V#include7 D8 \5 X4 [  o5 w7 m& U+ X
#include; N7 {0 [0 C" o$ z/ R- @

" a( g' x/ V& ]* \4 \8 m+ K  Z// #pragma config statements should precede project file includes.( W# ^$ P# ^% ]. }+ I
// Use project enums instead of #define for ON and OFF.
0 b, g, T9 a3 E) \( p) B1 @4 O5 A# [$ K* P7 W
// CONFIG5 [2 @& L% [7 V4 k9 B" ^: k
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
" |  h% v7 y/ h0 _+ A% @#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
) }- |" a0 j! F+ R8 x. V+ L4 f#pragma config CP = OFF         // Code Protection bit (Code protection off)/ d) _5 l& z2 o4 ?
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
$ o/ |' K% s8 x' L
$ M, x5 O, B6 e: F4 G#define uchar unsigned char
6 d9 F/ r$ S1 s; E#define uint unsigned int' T: s' Y) `. L) E5 o) Z
uchar  count;4 h# j2 i+ w  R) K, e- C
//uchar  GP3_F;, Q- [: V, u4 H2 E, I' [$ y
void Init()
) O& `# X+ P! \% ?{% Y3 A& g0 `$ D7 @6 _7 B
    TRIS=~0x3F;  //GP3输入,其它输出7 F1 ^: q2 d( O4 I# ~
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S( e5 e- R2 U4 U, u( x
}9 a* K1 P+ K  K
void  main()
4 |4 W  c9 E/ c4 h  d{  7 B; ^  D9 [4 v) g
Init();
1 _  K4 f! O& }1 n" ]* @
; F' V, x9 x, b2 B   7 b) S* O3 c8 k3 C' S+ g
while(1)2 Y* T& S3 ?% H
     {, Z# k9 z/ ]* E/ e5 M$ t8 m

3 Z7 x( L8 d% }3 i% V. z    if(nTO==0)      //看门狗引起的复位
- X+ P1 v3 F2 Z1 ^   {
2 T) i) |" @2 M$ s% k! ]: l      GP2=~GP2;+ Z, f$ l. r. Q1 j4 n0 |
   }   
, \$ m/ }1 U* D         SLEEP();
' ?9 l0 s+ J7 C7 B& ?) r8 U1 O    }
7 \' o( z2 ^. `+ l; p}
( H* J# X# |! W7 A# Y/ S
: F& s% h% W) P% D$ S  _% U) t! h2 j/ S' Z: @* z3 I
PIC12F508单片机学习之三——按键唤醒3 `7 `( q0 Z* ?: d5 x9 ^& Q1 E
  ( L& i$ r( V0 v: h& r& j1 X: l9 C) f
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
7 x" r6 u9 z" K
6 K( B( ^4 Y! w9 F, E! u编译器用的XC8,编译环境IDE用的是MPLAB X IDE。# a. @  N4 N* J$ n7 M" G+ R; S2 U$ f
2 b, U! c. ?4 Y: E$ N
下载器是PICKIT3.2 f6 _  u2 p2 z5 [7 V2 p- Y

: k7 Q% h7 a) l- p//***************************************************$ |4 R( y2 S9 ~. A+ F
//           __________________
6 k+ A. n/ R! Z* O( Q- v//       VDD-| 1            8 |-VSS
; g8 K6 @& ^1 p+ B, z//       GP5-| 2           27 |-GP0/DAT+ k5 i9 H) P' l$ ]2 ~( i
//       GP4-| 3           26 |-GP1/CLK
5 ]: H* y6 U9 R//GP3/RMCLR--| 4           25 |-GP2, j: B7 F6 `  w0 V: v
//           |________________|
: |9 e6 [8 e& C7 ~: \4 O//               12F508
5 z/ [/ u- }& [% l9 N# S//***************************************************
! l2 }  _+ P0 m' v6 F. y- V6 p3 s( p  q: o! L2 K( A+ a
//看门狗 休眠唤醒
; C2 S( j+ D; {+ y, F" A//按键唤醒: }% K' O8 E* \4 A

3 o5 @/ x8 t6 O  T! M#include
7 S+ ?5 O; r  u$ O0 P) ~#include0 g9 `7 j  e0 J5 B
( ?0 t/ f0 B# Y! [4 V1 s
// #pragma config statements should precede project file includes.
% ]! P% {! L6 @2 u8 |// Use project enums instead of #define for ON and OFF.
/ n: u& N# }' {9 [0 v+ h$ {2 L2 l0 r7 ~& V: X3 Y% P
// CONFIG
4 n5 P: |9 E+ O#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
; z) e/ o0 @$ D7 s% D4 l#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
# c& v/ I, s  }#pragma config CP = OFF         // Code Protection bit (Code protection off)
  @- E  V3 }  `# Z9 e0 ^#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD); ]" @5 [, i  F' U' r( I' M* s

4 X; r+ F* C$ W7 l1 i7 d$ T#define uchar unsigned char
% N: y$ Q3 v+ s#define uint unsigned int  B: n+ R! f! d6 W7 R
#define LED1 GP58 E- |5 T* F  v7 y: K
#define LED2 GP41 Z$ M8 }5 W) _, E3 j+ ?& R
#define KEY  GP3
1 q- D& @6 |( s! u/ Jbit   KEY_F;
! q: `8 C( O' d6 ^; Suchar  count;- c9 b) q4 `1 @+ @# b
//uchar  GP3_F;% x  Z" J& J" x& |$ t3 G
void Init()
; L" F7 n- o* Z" G' I# Q, V0 c! |{
/ o6 x1 ~$ h/ J, B/ f4 L' M   TRIS=~0x3F;  //GP3输入,其它输出2 b+ M* ^/ `! i  q  M0 \: Z0 Y
   // OPTION=0x07; //这个寄存器上电复位均为1/ R! p1 o6 W* M. U' h
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
5 c$ H1 h: Q+ Q    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S
( f  R4 [' @$ b- c5 f' e/ e1 I  // TMR0=0x63;   //10ms
# Y1 I! X% [' N# O}
2 S9 s, E" n; ?+ [  o' `void  main()
2 w' H" i+ ^# c0 a9 y6 O6 J{  2 f- S7 y" ~; _7 R5 v
Init();   " J" r7 q8 x$ E1 b) ]& A6 p
while(1)% B% }  ?- {7 e* x  j+ I
{) A1 T6 X& R( l. Z! n( c- w
    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒
, {; m6 W0 J8 F0 K! K   {
# L$ ^7 n" R5 m/ \% S# O& i+ M$ _- o2 o     LED2=~LED2;- n' S1 _4 _7 J6 m+ V& n. c, K1 C
   }
0 B5 _/ L9 C! e* U$ \    if(nTO==0)      //看门狗引起的复位, @5 G% a5 P) b: ^! z
   {& _7 R# }+ K  _: u
      LED1=~LED1;+ Z  U% [9 K+ ?4 j
   }
" P& X$ E4 H% T. i         KEY_F=KEY;   //读出休眠前的按键状态。
! t  j& t  C% C" i/ i7 \1 I         SLEEP();
8 p' T- ?* F& f$ j- [% U    }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

163

主题

525

帖子

1236

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

157

主题

559

帖子

1216

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1216
3#
发表于 2016-12-12 14:18 | 只看该作者
楼主辛苦了!
2 |5 D( z0 G* a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-2 09:48 , Processed in 0.055647 second(s), 32 queries , Gzip On.

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

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

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