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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PIC12F508单片机学习之一——定时器
2 H2 N2 M! Z% V1 X4 |6 k4 O8 j/ V
0 z% y# w, }4 A2 ^! VPIC12F508单片机是没有中断的,定时器只能是查询方式。
* q! _! W9 |- _3 T6 M* F3 J
0 F, L. V( f9 q- M编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
5 \, ]* ^( F& x" X/ P( @  k4 Y5 n! ^( t' S1 B1 T
//***************************************************+ H" J0 i4 G: n5 [( n
//             __________________4 b  b. T6 {' H# _& D4 K
//             VDD-| 1            8 |-VSS" X! |0 f- E( O. K
//             GP5-| 2           27 |-GP0/DAT
9 r8 {1 b& A4 z; E//             GP4-| 3           26 |-GP1/CLK
8 S4 C  N5 V' ]) `9 q6 U3 N9 \//GP3/RMCLR--| 4           25 |-GP2/ J" K' |6 i$ N6 {% j8 k& h
//             |________________|7 N& @, Y  {% \; C; d- P" `5 c0 H
//               12F508$ p6 A# U! Y: x% S6 e7 C
//***************************************************
  y0 f! I" s" r8 Z' i4 U: d& d/ u: O/ Q3 d+ d6 i; c4 V( r
//定时器模式试用
6 w$ M6 s% ~* b) {#include
. x5 d, z, a2 |$ E" _#include
& x3 M8 `6 C( r4 O. ~- W. h; G* n! u! [; _3 p
// #pragma config statements should precede project file includes.
% Q8 @2 Y/ e0 s/ v" j" c// Use project enums instead of #define for ON and OFF.
6 A: a2 @: B. N. E% \. G2 L4 ~
' ^7 p6 Q, ~( F! a3 H9 L3 l// CONFIG
! d, T, o5 g( V3 L8 m" x- c#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
  C: o. _* d2 ?" x2 T#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled). v% d; p" W+ [
#pragma config CP = OFF         // Code Protection bit (Code protection off)
) e' B6 K3 K' j" ~0 j#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
4 X" b+ D9 p" p" Z
# @+ h! ~! f! q2 c' x3 J#define uchar unsigned char; i  r' A" V/ v& R4 b
#define uint unsigned int
9 e  t  m* E5 X! S% f: |$ quchar  count;& G  K- P; M9 f" l
//uchar  GP3_F;
9 q( f6 N; `2 p: d) `' Yvoid Init()7 P2 p0 ?8 X  z% T) `7 ?
{; O3 z9 }  x' Q5 `2 ?
       TRIS=~0x3F;  //GP3输入,其它输出
! k8 M. L) Q2 m6 D     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
5 n/ U/ w) P8 |' |  d4 y; u     TMR0=0x63;   //10ms x=257-tJ/4F
+ n6 M0 p* |0 p- U+ |7 c}" \3 p2 i& E( W" c, l" b
void  main()
4 Y5 j5 U# I7 i- J3 S: d- i3 E{  + j; A$ V. o' o3 G
Init();  
6 k2 u4 ?( d# U- Z! v; uwhile(1)4 J; t( Y: r" L# R2 n
      if(TMR0==0xFF)
, v1 u" G" t9 Q1 q! T      {
' {  c# F9 u5 ~2 h& B0 ~5 C       TMR0=0x63;   //
( k) C' I: a1 U1 S5 f       if(++count==50)//1s! ^9 Q3 s; J1 r2 q# ^
        {; k0 i5 r7 _2 g% ^8 a2 C. \8 I
         count=0;% t+ \# i4 A' p; R( d. A# {, d. S
         GP2=~GP2;//LED闪烁
& D9 @1 M" Z$ M7 y        }% i' Y9 g3 O5 V" b: |. L
       }9 @+ m# \3 s6 w: h5 M7 \
    }
, [0 v$ B4 j2 D, }' ?} $ @$ x+ q* s, Y, }
: f3 R4 L) y# S" r& ~% p, B& v

; @; s! D7 @* T/ x4 w4 ^PIC12F508单片机学习之二——看门狗和休眠模式试用2 s4 u! N! o' F: b3 @/ H

