找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

165

主题

528

帖子

1255

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
PIC12F508单片机学习之一——定时器
# i" M# a8 V" m; z# W7 F) b' H: v
9 c  p  m( B+ V% ^2 o) S" g' JPIC12F508单片机是没有中断的,定时器只能是查询方式。
$ _. Q1 z) h% j; K1 t% f; P% _# e7 z  K2 C$ e5 k1 q
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。# `" c( z6 Q, J( I6 b& g
# E6 [2 ^7 P. X
//***************************************************+ l! c( `, k+ ~/ ]
//             __________________
3 o( m2 U# M2 f4 z//             VDD-| 1            8 |-VSS
9 f/ x2 y! Y; ^! S//             GP5-| 2           27 |-GP0/DAT# o% M8 r9 [8 j. ~7 M  _3 t" i
//             GP4-| 3           26 |-GP1/CLK
' p8 D/ [, W: K2 h) N9 k//GP3/RMCLR--| 4           25 |-GP2: c' G4 h" s  K
//             |________________|4 o9 o8 e) P5 A
//               12F508
  Y- p" k4 Q+ L3 Q' V$ L/ @- I//***************************************************
' V- ^# H) u( W' m# V9 v7 Z! c& ]. F- O. S& E0 m, G# S
//定时器模式试用
, {4 _8 P: u6 K( C#include
, |: w- [' l8 N: ~" T#include
6 q+ J& d) \0 c. |% W2 v8 ^% |. s+ ?7 L- i  X2 v5 j; ~* C
// #pragma config statements should precede project file includes.. Y5 j+ C9 r+ |# g) a" n  Q
// Use project enums instead of #define for ON and OFF.
0 h  E; p7 t/ E3 d" e& }4 M& N* @; Z0 F+ g$ E
// CONFIG. C. P* U5 u$ l9 d' G
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator), A$ T8 ~8 H" y- W" N* w
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)8 ]2 q( f5 b2 h0 |& D3 N
#pragma config CP = OFF         // Code Protection bit (Code protection off)5 q# _- R( w( Q
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)& r) _# K9 Z8 G8 Z7 p3 H+ @* ~; d
) P/ u6 m8 ~+ r  N+ H5 b: S# L. }
#define uchar unsigned char$ l1 O! N. ^1 i# {+ ]6 E" G# d' o! @1 u
#define uint unsigned int* u; u2 S% b* J  M8 u7 S
uchar  count;
. Y" ?: G* Y+ u& p- x//uchar  GP3_F;
9 i- G& U7 E5 f6 Gvoid Init()
) s/ V$ `% c1 ~6 ^6 K8 l& o' s{
" R) i' @! N% v' Z2 \4 ]# d       TRIS=~0x3F;  //GP3输入,其它输出
. R, a, x0 x3 ^& \% O  I& |" F     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
& D8 w0 \" S- |! L     TMR0=0x63;   //10ms x=257-tJ/4F
$ a/ B& h2 U# [- ~; I% n7 Q* L+ V}) n9 n5 R+ z" x: y3 \
void  main()
! U6 h, `2 w1 G+ b3 ~{  
% V1 i* `  i! H( z4 i; dInit();  4 @: N9 `/ n  Y# C5 r
while(1)
9 Y; P& k2 {! j6 _# f- X      if(TMR0==0xFF)
- e; }8 A/ f3 P+ v3 H, Y& n' |      {
! G* f' B0 ~- H       TMR0=0x63;   //
3 s) h' i2 m! N, ~$ i- ], N, `       if(++count==50)//1s' A" u% D" D* ~& W: k5 Q
        {; D& l6 N3 A+ Y+ s- h9 Y% Q* `5 Z
         count=0;
3 a7 ^1 G) p0 J5 L( |  a" w         GP2=~GP2;//LED闪烁
. B- V% f1 r! k! }1 t        }
# ~2 T+ O7 Y$ Z( \1 @       }
# k1 v3 \1 ^; F    }
% {' _" c4 I0 Y( c% w/ {: B}
3 ^& A5 M% Q1 i1 @4 G
) w+ b/ Y5 B; T4 z3 k, z$ y
* v% v' }/ j8 m; D! t% y) b) i6 dPIC12F508单片机学习之二——看门狗和休眠模式试用& z' p& q8 j4 V6 m/ g* i  D) ]; A* f

( z( i& g' Y' G0 x9 W# NPIC12F508单片机是没有中断的,复位情况只能是查询方式。
! n- {  Q% O; \' j' d: m) e% e: G
( d* F+ f5 Y+ @  h编译器用的XC8,编译环境IDE用的是MPLAB X IDE。! p0 ]5 w6 }+ O7 s: [8 Q4 ]

  j6 V2 C8 p5 C下载器是PICKIT3.! Y0 O% v% Q/ D2 E  W4 Y
3 ], F0 ?# e  c% a* ?- U% R8 @8 i* ^" F
//***************************************************
0 Z# ~5 V( M+ ~3 R% S7 a: N//           __________________, X- F# D) V! K7 Q
//       VDD-| 1            8 |-VSS
& W* \* D0 c" {5 O: ?, z9 V9 S1 ]//       GP5-| 2           27 |-GP0/DAT/ k, S) r% r- E6 z
//       GP4-| 3           26 |-GP1/CLK
  I; Y/ ?. b- a/ e2 X( e//GP3/RMCLR--| 4           25 |-GP26 C- x4 l5 q# b8 D. q5 F. u! n& z
//           |________________|
/ M$ p+ ]& z' a0 b' Y( r! k  i//               12F508
" m7 a# L. V1 T& ^* B//***************************************************
- K% g3 h/ z# ^; `// 看门狗和休眠模式试用' j& M4 w1 X' S1 g' l# l0 L9 t* H

6 v8 f6 c6 [, c7 o  k; m# b
) A2 Z7 e( q9 k+ |8 a& T#include+ ]$ M5 A# x" x
#include
' j! D& i$ v, P$ a6 Q$ K# O) J7 k7 f  ^. F! u- ^4 I! ]" c) z3 W
// #pragma config statements should precede project file includes.& [8 ^; E! L* I5 N, l
// Use project enums instead of #define for ON and OFF.
, k9 d" h" _" K( f* M3 j: i- E( z2 C% p
// CONFIG) }: f0 J5 \. h- c( i
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
$ d$ z" Z8 z; U1 S# D( ^, Y" p#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )! U( b. @  ?& K6 W, f5 D
#pragma config CP = OFF         // Code Protection bit (Code protection off)4 X5 g) C6 W5 R4 X: O
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
5 t. e+ }& F- i; P3 B& a* m
/ y! c  M4 z, n9 _+ M8 o#define uchar unsigned char0 ?2 Y4 O9 R' r, }) I* n
#define uint unsigned int
" e& }+ X% r; duchar  count;
1 A9 r3 D6 E2 g2 A+ m# K//uchar  GP3_F;% X( {: T1 Y% F3 a7 a: ^( a! t
void Init()0 K  q* S* E# O6 u. {
{
% U# q7 c* y* Y4 P0 c  [) V    TRIS=~0x3F;  //GP3输入,其它输出
' a' z& Q- z+ c# p6 Z1 U    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S1 _7 q& U: W; ?( S8 `5 H! Q% N
}
+ B" Z/ t+ c3 ]void  main()2 f4 _8 p5 U/ V7 P  @3 `6 D
{  
9 p, W% M$ y5 L% |7 HInit();
( v$ T& q; a5 H! t7 l, L& J' o9 H0 |: l% S. v# W' l, @
   * M7 c$ c" U- w; U7 [! |3 t5 a
while(1)
6 \* ~" H$ X  E$ s8 j     {+ x  X8 S! l; v8 }  C1 s3 A- `: |. N

# x% R, ~7 l# E    if(nTO==0)      //看门狗引起的复位
5 {) q* j7 f3 u  s   {
: Y1 t# n' _7 U6 v. L( O  n      GP2=~GP2;
0 Q5 |" G7 b+ U1 S8 B   }   
2 M, g- c+ N0 o/ b" R1 L0 |         SLEEP();" {& l2 R" x* t+ x
    }
3 C- L0 F: J. W3 B+ x}0 u) I8 o7 y. J+ C/ U  L

( Y: x+ `6 ?+ ~" B6 J! A
( C( C7 e9 o/ w  h, {PIC12F508单片机学习之三——按键唤醒
5 y& O* L* [& J  
" x3 j5 g7 F" D/ a' E8 S4 \" D: U+ `PIC12F508单片机是没有中断的,按键中断只能是查询方式。# x5 Y" ]& C" x
+ P3 k; v% [' M" L2 K5 w
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
& W" n- M2 U& \6 |6 N2 c! a7 @: [5 i8 W/ n) y9 T
下载器是PICKIT3.
* q) H, I; D0 \6 o2 m- p& }5 u  M6 I+ X. S/ \5 c  e
//***************************************************
) {+ p2 l7 s; p0 S; P//           __________________
1 G! Q7 s. n% _0 p" p( t1 u6 l$ g//       VDD-| 1            8 |-VSS8 y- g- ^* G9 W. \' ?8 [: m
//       GP5-| 2           27 |-GP0/DAT( L3 W  G, {3 I
//       GP4-| 3           26 |-GP1/CLK
7 z7 u/ m! _% @3 T" l$ Y. [//GP3/RMCLR--| 4           25 |-GP2
: L% G( m* G* e: ^& {# i//           |________________|/ U; {& t1 U3 B8 q/ @% L/ I
//               12F508
' Q; T! {, V7 H9 Q8 n5 I//***************************************************
" E! k" Y- y! _+ Z9 {4 \- f
* v4 `9 j* c$ i  d3 h' t6 ~/ D//看门狗 休眠唤醒: p1 @( G, _1 _$ w; o
//按键唤醒
+ J8 i7 d8 U! H1 b7 r6 [* @" B1 r+ G& I% _' d2 z. L# G
#include
( K2 a2 y6 v2 a3 i2 Y#include
- r/ r6 a7 T& D8 q+ V5 x& N8 I0 b/ p3 l9 `' m/ R5 e
// #pragma config statements should precede project file includes.
% V  K# h: Y. l% \// Use project enums instead of #define for ON and OFF.
4 u7 V1 }  }/ V, ^
0 ]0 t7 K/ i3 D: g- h+ A$ H// CONFIG- \; k% S) T& l+ C- U
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
( T/ ^9 Z. C0 X4 Y! _( Q#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )6 o3 O1 w% @$ i3 _
#pragma config CP = OFF         // Code Protection bit (Code protection off). i7 M! U7 q3 t6 ~% O: ?
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)8 ]- P! p4 o* g! [8 Y
9 a6 ^- Y$ _, E: P
#define uchar unsigned char
! U# _( g4 z, a#define uint unsigned int
( L) J4 g9 S" B5 e( ]; M% u9 L0 @% O: t# _#define LED1 GP5
  h; F6 V! _6 e4 r  i+ j8 z#define LED2 GP46 F1 t( ~9 ?% [+ M) b8 j' Z0 t0 a
#define KEY  GP3
* P" P* x: E- i1 P1 p- Obit   KEY_F;$ |) Q7 `$ j5 X% u
uchar  count;
3 q( _: D3 d- \3 K/ Y//uchar  GP3_F;
1 _6 x" ^: N3 s3 s# Dvoid Init()
7 z" ^( ~$ I! D6 u! ~{/ J1 P$ L. i' R8 c$ K2 Q6 w
   TRIS=~0x3F;  //GP3输入,其它输出
4 Y3 d$ \) {/ y- i4 z7 Y, Y   // OPTION=0x07; //这个寄存器上电复位均为1; [9 r9 e, @  f
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S6 ^# ?% N/ Y, M6 m2 f0 C4 o. W# U$ P
    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S' }, ^% v! c/ \5 V6 r' z
  // TMR0=0x63;   //10ms
3 ]- H* g. h2 [4 a}
) x8 F0 |0 S% A+ E, r5 G, [void  main()
- P/ @; U9 D% s( j( l4 z0 v* z{  
5 R* O9 U4 w5 }6 k; ?' ]. C7 sInit();   3 d0 U0 e8 b% t2 ?& |6 E
while(1): D% V+ o, s2 \/ A+ y
{
2 r8 {9 {+ y) ~7 ]' K6 ~    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒
" ~, }6 i% |) ]3 y; j# n   {: `2 m5 Y8 B" c. K4 i5 |* [$ N3 a7 O
     LED2=~LED2;
/ S$ [2 G( l7 w1 D) M) ~   }
# r7 ~/ {, o: h/ ]4 z" h, y+ @    if(nTO==0)      //看门狗引起的复位
! n7 u9 w+ E5 P0 m- k/ G   {
; X4 O7 L/ A( K      LED1=~LED1;
* P% p  u5 w3 L' u# a6 D   }
% e7 N' x+ }, w. j% d- [( W9 n         KEY_F=KEY;   //读出休眠前的按键状态。1 f; L. W5 L* c0 \% ?1 e; q) _3 a
         SLEEP();+ b+ Z9 {% D+ K0 q( c9 m
    }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

165

主题

528

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步
9 ?, T& `, j; E1 P: _" ?" R

159

主题

583

帖子

1229

积分

四级会员(40)

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

积分
1229
3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!
" H% N1 s' }: `/ J/ _7 z

160

主题

620

帖子

1233

积分

四级会员(40)

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

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-17 20:30 , Processed in 0.056235 second(s), 32 queries , Gzip On.

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

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

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