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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PIC12F508单片机学习之一——定时器4 u6 _$ x, k# e  w1 D% A7 T

5 L( b) i/ M9 T% _; QPIC12F508单片机是没有中断的,定时器只能是查询方式。
, T5 L1 A' t  _6 p4 V3 s7 V/ Q' s( |* h9 I$ h
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。0 s. _* N( `+ s5 ~) G2 Z

' T6 w6 `+ \- M# l8 S- x//***************************************************
9 |: A6 g8 i9 c1 O//             __________________" ]- k+ b0 ^8 _/ L! \$ @
//             VDD-| 1            8 |-VSS
6 Q. Q3 w% {  s; X//             GP5-| 2           27 |-GP0/DAT
) L  l$ L" I4 p# d% J//             GP4-| 3           26 |-GP1/CLK
6 f) B2 k( E- S//GP3/RMCLR--| 4           25 |-GP2
+ W3 T) @# L0 U6 |! Y//             |________________|
+ g0 U1 \% [+ d  n1 ?, Z2 {- t: w//               12F508
+ F! r/ a9 \$ L4 y% T4 u4 P) x//***************************************************
! x6 ~! w, W% E% V/ i  p8 E, G8 L7 D  M) q) c" @
//定时器模式试用
& Y$ F5 s- E% U#include
4 d5 t% k2 _! c#include8 c' f# a/ H3 L* n

