找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

165

主题

528

帖子

1255

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
PIC12F508单片机学习之一——定时器
5 L& h  v) o) }
. o. W2 C4 V! N- TPIC12F508单片机是没有中断的,定时器只能是查询方式。5 Y$ O9 r4 K/ X, s% N& }- E
* L8 `1 A, ~3 J  w9 `" z% c
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。; C5 C# x4 G# |: T8 U

$ G4 n% Y2 F5 l4 x9 u, @5 L//***************************************************8 U1 M. ~4 \* G: `# }' Z" a; i
//             __________________
9 C- J; \/ H3 C( a* m5 A4 e7 ]//             VDD-| 1            8 |-VSS- [$ n1 F- B8 A/ t9 ?. C
//             GP5-| 2           27 |-GP0/DAT1 u6 {7 ~9 B' p6 ]- R! E8 y
//             GP4-| 3           26 |-GP1/CLK
# x& T# ?/ N9 T9 \6 D9 L//GP3/RMCLR--| 4           25 |-GP2: A* b& e* q5 S0 N0 ^8 M5 g
//             |________________|3 S8 z. z( I0 W: n0 y+ R
//               12F5089 S# c/ ]/ y: b2 @
//***************************************************
& B, \2 u5 E; y! N- i- H: @5 I' Z+ J7 I' N% {1 f! g1 U
//定时器模式试用3 x) ]5 N) k1 ?/ z& `7 n8 Q
#include
' n( z8 A: ^0 z1 _# o#include
- u: y( ^7 f0 }2 L' _% a
) ]5 I6 I4 ^; L0 S+ B// #pragma config statements should precede project file includes.+ x* i/ g# S( Z, T7 r/ L0 ?/ ^
// Use project enums instead of #define for ON and OFF.4 R3 }, J+ G: Q( l. `& X: i& }

% I. l5 @7 v2 v7 x& p$ m7 X% K. Y  O// CONFIG2 n8 `6 p; f# X' d" N9 ]
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)$ T8 G$ i3 E' K) k4 f5 i
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)6 K6 F" S( ?2 N3 B
#pragma config CP = OFF         // Code Protection bit (Code protection off)
- h5 _8 b1 z0 l7 r' T5 M% ]' T#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)$ d  J# }$ w- k" R  n
5 ~% I# Y& i) C
#define uchar unsigned char
+ E" M3 I; d$ m; D#define uint unsigned int  I" V) ^) ~; l0 D  t& g: Z. z
uchar  count;
- m; a, L9 d. u$ K# t1 G//uchar  GP3_F;6 D% y4 w6 _# Q; P: \
void Init()1 E( x3 u  @; {6 W: r
{
# Z& K! I( L2 N% E$ k       TRIS=~0x3F;  //GP3输入,其它输出: W5 l% s. u7 i& k6 j
     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F) _7 v% y; ~# O4 T: M8 @
     TMR0=0x63;   //10ms x=257-tJ/4F8 u5 a: b5 X8 z
}9 p) ]' B8 t; @0 M) o: E, r
void  main()$ f: \7 b7 x+ J/ G( i& U4 q  |
{  
" y4 u' T0 R7 g$ \( p8 @5 ~% LInit();  + d2 ]: V4 o3 v. X+ j
while(1)9 F* B2 Y7 P, @$ I
      if(TMR0==0xFF)5 A! N, T/ e3 m
      {
  w1 r7 E1 d, d8 z$ T- ~1 C       TMR0=0x63;   //+ n3 c2 _' I; x9 R6 `5 m) `& ^
       if(++count==50)//1s
7 \2 A# t7 }) v1 [        {. _4 O) ]$ F: z, d# a( Z
         count=0;
0 z/ I# i+ H, t& O: V" ]8 W4 W* C         GP2=~GP2;//LED闪烁+ b1 m3 P% U+ d% Q
        }4 Y" L+ V: T0 {/ s* r2 l
       }
% ^! Y; r4 D/ Q    }
3 ], x# n. q! s% u, }: e}
5 h- q2 q4 ]+ X/ H' T( J% O2 H& Y# H& o, |! `/ r

