找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

165

主题

528

帖子

1255

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
PIC12F508单片机学习之一——定时器
) N) ^. e) ]: h. \
# N6 j) j# L1 |+ y, ?PIC12F508单片机是没有中断的,定时器只能是查询方式。
; ~2 C- z, X6 Y
+ G. l$ |; c1 S8 x: c$ z( d编译器用的XC8,编译环境IDE用的是MPLAB X IDE。% h5 ?6 j8 [5 G. e9 U1 o  q

4 a- R2 g& n/ Z: o//***************************************************3 `# |" v! ?. i- Q
//             __________________( E+ X$ k0 {( h& s/ {/ R/ _
//             VDD-| 1            8 |-VSS
; O& F/ e5 Q* |" z4 n9 e//             GP5-| 2           27 |-GP0/DAT
7 \& h) O5 C  Z# ~6 h' P, p/ }//             GP4-| 3           26 |-GP1/CLK
' T# C! x# `2 p. I5 R. K6 O//GP3/RMCLR--| 4           25 |-GP2
' a$ U( E. O7 V" [8 }//             |________________|# `  E$ ~4 a5 j
//               12F508; }: Q/ T  z0 P. \2 h  a2 B
//***************************************************3 k, s! }; T0 q$ ~6 q- p! F

2 a) g' i/ c" w- A. |$ y//定时器模式试用6 U4 W  h$ M& N/ f
#include. r- ^6 Q  y8 L  Y8 M" K4 K0 w5 g
#include+ y' \: Y; f% b3 \8 I1 z, R  B. y

4 x$ A* t1 l1 a5 ^( D0 Q: J! x* r# E// #pragma config statements should precede project file includes.  e5 V& U! ~8 o! S5 s8 D1 N3 U
// Use project enums instead of #define for ON and OFF.
3 T6 U2 L# s8 ?- x( ]1 G9 r3 S3 A) W' `! o% V
// CONFIG* d0 ^. _! b3 N# K1 o
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)- B# K* f3 c# T" v7 Z% H
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)
# N0 l0 v) X4 w: M( `" K% H8 b#pragma config CP = OFF         // Code Protection bit (Code protection off); ~; B! h3 Z2 J4 |+ a9 @
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)3 `& e6 u; q  m4 o5 r4 ]% L
7 D% p9 |  P  }  |/ g. }" y
#define uchar unsigned char5 }9 @# ^5 g2 W$ ?0 n1 b& r
#define uint unsigned int
' A* }, [; j4 q3 l: vuchar  count;
% r: |, ]! P* w3 D( u+ G9 i' n/ v//uchar  GP3_F;+ k; Y  J2 ]1 |4 q9 p9 k
void Init(). m. t' K: M0 s+ N3 c
{
+ L* C# M" m- k# g  ]! v       TRIS=~0x3F;  //GP3输入,其它输出
  J1 l9 T. q1 Z$ [5 _0 G- n     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
6 k( z+ P9 I: g4 j3 j/ r2 W) \7 N     TMR0=0x63;   //10ms x=257-tJ/4F9 |2 s2 j3 v/ ]
}
" X1 ?) V2 e  W! a4 Y: _void  main()
' d' u- n# c! [, P8 F8 Z{  ) `8 p7 z' _3 s/ v" [7 [" I
Init();  
, j0 j! j1 ]& v- f- A& vwhile(1). d1 a5 T7 N+ F9 B0 S9 ~& i
      if(TMR0==0xFF)# j( f7 u1 I7 }6 M! P4 H
      {
9 T# W, w/ L0 V5 e& m1 u, R8 Y+ J4 b$ M       TMR0=0x63;   //
5 e) R5 s7 ?/ Z! C% T! j       if(++count==50)//1s( N: q% W) W# y% g' o
        {
7 w# Y9 s8 z  J* ], A# Y  Q         count=0;
( g* z  D3 B$ o* c' ~- h. ~6 s         GP2=~GP2;//LED闪烁8 E, }7 A! d3 l& j3 g/ ^( {7 D
        }
/ l/ P# @; D2 }0 _       }  y* x: q- A) X+ Y7 A/ ^
    }9 d% ^% |' r' G% M' k) j$ f  F
}
2 g+ O, i; T& ]2 d5 m( R' q; r0 D

; C  d* m# ]! ^, s  J7 D* vPIC12F508单片机学习之二——看门狗和休眠模式试用
6 Y) }6 m% A2 ~2 z8 c
7 h' M: l5 Y$ a- zPIC12F508单片机是没有中断的,复位情况只能是查询方式。
4 t. G$ Y. B" f. v% d, V! ~1 @2 a- w' p" G
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
  X& B3 T" G, X; t& t- m) K9 }4 q8 `+ _/ g& D8 G# R6 A8 w