0 u2 K6 B. E; i; w// #pragma config statements should precede project file includes.+ ]8 g0 ?  ^, l4 d! A
// Use project enums instead of #define for ON and OFF.( ~* `6 Y& i2 g3 K
6 Q. H7 o8 ?8 \
// CONFIG5 Y0 c( O7 x8 R6 J8 S3 `( S
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator): K5 \8 r* ?& f# N0 ^
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
8 M& ~- _/ m. j9 [#pragma config CP = OFF         // Code Protection bit (Code protection off)1 D# f* J  d9 ^2 F: S$ t/ [7 Q
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)5 I6 s+ S) Y1 O& c
8 J/ U; h- b4 |2 ]5 W
#define uchar unsigned char$ j* y6 E. \4 y% o0 l
#define uint unsigned int
. a6 T+ a- r) G, j# h' Iuchar  count;
, I1 {- U: ]8 `) i+ c3 x//uchar  GP3_F;5 w# W. Q( E0 J* s
void Init()3 S4 z7 @/ A6 }9 I+ F
{
& R- C8 j2 g& p% K8 ?- L       TRIS=~0x3F;  //GP3输入,其它输出: K( n6 J/ |3 |
     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F5 P. M+ R8 R2 i
     TMR0=0x63;   //10ms x=257-tJ/4F/ u) M# T- B2 ~+ k
}* U8 P2 a4 m' o$ S" H# ?
void  main()8 ?$ J7 [- ~: F5 ]# A+ R
{  
; W2 `" n  K  ^3 m7 Z6 ~- B) [Init();  ! f" |7 H* S# O5 \+ }- z& x+ H, S+ Q
while(1)
5 b* q2 S5 {( w' X4 K; I9 `% K" V      if(TMR0==0xFF)
7 C, x: D( z2 r! n0 D0 I- z0 D      {
; {& l* i6 j, M: C8 q8 C; s       TMR0=0x63;   //
' m) {% p, V& }# _- W5 H" S. C       if(++count==50)//1s
6 f7 ^# w$ O& V, i& R) A3 ~        {
0 m' u+ `! c* z         count=0;
4 N, ?6 V! q+ C         GP2=~GP2;//LED闪烁" V; c1 O' [/ y+ U3 |. e
        }
( M4 w$ Y+ V# o9 [       }- F2 \$ t$ D* H/ |2 `9 j7 t
    }
5 r; d0 _) U7 c7 e: d$ {. x8 m- l& G}
! ?( B' S' X- d- @& ~1 [2 |6 @
8 n4 m) l3 J/ L) C2 \' k- J% s
) a7 O  b; `4 l! jPIC12F508单片机学习之二——看门狗和休眠模式试用/ H5 A6 U- ]% g' c6 J7 j

  {- D+ M% ^8 N% ^9 ?$ K7 I" fPIC12F508单片机是没有中断的,复位情况只能是查询方式。5 x( C$ g8 G: U6 ?0 k, O

8 x! u8 U$ H+ |( j, z编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
2 @* c8 `8 B- a$ F# t( u* `! u9 M/ N7 O# r4 C) a
下载器是PICKIT3.
. U0 D; G; s! b- f0 p& q0 n( A! u; j0 i+ x' U
//***************************************************
# V5 K8 U+ \3 S" y6 W//           __________________
3 z% z' K, `9 K& T9 |* b//       VDD-| 1            8 |-VSS
0 K/ C) D% A5 R, `//       GP5-| 2           27 |-GP0/DAT+ J2 f2 P* h, d0 P5 t: \; J6 K
//       GP4-| 3           26 |-GP1/CLK
6 ?( @7 b) x8 Q2 m( k//GP3/RMCLR--| 4           25 |-GP2! u) |1 Z5 A# b, X3 \+ e* @
//           |________________|
8 u* K% y0 `* G//               12F5080 b4 r4 {1 s& `( ^* T, _
//***************************************************
2 Y; c; }8 o& Q, V: J$ L3 g" m// 看门狗和休眠模式试用! ?5 S9 V1 U+ f0 n" q

8 \6 x2 _$ r% X1 {  L1 w% P3 u4 ]; Z$ T5 \" R* j
#include
: i$ C3 d: Y6 k#include1 t; @% f( X7 V- s, L0 p

; t7 {7 R0 k' S# I+ K// #pragma config statements should precede project file includes.
% @0 {$ ?6 S# t4 a9 s. H, Q4 `$ l// Use project enums instead of #define for ON and OFF.
7 T; Q( a; X7 _1 I3 P) h
/ m, X6 h$ v, X" `// CONFIG! j- H" _' {0 l# z9 s/ x. O
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
) O) w; s2 b* N& o#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
6 ]7 a- l: `0 ~: r8 a6 a#pragma config CP = OFF         // Code Protection bit (Code protection off)& E: V7 V  Q7 v# \" o+ N6 w
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
  ?) H! W% g% A! M1 f' X. K* g
3 H% D; K! I7 w- ]3 }4 P#define uchar unsigned char
' E( e6 X5 `  i+ |/ t1 w#define uint unsigned int8 m- e; g8 V1 ^2 W" G
uchar  count;' C, T- s: s% z% C. x+ h" v6 H
//uchar  GP3_F;4 J: g, u& V1 Y  |
void Init(); K2 A+ ^5 K2 A0 w2 O- l+ M5 I
{. X% T8 Y! |, E( A8 @' ]. A1 W
    TRIS=~0x3F;  //GP3输入,其它输出6 ]+ [1 @5 e- S$ i
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S6 o! D3 m6 f7 ^, U1 M
}7 t5 q; u1 h7 h9 T$ J$ @- j
void  main()
' z# r. A, o1 Z+ r3 \{  
0 U# Y0 D% z. t$ L! @$ ~Init();
+ \% a3 D; [, J/ f( X( Q& Q" O: w& E7 y0 I7 H" z* [
   
' c1 @; M( ?) m7 o: Q1 N, dwhile(1)
) e9 v2 n, |, h  S- F; c     {* l1 Z, ?" B, j, D, L

1 Q4 k" y) n! }    if(nTO==0)      //看门狗引起的复位
9 ?" f9 K3 v/ h% R8 w: O( z   {
, M5 }& W) H: i6 `) G      GP2=~GP2;; L4 x9 F4 H8 c# S& ?; ], y- z4 i
   }    9 Y! k: _; m( ]+ R  w$ f
         SLEEP();/ Q- R2 \; i7 e
    }
% S$ }+ v8 y% k& z* v" D# K}$ Z6 g; S% C+ e0 a* N( d1 a' ^% D
/ ]1 q* h2 R6 M  z

4 ?6 H9 C9 l# u- d# oPIC12F508单片机学习之三——按键唤醒; m0 d" i4 K2 b0 z' o( X; v, [
  1 H# \* z8 N7 X( ]# J& v& l
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
$ y9 W. K! j. q! d# l
: G+ _) W- i* ~7 h# w3 o编译器用的XC8,编译环境IDE用的是MPLAB X IDE。+ }7 o1 O! |0 `/ K

3 X! }2 E& x1 U* i) S下载器是PICKIT3.5 B8 S: i; i5 E! E. _# I7 N
+ E- u' r8 f& s9 K& [: @
//***************************************************' I  O6 J1 J  G5 B5 m/ h
//           __________________
6 _+ @3 F6 u0 r) M' w0 O7 y//       VDD-| 1            8 |-VSS+ L0 H. t0 L) `; W" \, {- ]* Z
//       GP5-| 2           27 |-GP0/DAT
  D* d2 [8 z+ p, L//       GP4-| 3           26 |-GP1/CLK
7 J  v' ~" U* K% H+ S//GP3/RMCLR--| 4           25 |-GP2# C4 q* g9 ?1 r0 K( ^( h* _- R3 Q& `5 R
//           |________________|% g! ]9 w' Q6 p, T9 `, X
//               12F5084 Q/ [- O* |6 b% U9 Q# {
//***************************************************5 w1 S  K6 o' o/ m
, Z, l  h) H' G3 r' Z
//看门狗 休眠唤醒
2 O, b8 {/ T, N9 d; x* X" W//按键唤醒
8 Y( V2 X0 P# g# H( i3 c1 O, L. w1 L
#include
6 }( w! T# c, W/ }1 q( A& p& R4 d" j#include; c2 d& F! X7 i  M) U+ B
+ F7 w/ Y* X+ ?1 p. F
// #pragma config statements should precede project file includes.1 H& N. s" H; ]; D4 U% V- e% h' d
// Use project enums instead of #define for ON and OFF.
! S* H. ]! j! d; n4 o. t+ \2 k7 b
// CONFIG4 a+ H6 u& y3 K2 R. v- L3 U+ \) g. y2 P
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)) [) j6 u7 E/ X$ V6 g
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
( Q4 ?' L3 }8 Y2 z) c8 p2 T6 B5 N. ]" U#pragma config CP = OFF         // Code Protection bit (Code protection off)
- R. s/ e/ l4 S9 v#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)) p) ?( T0 ?+ X5 p  @! a  l% c
" R; f4 X4 O6 Q5 w, ^2 r
#define uchar unsigned char" z* B$ ]. Z) v6 D( d
#define uint unsigned int- F7 G/ a1 H6 i7 I. L9 Q( J
#define LED1 GP57 \$ d# t9 W8 B# R4 j9 s0 R/ T1 V
#define LED2 GP4" V9 E# ~' m) I. f/ u6 A
#define KEY  GP3
# ]& }$ t3 I3 i9 h: {/ i( M( Q2 kbit   KEY_F;0 E& S# F% k2 \8 c
uchar  count;. g5 ]. U; x% N! q0 w( v
//uchar  GP3_F;
' C  r7 }/ N# Yvoid Init()( F) v* u8 X- `" `; t5 y# _/ q  m
{1 j: d+ o. k) ?* ]' Z
   TRIS=~0x3F;  //GP3输入,其它输出+ k. `2 b. h3 I) N) K
   // OPTION=0x07; //这个寄存器上电复位均为1
