找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

193

主题

569

帖子

1397

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
PIC12F508单片机学习之一——定时器: Z5 r4 G9 a4 B7 e! ?
+ O. h7 e2 ^* d4 b4 s
PIC12F508单片机是没有中断的,定时器只能是查询方式。$ R' p: r% m& f
3 v' \/ t; G  v$ |, O; |3 ?4 V: _, B
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。! }7 C( O! X# x3 y$ ]

' n4 i# c' l1 f* v  x0 I9 g//***************************************************
5 [: m! ~$ K1 ]: z8 S" X8 }//             __________________
3 s; X8 N6 ]! p8 L; c" U//             VDD-| 1            8 |-VSS' G6 D2 x. k& Q& }& q
//             GP5-| 2           27 |-GP0/DAT
+ a+ Z+ F' j5 d//             GP4-| 3           26 |-GP1/CLK* x% n/ ^2 {6 d! }% S0 e% a
//GP3/RMCLR--| 4           25 |-GP2) k5 q2 `4 J0 p' N! T
//             |________________|9 a. V8 O" g! e+ p% O, G( `
//               12F508
; M* _& \( u$ W8 B; _$ c//**************************************************** Y, D1 P3 y7 U7 s3 i* j

0 [2 U4 K6 N* S. M//定时器模式试用
$ @. n1 y2 R! [2 D$ |#include
; f( q8 k* Q) b& Y3 }( w#include2 ]+ b- [% ~' H2 |" m

+ ?  W0 t0 b) j, Q( ^// #pragma config statements should precede project file includes.! e7 Q# i3 a, s8 x6 B
// Use project enums instead of #define for ON and OFF.
" N3 Z+ ~- i  y$ t8 H( [+ q! s( K7 S5 |+ k
// CONFIG4 @7 [4 A: n& \6 o: m' u
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)& T7 T6 i8 b: I  \
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)9 P2 p/ _+ b0 S& p4 X
#pragma config CP = OFF         // Code Protection bit (Code protection off)
, W% q1 Y+ S, b3 c#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD). V4 z) K# _: K" A8 t2 i

6 i4 t5 Y2 e3 r+ D#define uchar unsigned char3 u: r' N" i7 F5 c, ^  K
#define uint unsigned int& I5 s, I9 E6 f( L
uchar  count;
! k. n2 ~: }, P1 l# D//uchar  GP3_F;6 l! H9 d( o, {* J
void Init()
1 r' p, V6 B- F1 b0 {+ ^{
) P- @0 u( H# z/ W       TRIS=~0x3F;  //GP3输入,其它输出  P# F$ H  H. _9 W: P% L$ S
     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F, k, \0 s+ x5 j6 r
     TMR0=0x63;   //10ms x=257-tJ/4F; Y. o; q0 m! w
}
4 l5 G% R' ?/ @' k& Xvoid  main()
7 c* u0 q$ ^/ n- F{  * {" i% g4 x3 a
Init();  2 r8 i1 V" q  g# w- `1 S! ]& ]
while(1)
6 ~  _% I6 A: v9 q      if(TMR0==0xFF)" X3 G( |, Z& y8 O' O1 x+ P$ f! ]
      {5 t/ Q3 j8 ^( x0 s; h& K) {
       TMR0=0x63;   //( S/ Y6 l7 J) W0 \% P
       if(++count==50)//1s
- R& c) Q5 ?: Y& i/ y        {
* h3 ]; O6 W8 O/ n         count=0;# [( h/ E9 u4 F
         GP2=~GP2;//LED闪烁
6 g1 s& I1 V" ]7 I& H        }
4 f0 i) D4 `1 Q0 G6 C       }3 W, y! c1 T0 T3 S- n  ]
    }) z9 z% H( O& z1 ]/ l* |! q
} 2 j: S4 d2 q5 ~+ b- }( J. ]$ w

5 W# a% x7 n9 H6 X& V$ t, R5 i& N7 r) z* @9 r( E" r7 V/ ?
PIC12F508单片机学习之二——看门狗和休眠模式试用
3 ^. n  P# Y: _' v4 k0 k2 h( Z, H) H/ E! d
PIC12F508单片机是没有中断的,复位情况只能是查询方式。) z) |  f" i: R) p6 k

0 s2 t# p$ F! |$ @6 w编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
3 z, ?! |( E5 Z( K3 L2 S
) W% Z) O1 R3 q" ^2 `下载器是PICKIT3.
/ _1 W- L' o( N' u1 G3 i' s2 u' u5 q$ t% x" g' ]8 r
//***************************************************
! j2 A+ R: r1 y' w1 X//           __________________
/ k, }$ m# r( X+ e2 M3 l4 }7 x2 ^//       VDD-| 1            8 |-VSS
7 K6 z" l. }" {! X& P4 S//       GP5-| 2           27 |-GP0/DAT( ?9 O" ]# _+ e. Z4 n5 k% v, b
//       GP4-| 3           26 |-GP1/CLK
4 O' |; ]" o6 w0 g8 R//GP3/RMCLR--| 4           25 |-GP2
; w: I( G1 H5 v1 T% B% T2 P//           |________________|! A% A1 I: v7 ^4 g. N. O& ?  \* o6 L# L
//               12F508
! \2 [- C( T; M# u% P1 k- h4 o. t//***************************************************
( J2 Y: F% d1 t! j% J# B7 u// 看门狗和休眠模式试用
$ Q, [) L- g5 g* G; G1 M7 ]
* u0 T3 J% Q; C7 O( G: v& w% a% S$ l4 L2 Z* g
#include2 d+ x$ X7 f( U0 w; z) g
#include/ ^$ {# X: J# d+ s4 |

& A, _5 C( w, r' s2 l9 W// #pragma config statements should precede project file includes.
& R- }: g5 [) o$ d// Use project enums instead of #define for ON and OFF.
  w7 K& B( c" B3 n
5 M" l7 y. g0 P3 f7 m, {! k. I% ^+ S// CONFIG7 n7 ]% A, M; Q0 h! w* j
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)- s$ i4 b+ r! Q' X5 b
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
5 i4 K' g) Z6 Q# c$ Z8 D; b#pragma config CP = OFF         // Code Protection bit (Code protection off)
; {7 v0 ?3 J5 t: l7 l#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
1 _/ m5 X( ]* m- t- y0 q) H; f9 L+ l& y" C
#define uchar unsigned char
  S2 p0 `! b" O7 c, K#define uint unsigned int
1 H8 h, u0 F3 H& }# e/ Y; Ouchar  count;
5 a- k* j* x( E//uchar  GP3_F;
6 ?. H1 r5 b+ \: dvoid Init()' b5 N3 z" Z- H
{
# A% |, {# B% O: O9 A    TRIS=~0x3F;  //GP3输入,其它输出
. z$ t  Q; ]) i9 x$ B2 i2 V    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S; A+ M' W& i# y8 U7 c
}
5 m% |- `/ w1 ^7 kvoid  main()
% O) k% x+ i* n1 o. d# O& e{  
3 o# l  P, a0 P  ]$ zInit();$ ?$ [" J/ Y/ E  M
- |5 S, m5 ?# t& t8 Y+ L" I
   
0 m" c) e+ x* f4 ]0 y6 Y( Pwhile(1)! H4 E' \4 @7 U; r; X# t
     {  E$ M9 `7 P, S: _6 e
1 z, k# @  `  l- j6 Q! a
    if(nTO==0)      //看门狗引起的复位
, T" H7 q% Q7 B/ k% l   {
/ R2 D1 b9 A3 N: @1 `5 @  @      GP2=~GP2;
: J. W% `/ A% k7 S5 g  H# R$ o   }   
9 O& ^7 f. o( k9 R# I! [% |         SLEEP();1 S! s- Q  B1 B: _8 x) G+ z
    }8 T( G/ d$ Q/ M
}
1 E  D; F" D, c2 [1 G; E2 R- C  i! u
1 r" z5 ^; f. a* r8 h
; A# s, r7 B$ ~* S, H; c0 i& {4 nPIC12F508单片机学习之三——按键唤醒! r! \1 P, b- Z2 F, x# k
  7 t: i2 W" O+ C1 R. _
PIC12F508单片机是没有中断的,按键中断只能是查询方式。
. q. K) }5 c" N# O  w- v2 A" [: ]1 l* c9 t/ `3 X5 e
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。: ^, X7 f7 ]0 T! B+ _/ A
. ^) g/ e* v, \( P8 p4 T& ~
下载器是PICKIT3.% a8 p9 b+ V8 O

( j- V7 m( F' l: ]4 c//***************************************************
9 v4 a: O( M6 s/ s# a//           __________________
  W4 [1 A9 X- y& |2 X//       VDD-| 1            8 |-VSS' y  [- a8 h% v! l: X( g3 v% `2 A, L
//       GP5-| 2           27 |-GP0/DAT, v& S. p. |/ p& @, g/ C
//       GP4-| 3           26 |-GP1/CLK
0 }* [3 k8 y/ H. m, ^, {* B. C( u//GP3/RMCLR--| 4           25 |-GP22 B) ^7 @; d* a
//           |________________|8 n' C) ?- [) d$ n) s
//               12F508
1 \# ?2 {/ Z) W5 |3 E//***************************************************
8 q8 ?8 ^# P- f9 E! `+ E- F# `7 M# ]. X4 Q
//看门狗 休眠唤醒
- n/ d# h( \7 Y//按键唤醒* R+ K" ^. D  y

8 C$ v: X- t) ~1 V% ^0 C( m! R. S#include  G# @$ n& u% `8 D1 O
#include# H6 [5 x# {4 e8 O3 Y8 O5 r

6 |; H. s. @7 x& u// #pragma config statements should precede project file includes.( b, Q- J: R. C4 V, n: X/ @5 b6 q- K2 S
// Use project enums instead of #define for ON and OFF.4 W% ^. A$ D  ?" D
9 k9 i% r0 D7 o1 b/ U( w7 D) {: h
// CONFIG
1 K, b" b5 q6 |$ y6 q#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)( J# Q- u% c; ]! w
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )
* D2 X$ @0 s% b% [* o, R' R8 L' k0 [#pragma config CP = OFF         // Code Protection bit (Code protection off)! q  g; t. z% u! g& m$ ]
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)9 r% O$ w# I1 z$ }  k
3 ~$ M0 M$ f/ ]- \. P! R
#define uchar unsigned char
$ B: u$ G3 f* X( U& _4 h3 [, p+ w#define uint unsigned int; c5 D9 j9 g" f( l* q
#define LED1 GP5
# y6 V+ B& e; ?8 ~/ O: V2 c( f#define LED2 GP4& }/ `$ J3 x! X1 x5 Y, L% w
#define KEY  GP35 Q3 k& m" i! ~; C8 ]
bit   KEY_F;( n) D" p4 r: {. q: r/ B' n/ G5 S5 B
uchar  count;
6 p3 V& B! h9 ?6 H1 w% ~& Z//uchar  GP3_F;+ A: F  B. B9 m! }7 \) W2 `, h, ?
void Init()
9 B- ?& [/ Q& H: R: X0 M, W{8 D6 K9 M( r2 ^, U/ q" i" ?% |, l
   TRIS=~0x3F;  //GP3输入,其它输出
8 w+ ^8 z7 f: V( ~' C   // OPTION=0x07; //这个寄存器上电复位均为1
1 R) X0 X1 F: z4 H8 ?& z: |   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
5 E' R+ h5 }; N% e  o4 n' f/ W+ @    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S; H& q. Y# m; a/ r# E
  // TMR0=0x63;   //10ms
! n! ]: w8 A' g$ S+ d}
# m6 `8 Q( m/ F3 j' b$ d" ^void  main()
1 ^4 X( V; A% \0 B{  ) Y1 d+ T" s  t9 c) b9 h
Init();   
) Q8 O" R. y+ y8 a" z) lwhile(1)
: h% [3 H' Y1 r5 O{" e5 M. f# I$ h# E: \
    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒, |" g* g. G* W& C! e1 @2 A
   {4 e3 U7 a+ x8 F: p7 \
     LED2=~LED2;
  k" N9 u. a; v9 N& ~. F   }9 Z& ~7 B4 X$ w' C  Z
    if(nTO==0)      //看门狗引起的复位
2 ]6 s; {# C+ u   {
) ~! L9 F3 ]: H, O      LED1=~LED1;
  w) U1 L$ l4 ^; ~, \9 K$ ]4 q   }
; g( d" C# I+ C, Q- s8 f         KEY_F=KEY;   //读出休眠前的按键状态。
4 `- `. N* o! @7 a2 i6 ^         SLEEP();2 W* b; p* v) A$ r4 B1 O; B: C6 s! a
    }
分享到:  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 | 只看该作者
楼主辛苦了!
0 T* f4 \/ Y: v  h7 a6 K: T  I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-2 04:47 , Processed in 0.053614 second(s), 31 queries , Gzip On.

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

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

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