9 E$ T6 B; c+ y1 RPIC12F508单片机学习之二——看门狗和休眠模式试用
' D/ @' G1 p7 C" z; Z; [- X  P- F( P" P; w4 U
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
% _" \0 M" Q/ P+ g% e' Q0 x
0 I: a' x2 C" {) ~# l( ^3 Q编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
9 P. D3 u, O! y2 |! J  \' r
* g8 V+ [3 M. Z# _下载器是PICKIT3.' i7 W1 S8 ?  c9 A

7 `  [8 ?) ]7 \1 f( c; m( {2 k//***************************************************8 ?$ z/ C# e9 |: J. L  y2 T
//           __________________* T, y1 x- G4 k6 u6 R5 O3 W
//       VDD-| 1            8 |-VSS
: ]2 H. u4 x% h& l2 y2 M) p! W3 `//       GP5-| 2           27 |-GP0/DAT/ F8 T% @: U7 n7 R7 b$ f
//       GP4-| 3           26 |-GP1/CLK4 O9 G( z# u6 ^! L: b# b1 V
//GP3/RMCLR--| 4           25 |-GP2; e5 Y/ g0 a" c( e7 ^1 \7 _
//           |________________|
: d" F2 l" R2 _) u. \//               12F5080 R3 F( V; S* p$ ~  V; @  t. x
//***************************************************% U8 g* A/ A, |7 N/ q" V
// 看门狗和休眠模式试用
3 d2 |3 j, N& |' `! }3 |
+ t/ y0 i3 v, p& P% q7 W- p, W0 a. w# Y: w- [; c: R3 b
#include
5 w6 {( Y0 v' n1 i: z- a% P! J3 X#include) |$ K. m) Y& W) x% t$ `: V

8 E2 x0 n+ ~3 Q" K/ a  [// #pragma config statements should precede project file includes.2 Q8 e6 ?' {! ~( Y0 Y, Q
// Use project enums instead of #define for ON and OFF.
5 L2 {: Y# d  U. y( z8 m0 u& W( \9 H: j0 F; P9 Q$ _' ?
// CONFIG) n) t8 u9 |6 ~% F" p" Q4 z% `
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator). v4 m+ l" D0 O2 }- x( _* W, \
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable ). B" K" l8 N/ F. f+ _
#pragma config CP = OFF         // Code Protection bit (Code protection off)8 S0 V: k- X) o
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)! M- T0 d0 r6 d- L1 b5 O

+ F& x- h# F4 T) }: L* G#define uchar unsigned char
4 S* o7 Y$ W& X' L4 a: F#define uint unsigned int5 s( G" @' c- {4 h1 E
uchar  count;+ s( _6 M' }9 @$ B
//uchar  GP3_F;
9 E9 ]2 F0 U' N( v& L  y* F& ovoid Init()' h+ K/ H7 B1 r, Z+ n
{
- d3 j; }, J2 |% f& u; u$ T9 z    TRIS=~0x3F;  //GP3输入,其它输出5 b  e4 I3 p3 _' {' U5 n8 g
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
# D0 k% d1 o4 R}
" }' w. o3 E( e: ovoid  main()
& \( a  O  T* p4 K7 v{  5 C9 ^3 ]6 _# h
Init();
( d$ |+ _: M/ h2 q8 B7 C2 l& N* q! H0 o; [0 H
   
1 [$ ^; f1 w- }$ M5 c. y% A. |: iwhile(1)
( w$ h. z* I$ ?6 V: U$ j, I     {& T5 V# c' ~! a8 Y
4 c5 N" d1 z, k6 K
    if(nTO==0)      //看门狗引起的复位
' g8 h9 ]4 v/ j+ X, N' a' p   {: V; b, ~2 m6 T; n! r! _' @
      GP2=~GP2;3 b6 ?+ z( d" L* n) f* f: j
   }    0 ^2 E8 }0 y2 M) ?# M- {1 W9 W
         SLEEP();
3 a) ?' Z) O: [0 Y    }8 Z' ?0 M1 w4 x  _( e' B
}# c, \3 [$ Q' S' n

* W* D# v" S" E7 o) A& p1 ^. ?. }
7 c6 X' h. s% o9 D; u  ^PIC12F508单片机学习之三——按键唤醒
0 z" F. g! z' Q+ P& a# U  ' _0 H% |$ X% O; M
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
- T: N) ?8 Y5 h+ `
$ S) W4 n; _) b编译器用的XC8,编译环境IDE用的是MPLAB X IDE。/ ~" b' v2 N' Z2 h5 ?8 S5 f- e; l

# D& O9 q  L1 e: ?下载器是PICKIT3.
& @; a* L2 i2 [) @& H: M
$ }) u. v8 a% ~( ^6 X3 c" S//***************************************************" w  J  b/ f& y; z
//           __________________' X5 @8 ^+ {* M8 ]* c( N
//       VDD-| 1            8 |-VSS
+ c- `+ c+ t4 O$ g) S/ l  C5 ^4 R2 r" Z//       GP5-| 2           27 |-GP0/DAT4 k. z" N. w4 Q% o8 `8 W+ k
//       GP4-| 3           26 |-GP1/CLK
) V* e$ X1 ?! f9 @! `//GP3/RMCLR--| 4           25 |-GP2$ i4 m& @" I2 o$ ^+ t9 w# t
//           |________________|
9 Q4 j1 K6 I! Y( e% J7 `( c//               12F508, l/ X# ]( L+ ]4 P7 S  J, _& g
//***************************************************! _; o* X3 o! v0 g9 ^- C( x9 B

9 K4 }, ^( ?7 S. y//看门狗 休眠唤醒
1 h6 c0 [! b% K  [& J) a, y) A, {//按键唤醒, d3 c' k8 ~; V9 d/ l8 l

8 v+ k( f3 U( P" e# n#include
1 Y- l/ X% l  E# m2 o5 G: L7 p#include9 l5 X( I* j! F$ C! X
5 g* I( I3 R8 A
// #pragma config statements should precede project file includes.
, c8 E5 l; d2 ]// Use project enums instead of #define for ON and OFF.
3 J8 ?6 }" U. J  d/ R
  K$ Q- S/ E# f1 {2 l9 S/ u. ~! H0 m// CONFIG
2 k) q- E* U3 [3 Q/ ?#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)# z0 |* F' |$ F* a: h
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )* J% v( B8 f4 G. @. @6 F" S0 h
#pragma config CP = OFF         // Code Protection bit (Code protection off)
0 ^( M# J1 M- C! x: ?#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)) q4 t" R3 Q! D4 T4 }' G
  O, M" ~  H0 i
#define uchar unsigned char7 q' O; C' i5 u/ G; [5 o: I& m
#define uint unsigned int
5 R2 W4 N9 X+ }- p2 Z, {5 v% j#define LED1 GP5" x- N; G! e% }' }: b" m. r
#define LED2 GP4, \" Z5 e2 E& S8 p6 R+ R
#define KEY  GP3
; I% X  p# m& b6 O& o: Pbit   KEY_F;. ]5 [' @( ~$ h4 ]5 j7 h
uchar  count;
( c8 D* ~7 m/ e//uchar  GP3_F;8 f' D. _- s- A6 L- G
void Init()- _5 N* s' @% Q0 ^7 Q$ C
{
/ o9 I* i3 B) W/ k5 k   TRIS=~0x3F;  //GP3输入,其它输出
3 u; M" t3 p# p" E  Q# w; p   // OPTION=0x07; //这个寄存器上电复位均为1
# ~' p! y0 a+ u9 L$ ^   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S6 L1 E& r4 }, Z# a/ e/ t; @
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S
- T0 d5 F- G' |! C( S; I1 L: J! W  // TMR0=0x63;   //10ms6 f( ?+ c% W8 L6 Z
}
! S" S3 Z; V1 \2 L7 m+ q+ Kvoid  main()
3 B! C: p) g' I1 G: ^1 m{  
7 h; z1 Y# _2 a8 T# S: p+ MInit();   1 w9 N0 A& ~. g7 q* m
while(1)  t) l( z" K1 x" @9 [4 B0 G
{
+ y- V- l, F! i2 H& o/ Y3 p    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒9 O3 l" _" g# q
   {
8 h( G4 j$ y3 `( m" s0 |; M- `  L     LED2=~LED2;6 |) _0 C1 l% @- C5 O
   }
+ N# J& o9 z) _2 c( y$ Y( k    if(nTO==0)      //看门狗引起的复位
, u2 k  |- t' s   {' @2 ~% a. W( `; F9 w8 d" {
      LED1=~LED1;
+ S5 Y! z% ]# {% U  G$ y: S0 m   }/ L  Z0 a. ]; v$ ^- x! ?, t
         KEY_F=KEY;   //读出休眠前的按键状态。
8 Q1 ]* ?  U. P) q4 \' |         SLEEP();1 W1 l  o" j1 P7 J6 ^5 d, o+ a" p
    }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

160

主题

620

帖子

1233

积分

四级会员(40)

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

积分
1233
4#
发表于 2016-6-30 10:25 | 只看该作者
赞一个~

159

主题

583

帖子

1229

积分

四级会员(40)

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

积分
1229
3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!
$ w: S* S7 D; {5 T8 D3 n4 ~' C

165

主题

528

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步! a" d# t  u5 W1 L( c/ _) @- E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-20 14:33 , Processed in 0.066120 second(s), 32 queries , Gzip On.

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

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

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