- X. b9 i& p( i$ oPIC12F508单片机是没有中断的,复位情况只能是查询方式。
; ?  e6 H: ~' o& o1 c; a9 p7 U, V7 E# T
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。& S' n! |8 J4 a3 W

5 R# P0 c) W5 `( Y$ \$ y8 N下载器是PICKIT3.
- M$ K- c% t2 ^, y/ ]- w- o7 [. Q  |$ O/ F3 B8 S, E; i) h) a
//***************************************************
8 T: A0 W" q/ D, M//           __________________; _. g$ z. B4 F6 t; T4 m  x
//       VDD-| 1            8 |-VSS
$ R# B( j8 T, y$ f6 Q//       GP5-| 2           27 |-GP0/DAT
6 h/ U& n) g, |, \& F: L% v4 R//       GP4-| 3           26 |-GP1/CLK
9 s; }# N: l. @4 T; z: w2 W* H//GP3/RMCLR--| 4           25 |-GP2( P4 [8 R0 F! \" m& w8 U
//           |________________|
! Z! D' Z) M( h//               12F508) w& B! E6 R9 V7 E3 x: j
//***************************************************- n9 Q. c# j8 m
// 看门狗和休眠模式试用! h. o. R& I  W( f4 B* q

6 ~# n; p. p) k3 ?* A9 s4 m9 q* `: R: d' y+ w+ k# b. S' f2 d$ x9 `0 H
#include  ]; C0 ]+ R& ?
#include' q( x0 X, T; q- C