下载器是PICKIT3.
; l& x, K6 M- l/ _$ J' O9 L5 l. \9 k: k! }1 g* F: _8 I
//***************************************************  ]( l; ^6 J3 N$ {/ v
//           __________________# S% I1 |# L4 W+ I
//       VDD-| 1            8 |-VSS8 u( Z4 E% t: K+ U8 {
//       GP5-| 2           27 |-GP0/DAT7 Q% |# M. i1 U0 A* u0 C
//       GP4-| 3           26 |-GP1/CLK
( g( O) v6 b: O$ T//GP3/RMCLR--| 4           25 |-GP2
  W3 b; R/ K# `; V! D* h' Z//           |________________|5 S% h. V4 w$ g' J4 p' O
//               12F508
% T# L8 B  d/ f//**************************************************** d3 l! z  k7 Y% S! H8 ~& |
// 看门狗和休眠模式试用) \: U* M2 u" _! x1 N$ X$ K/ ^8 _4 v
: v+ b% D! G/ V! ]6 g. k
( X: O7 Z/ L7 D" g  e8 [% m/ b- Q! j
#include
  u+ O4 p# R# r1 {1 b2 U/ `#include" V8 P8 [6 H9 l: k* Q

3 J2 y2 T6 k8 _+ M// #pragma config statements should precede project file includes.
9 v+ R1 K( \6 {7 Z( t// Use project enums instead of #define for ON and OFF.2 l% O# u& _- {. d( P

' H5 `) [* u- l1 \9 m6 N// CONFIG
# K* V* i& _. F, n#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
1 y0 x& h/ j; d1 _#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
; E& w! t7 W. z$ m#pragma config CP = OFF         // Code Protection bit (Code protection off)
  g7 q3 x. h+ l1 c5 V; C8 t# d4 }# F0 i#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)! h! R% A) S) ^7 Q- O

  E  y! [7 i( f% }& D#define uchar unsigned char% K! `, T) \4 r: r, Q' R
#define uint unsigned int
- _9 D$ \- m  {% U9 nuchar  count;
. a: l, h% I# T5 D//uchar  GP3_F;
) D7 J+ ]% ?: e+ I$ i; @+ Y+ E2 Cvoid Init()5 G% e) ^* x8 I4 w! O2 W* s
{
& M9 a& Q& Z5 W    TRIS=~0x3F;  //GP3输入,其它输出% U% s# ]2 f5 m" Z5 N. Q' V
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
/ C5 _  {$ k+ n7 J! f7 f}
8 g1 C$ ^$ I, M  x0 ~3 Z1 L4 tvoid  main()& r3 D% n  s6 G  k2 ^' j: d
{  
9 D3 Z4 Q4 _7 j2 lInit();
- H- |: S3 w; g
' e4 ?; c. Y5 x. Q; x   
9 b8 E4 a* c- i5 bwhile(1)- W: |( G5 ~" f; z
     {
5 d/ T2 B+ y- G% Z! m: z
4 p0 g; D! ?& i. k# A& q( u    if(nTO==0)      //看门狗引起的复位, c: T( G* U/ x. g3 K+ P
   {2 a7 {6 @5 k3 q# D# t
      GP2=~GP2;; F7 n  D* T8 C
   }    / B2 C- y- k. r5 g& i
         SLEEP();; O% H; @6 V' @! t
    }
; U) I/ G) D. V. F7 r/ b0 [}- @1 ^- @8 I  R7 |# C/ K& E2 |
9 b! E9 g9 C" s' B5 L( Y8 j: ^
1 H2 x% t: c9 A
PIC12F508单片机学习之三——按键唤醒
" {5 `2 w5 i1 I/ q! [/ U0 E  4 x+ T% s9 ^) U0 [  G6 c
PIC12F508单片机是没有中断的,按键中断只能是查询方式。9 y, C& t& a3 n2 P. Z
0 D' Y3 T" Y, W
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。3 o2 Z/ W+ ~1 b( A% N, I' n6 C

' u$ e% \" t4 L# S, H! n下载器是PICKIT3.
5 q( L  E3 {4 f3 J# m3 N! g, s: f. e
//***************************************************1 O5 |- ^% J# Q. L6 S
//           __________________3 B, ^4 B" G% k1 p9 v0 l) U
//       VDD-| 1            8 |-VSS
3 a/ E+ a- C% G3 \4 n//       GP5-| 2           27 |-GP0/DAT
9 f0 E: W( E5 P8 ^//       GP4-| 3           26 |-GP1/CLK
# c8 z/ G3 U9 ~; e//GP3/RMCLR--| 4           25 |-GP2
" `; J% B+ P$ ~6 D$ V& v//           |________________|
9 q5 G% ^, x, k+ r- z//               12F508: }* T' [- P3 \( I
//***************************************************- d/ w2 I2 @% N% z
8 S% R4 h9 t+ a9 b
//看门狗 休眠唤醒
9 k  M4 v% z* y* }( ?$ ~) \. X, `! U//按键唤醒3 v% E2 U( A+ A) h$ `4 ^4 s: \

6 ^% A5 s2 N0 {1 I#include
% @. u2 }7 w7 q8 y1 e, A' z" f#include
' Y) p; g" }) P4 e1 s+ D* E/ J; z: K8 W: w
// #pragma config statements should precede project file includes.8 t/ _% S2 z) R% p5 g; r0 Y4 k6 C
// Use project enums instead of #define for ON and OFF.! @9 J2 n3 p7 G' K# W2 O
  C) R! K' ~7 z! t: B5 g0 s6 a, H
// CONFIG4 ^# ~, m: `% I
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)$ ^" z; G4 z& z9 g: _
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
1 A5 D& U7 \/ V/ o! s" Q% _#pragma config CP = OFF         // Code Protection bit (Code protection off)
( \% I; ?, i1 t4 d% K7 K#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)# e* G: f% B4 y9 k4 l( E% m
' z" K# J5 ?2 g, r' U" W% V
#define uchar unsigned char
$ _2 Z0 i1 J3 h! ^, U* W8 F#define uint unsigned int6 Z! F$ j  l0 A1 p4 a8 o
#define LED1 GP5$ ]! Z- R' t3 B1 ^. G- {
#define LED2 GP44 n4 O5 c. W9 {' ]) v
#define KEY  GP3& X& v4 r; T- F$ q0 L
bit   KEY_F;" c' w- ~0 w2 K/ T6 W0 X& J
uchar  count;
, w& y$ B2 {0 F2 Z7 v9 f7 t( Q6 a//uchar  GP3_F;
2 m- Z3 ^+ V6 }+ Z0 Nvoid Init()
3 t" r6 K3 p, [* x8 t7 E5 }{* t: g5 b2 S! k% e
   TRIS=~0x3F;  //GP3输入,其它输出4 N6 \- Q# K) w0 Z4 {9 ^0 V* K
   // OPTION=0x07; //这个寄存器上电复位均为1
# Z) C  C1 G4 e1 D( n% U   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S6 q6 ^, E. C- K  I2 v" D' L
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S
6 N2 @: s, L/ t! \  // TMR0=0x63;   //10ms
/ ]# c* G( t) s# Q' E}
8 Z# j$ G' l& o% Ivoid  main(): y8 R' l3 h8 j/ [$ M
{  
" C+ Z3 T' T* z! P! |# hInit();   % l4 G! m' k. u# n  \) j5 Y, r, X
while(1)
& l: M2 ?' }3 H; g{
; M" n0 x( z  ?+ g& C! m7 v    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒( V& F' M6 k- s5 B$ I
   {
4 @8 `) _. i1 h     LED2=~LED2;
8 B8 [! i( n/ i   }4 c6 R" Y  {, _+ f
    if(nTO==0)      //看门狗引起的复位0 @3 o$ w3 {/ _  p1 h2 V& J/ L4 R
   {
/ J& O/ S# c- V# W4 y3 e9 Y      LED1=~LED1;
3 w. ~' H6 J! n# D3 Z3 k6 w   }
6 r  h2 j+ o4 _5 w; S* q         KEY_F=KEY;   //读出休眠前的按键状态。
3 Z  Z% N" H; F' f6 _$ X. Z+ l         SLEEP();7 ]6 R' o- T- ~' v
    }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

165

主题

528

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步1 V6 I- @4 ?; P' i

159

主题

583

帖子

1229

积分

四级会员(40)

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

积分
1229
3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!
( O4 W2 c9 b; G7 R4 a/ M& O

160

主题

620

帖子

1233

积分

四级会员(40)

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

积分
1233
4#
发表于 2016-6-30 10:25 | 只看该作者
赞一个~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-21 21:45 , Processed in 0.061847 second(s), 32 queries , Gzip On.

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

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

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