4 @  S+ K" f9 ~/ A   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
2 u% t7 l! ]3 C* \$ o: o    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S; b- |8 g. s0 g/ h+ F
  // TMR0=0x63;   //10ms
! b* P. y: J5 Q4 u" ]! j. ^8 `4 p6 D}  P# ^4 E" [+ U4 L
void  main()% b) ~0 q: S) q8 S1 J6 I
{  
8 z  A' U& ~4 a3 p( Q* N7 mInit();   $ A* H) }8 F+ D4 }% Y
while(1)1 d3 b* K& }! l0 o+ D
{
- S6 I) V" [" c6 ]# p    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒  [8 g- [: V. ~3 H6 A& m& V
   {
+ M3 f0 z* V# ~% v4 V- E' j     LED2=~LED2;
& e3 p3 u) d# M3 O' @5 G   }
  H7 t5 [! y3 D7 ~7 I$ R    if(nTO==0)      //看门狗引起的复位3 m2 [5 t/ q4 Q* X: ?1 H( C
   {/ ^$ K+ b9 S" G" N  E# [$ [$ `
      LED1=~LED1;
9 k! ~/ H" g0 |) D   }
/ ]8 R: e6 s( P  ^         KEY_F=KEY;   //读出休眠前的按键状态。
+ z5 ^! a4 b( q1 q         SLEEP();
3 ]4 y  v1 ]2 K9 ^5 J/ e* a, T    }

该用户从未签到

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

该用户从未签到

3#
发表于 2016-12-12 14:18 | 只看该作者
楼主辛苦了!
* o& F7 S0 \9 K' v# P  E, E- a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-9 21:16 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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