9 ]* S# A: u3 v) \& b# [// #pragma config statements should precede project file includes.* m3 [( I/ W# Z/ O
// Use project enums instead of #define for ON and OFF.& t+ Q7 i# d1 ^7 U; w1 F5 o, w3 W
, L: o8 c: A6 _) a9 t+ ~
// CONFIG, _8 l. ?: P0 [& E, G& w  f
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
/ x8 R8 A  s, u  T#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )+ O( O4 R  z( I- ]) p- Z! `& ~! Q
#pragma config CP = OFF         // Code Protection bit (Code protection off)
8 M/ ]& A4 s9 o& j; Q' S: v% I#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
* ]1 ^0 b( R0 |4 j
% b$ u3 L* L: B* y. R6 {  T5 M#define uchar unsigned char, n5 s  m% t/ h$ i6 G# ~0 \
#define uint unsigned int: P( k* n% \6 P3 y9 R! O* I
uchar  count;0 q3 o  E6 v' N# q, I- }$ h
//uchar  GP3_F;
0 i" m. r1 g; C& c( x& i) D8 a8 Jvoid Init()
2 p) g5 l0 c. z, ^{
1 S& V9 u! Y" f4 K% o1 W3 G! C! e    TRIS=~0x3F;  //GP3输入,其它输出
2 U+ Y. _8 @; l0 `$ m    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
/ h+ R0 K  G* z7 o) ]: \}
3 E$ a6 Z8 v: A: bvoid  main()# S1 `2 p. H# j# x& g) ?# j* j- i
{  
3 Z, H4 {5 ?0 KInit();4 S. Z' G9 Y  Q. N' P( t# e

- O( s7 k, t# K* C/ E   
& {# h6 o5 O0 x. c3 K1 @5 y& }while(1)- T' i. r2 `/ T/ z3 M: R$ `; T
     {; H9 h/ I0 Y' Y7 H4 K2 v$ y6 Y8 P
$ `5 h& ~) D+ S% F0 i
    if(nTO==0)      //看门狗引起的复位$ ?2 I' O  p7 B9 w
   {
$ j8 d0 z2 ^2 q5 Q  q; N1 H/ W      GP2=~GP2;  y0 H! s: u/ a2 r" T7 K
   }    % a' \1 l1 `% L" h* |& n
         SLEEP();
6 H& J: [6 e1 I3 e, I* M. G: Z    }
8 C. E% A+ ^7 k# f! c! c' w. F}
. _1 g# H: J/ z- T. S! E+ y  o6 j0 ?/ p2 s) P( l  S
6 z, W0 g4 i5 [7 v1 g/ ~8 ?4 `
PIC12F508单片机学习之三——按键唤醒* I" [) i3 M2 c, s2 A% f
  : J3 N  x; G9 x% T* F
PIC12F508单片机是没有中断的,按键中断只能是查询方式。4 N% Q" U2 n" X* Y$ a: K0 a1 ~7 F

; \- J3 }6 p8 `' _; l8 L编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
: K& s5 Y% I# ~; T4 G
3 k1 P) }7 S6 Z9 S5 v下载器是PICKIT3.
$ p2 W9 x2 y" t! M/ j5 u" y# w" P0 {$ U3 n4 ^
//***************************************************
2 N0 t0 X, \9 Z+ C# v' X6 c8 O//           __________________
5 L4 H& I) U; _( S7 A8 M' N9 J; B//       VDD-| 1            8 |-VSS# v5 |8 z# ?" e& h4 p/ c+ @
//       GP5-| 2           27 |-GP0/DAT% D$ p8 \  f% j5 d% f) F: K
//       GP4-| 3           26 |-GP1/CLK
6 x; i9 Y/ u6 t9 ^//GP3/RMCLR--| 4           25 |-GP2
6 @: W9 O, p/ F//           |________________|* v% {3 O1 W. Y- G) F
//               12F508
$ q% p3 I8 f( d/ Y( i% G: s$ O//***************************************************% ]! q* N: g5 D

9 X4 h6 c$ G# e8 I//看门狗 休眠唤醒
8 @  ?; w4 v' C# H+ T) H5 P//按键唤醒
6 C/ U, D2 R" f6 `! k, c2 J3 L  h/ u, P1 s
#include- V# u: |: s  ^' ~: S4 _
#include- O, H* W: q4 ?7 B/ V7 V9 u! p
+ L% O4 @1 l  ^. M' _, T, P
// #pragma config statements should precede project file includes." K$ B. D( Y) ]* r* D% f& r) d4 B
// Use project enums instead of #define for ON and OFF.
3 ^6 _; Z1 F: Q5 H/ Z! y, X  e# u! H  a7 s& @+ |& A! A
// CONFIG3 \+ H7 K- G( T2 ^6 h
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)/ y1 a! x5 M0 q8 f% U
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
$ N$ z8 ^' t* |4 x" ~6 K% m#pragma config CP = OFF         // Code Protection bit (Code protection off)
8 S: J3 g, Y0 Z# \- V* Q7 x#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)5 e/ C6 c4 X: m" n! O( ]8 q
' m: |  N7 [7 B, Y0 L4 V7 A
#define uchar unsigned char% D) c( A' X4 l  k9 I+ I- U
#define uint unsigned int
6 x. G* ~/ @- _5 C#define LED1 GP5
3 B! N7 p; |$ |#define LED2 GP4
& r3 g  ?2 C; S- m! G$ k#define KEY  GP3
2 j# D* R% R0 l6 @% ^6 s3 |bit   KEY_F;
4 E' {# X0 k6 c' y8 X/ puchar  count;; b' B. g2 a+ L% b
//uchar  GP3_F;
: {+ g/ O# i7 T, I; b) e  _void Init()# W; ?4 e8 V# l8 H
{
& Q7 }  I" `( x% Z: q3 [" E7 J   TRIS=~0x3F;  //GP3输入,其它输出- t2 b5 q3 C5 v
   // OPTION=0x07; //这个寄存器上电复位均为1! E$ m0 e% [6 y1 s4 a8 f# Y
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
% y5 i6 R8 e/ g1 `0 F6 X    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S: N7 x( [6 ^4 p# |0 B$ F  k& j
  // TMR0=0x63;   //10ms" z2 Z9 M# Y! g+ t! o* v6 k4 @- H
}
4 `6 o, K& N& \1 ~void  main()
+ C5 p$ @$ t& j5 z3 H5 }7 R  u1 N+ Y{  
, A5 [1 i" O0 `6 K- I+ RInit();   ( F5 M$ U* l( b+ O
while(1)/ L) o* z! \1 R! x( ^
{) O8 s2 J4 o# P3 e; I! ]
    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒+ _/ ?' e. p$ a( c! M! V, y
   {; o/ U; L5 v& E5 }" B
     LED2=~LED2;  X# Y# Q7 D# Y4 r  W9 N. Q
   }6 y# P0 P- |& Y
    if(nTO==0)      //看门狗引起的复位  F2 p& u0 X: r  K1 L  w0 n
   {: s  l; m& N6 g$ u( [  z; m0 R$ s
      LED1=~LED1;' e0 H0 i% Z( ^/ K2 c4 a
   }' {  w( ^( H5 l8 J8 h
         KEY_F=KEY;   //读出休眠前的按键状态。; t, F9 h) B" H
         SLEEP();, V2 M# |5 K& V7 @8 ^9 j: w
    }

该用户从未签到

2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步
, y# U% s; i0 Z0 w# e5 x; Y+ M( |

该用户从未签到

3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!
" V( M, N" y4 F( K0 D. g9 g
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 05:12 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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