找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

165

主题

528

帖子

1255

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
PIC12F508单片机学习之一——定时器/ J5 c% Z7 L  ~" [; R: V

4 v7 W4 X  w5 C; B* o1 yPIC12F508单片机是没有中断的,定时器只能是查询方式。
1 ^* X% n& ^. z6 N- t* B) F
/ v$ Z$ c4 H+ q9 R# m3 ~编译器用的XC8,编译环境IDE用的是MPLAB X IDE。7 F4 d. V  @9 ?$ L( E

. Z& m. A* Z, q( t7 E* Y: A//***************************************************! Y" o& T- D7 T1 p! r' Y( K6 ]! U5 Y
//             __________________
9 Z6 T2 ~, N6 i7 R//             VDD-| 1            8 |-VSS
6 W! C0 @- X9 `- g; G//             GP5-| 2           27 |-GP0/DAT
9 m4 @% o0 c, Y: Q8 _//             GP4-| 3           26 |-GP1/CLK
* G7 t. m) o% B$ W) ?& x//GP3/RMCLR--| 4           25 |-GP2
" u* R# S. D1 T4 A9 Y$ m- s//             |________________|
. `8 D0 f$ o* L1 ~//               12F508
7 y3 f, ^  S3 p& P//***************************************************
# N5 c3 J  s/ O3 i' S2 H5 d3 S3 o5 T2 ~
//定时器模式试用
& z$ m; T7 a, d" a7 H8 ^2 @. E8 K9 X#include$ H; b: e4 f- P7 ]! F% L; z
#include
) ~; e3 p! {0 {  L/ m
7 s$ C7 {; q/ s2 [" g// #pragma config statements should precede project file includes.6 o$ a* U4 g, t" Y
// Use project enums instead of #define for ON and OFF.
' h/ c7 {  V% E. T( T( [: p7 @
2 z! b) i5 N. O  s+ s// CONFIG
* J! @2 N8 _% r#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)3 R9 A. z$ o0 f" c3 S
#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)) Y* S! i8 `# Y" r& g
#pragma config CP = OFF         // Code Protection bit (Code protection off)4 Z# V& x2 p( {1 u: S( J& y3 a# q
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
' E* b. s; k. N! U9 q/ a, g1 D! _& j) P
#define uchar unsigned char2 H' s9 _/ i# E1 G
#define uint unsigned int
: Q1 L1 _& @& A* _2 ]) @. Muchar  count;  {0 K) N0 V, I+ `
//uchar  GP3_F;
( o7 y( j" d( Rvoid Init()
: f3 j! K, R; j/ p& q{4 \  I& a) Z' ^. u4 |
       TRIS=~0x3F;  //GP3输入,其它输出, C& r; M' A5 C
     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
# a/ `7 i% U9 d9 z8 Y$ [0 g     TMR0=0x63;   //10ms x=257-tJ/4F
1 Q- }8 q6 f  w  E. a( V3 H}
, ~( ~* c  W! rvoid  main()
% X: ^& T+ Y5 g{  
9 M9 [, U# u9 a, n* X1 F# oInit();  5 O7 i0 G( a7 W" }
while(1)
8 S1 T8 j' W) d      if(TMR0==0xFF)" |6 o1 a% |7 p& t4 U8 n& f9 E  Z: I" n
      {
4 F6 F" d* M) x- W, N* K5 @$ O       TMR0=0x63;   //* n; v, p3 d* C7 O* n
       if(++count==50)//1s
7 O! t( @( N3 q& f* R7 ~) p        {
: d, {2 \1 Q! g; }& J' M2 t  S         count=0;
: C* n- d0 B) o5 _/ @; Y0 r, t+ m* n* ]         GP2=~GP2;//LED闪烁
- n' V: f& a( N0 Y- D/ Y' J        }
  z0 |- c' C, M4 i2 O$ t9 }+ d       }
% @5 i9 H9 d! u  V( A- F    }+ r8 g; [+ T4 |/ u; q
} 8 h2 S2 @9 m) V& O) v, f

4 s! |: U0 q4 y/ P7 }2 W$ r2 O. A' T! h/ l6 i
PIC12F508单片机学习之二——看门狗和休眠模式试用8 ]$ ~1 L$ q# h7 o& W& h0 R8 p
; o% _$ j3 f( L7 L3 `  E* B
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
5 G, ]6 G' P- {' Y6 F
) P9 [4 S2 E& d% L* I6 B# G编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
! t5 [) ?! \$ S0 ~' S( A
4 m3 e4 U% J4 H( S" {下载器是PICKIT3.! W) R+ x+ k9 V

( v: F2 z4 A! D5 G  {1 p, _//***************************************************) R9 v) q4 q" ~; K
//           __________________
- N1 z2 a; p) Z9 ]8 G: Z# p//       VDD-| 1            8 |-VSS
8 s( @/ Z+ W: q- L//       GP5-| 2           27 |-GP0/DAT
+ Q& o/ T7 x" l//       GP4-| 3           26 |-GP1/CLK) a: I1 z9 }4 {0 |& ~
//GP3/RMCLR--| 4           25 |-GP2
6 L, I5 _3 ~/ C* M//           |________________|
7 C: z0 S( b$ i0 j//               12F508
+ W- ~/ _. y) {. A0 I0 {//***************************************************' F4 J: g5 O' _2 w  f/ n
// 看门狗和休眠模式试用
6 j. o* @1 Q6 L4 L' p/ R. ~, J+ A; K0 I" u- m% e, q) s' v

& [4 Z7 i2 L3 w1 t#include
5 @0 d6 D( y9 ]: z#include+ ]$ l$ G% q6 F" }) A

. z5 f! t* V5 h7 L// #pragma config statements should precede project file includes.3 H  G# a" s) u2 E9 ~; ^$ C3 x
// Use project enums instead of #define for ON and OFF.
4 K$ p- i: r9 h$ Z) T$ [
) d/ B8 ?8 x( ?8 ?! ~7 l$ d// CONFIG: W+ P! U- {( a( M: e; H/ `
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)* V* k' @# k- {
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )  W7 \1 h) P4 e
#pragma config CP = OFF         // Code Protection bit (Code protection off), o, w/ A5 a" ^( g1 Z
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD). t+ d) s+ ?' f8 ^
8 m  m8 B( g: E3 Y$ ?4 x8 {
#define uchar unsigned char2 {4 l' N! R1 Y% I0 g6 y
#define uint unsigned int4 H3 u; {( w' v$ t( ^. a; Y7 s
uchar  count;2 Z' E; J+ a0 \" ^
//uchar  GP3_F;
# O/ C5 F) P9 m, G# dvoid Init()
" t( C: \, L1 \2 u  Z5 j{
% l' ?" ~1 J2 k5 e8 \; n: x$ Y1 t, m    TRIS=~0x3F;  //GP3输入,其它输出
: x! x+ f8 O' Y) n; A    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
% F# }' H& Q4 V4 E0 {) k; z}. ?% k  v& P$ I; S7 p$ @
void  main()
# L3 M8 {8 [' y& F, |{  
. j& h; M; \# gInit();
# `' j' a6 J% b  D) z# A
" U9 V2 L: G2 k: D( K9 N/ L1 d8 u8 X- j   + x$ G5 O$ _4 z
while(1)+ O5 q1 P/ T$ _
     {
7 W  ?, d1 l/ o% x% l( S' ~: N# Z8 Z' j4 f: D5 r2 o, n
    if(nTO==0)      //看门狗引起的复位0 ~) o' m" j3 A1 z% U- {+ A1 H
   {* q, A/ s: ~2 |; T$ p( }
      GP2=~GP2;  U3 `- c5 c2 I2 H
   }    ' i% e, E) i7 ?% o3 h' s3 p4 W
         SLEEP();% h; O! y; w; j/ M
    }
; A% `  I# t1 h}8 C7 |" x9 b% l+ d. r: g

: J) Q/ @+ O# y3 ^$ y# J& R5 o
3 n4 v$ t% H$ G. ]PIC12F508单片机学习之三——按键唤醒
# |) Y% }- ?7 [$ {( m+ V  
6 P7 l2 K  C7 }  h) V" qPIC12F508单片机是没有中断的,按键中断只能是查询方式。  ]* a% A4 z; ?' ]+ g/ r) ]5 Z9 D/ c

6 H- ~1 Q2 ?; l编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
6 H4 r3 @( y2 ~# U# l% s) q! O2 _' E+ e) ]3 o3 w. E& h2 v
下载器是PICKIT3.* q1 \, z; V7 n# A
# W" {2 ~3 z5 H- j0 K- ?
//***************************************************1 f- N# z8 h$ i# b% y$ f; a
//           __________________
* ^. D- C0 X5 s- k//       VDD-| 1            8 |-VSS0 ~, H& ]0 e8 {
//       GP5-| 2           27 |-GP0/DAT
2 X3 t; t/ X: q- {# V//       GP4-| 3           26 |-GP1/CLK. R& b1 r3 Y: }5 V; \4 s% w
//GP3/RMCLR--| 4           25 |-GP2
) g/ J; n! J6 i0 l' B' n0 U: G1 \//           |________________|- s3 v. M3 e3 v& _9 y
//               12F508( b3 T2 t$ W/ Q/ p
//***************************************************
8 o/ L& m1 G, Y! C8 v- b. b% @/ H4 o6 Y
//看门狗 休眠唤醒
- j7 G1 P1 p' F4 m//按键唤醒
7 j, {6 T2 ?) {, k5 Y
' k" @4 Y# n9 ?+ n, y6 a, G#include' E/ U2 }! t( ~8 c1 e
#include
+ t( ^9 @% W  a, ]7 J/ _& w5 d, Y0 ~
* |$ b9 Z3 i! M6 ?, V8 e8 }) P+ _// #pragma config statements should precede project file includes.
/ D# {& ~3 ?. T: e: g// Use project enums instead of #define for ON and OFF.
( M& t! F- n1 K2 x$ `; l$ W$ ^3 Z# U: v& J
// CONFIG
/ J' l, e4 {+ H) H2 c& e4 J#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)) ], B) x0 Z6 E. i# x' U$ i- _
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )* @5 c8 F4 Q6 a  Q  C0 F
#pragma config CP = OFF         // Code Protection bit (Code protection off)# k. T* O: V& Y/ Y0 `
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)( R, M8 w, G1 s/ P
/ f8 @6 S" R  n: j* O
#define uchar unsigned char- W2 X. O& w& i" u
#define uint unsigned int
: e* e. w8 b, |) j; m8 F#define LED1 GP50 h6 W  R% D  Y8 p% i& E3 R1 y
#define LED2 GP4' |( v: p9 \4 A+ a  ~
#define KEY  GP3  B  i5 m& k  Q
bit   KEY_F;  h1 A) Y( \0 a" l4 n
uchar  count;6 \, k8 d6 s/ x) g2 b0 q2 H
//uchar  GP3_F;
- O9 k3 {: q7 S8 ]0 _void Init()% ?% W* d) A; x( ?( }, K, @8 f" @
{
% k( @2 c) c# g! s7 J# [1 @   TRIS=~0x3F;  //GP3输入,其它输出
( N6 s; D* N* F/ Z! D   // OPTION=0x07; //这个寄存器上电复位均为1/ R( J1 S: m' J: `6 o8 m0 y5 k! p
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
) ?2 }6 v3 T: o    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S6 `1 Z- m1 @( C: q% o: g
  // TMR0=0x63;   //10ms
' H4 `7 l& _# m* P1 J# H}" n* `) Z/ n4 Q6 g, p. m9 Z* E5 s/ ?
void  main()
' c9 S# T3 V. x& f. p{  0 Z. L* n3 G" f$ [8 I
Init();   
  q7 r7 L; N# A% y' \8 Mwhile(1), W4 Q7 w5 e0 E
{7 P- q+ L4 c4 y8 t$ l1 s
    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒
% {# b9 @( h6 c' R8 i- N: j' I) @+ X   {3 }( \( A, q: {
     LED2=~LED2;% t5 P( f0 Z) m, m, R$ N4 r
   }" x4 ^7 s/ G% e: L1 ?) ]
    if(nTO==0)      //看门狗引起的复位
; x& j, V* n3 h8 c1 h: o' t7 |, ?   {' W8 h) ?5 A- ^+ V
      LED1=~LED1;
; z5 i" V; v4 t6 q$ e   }
) b+ P( o" j) O. g+ Y) x         KEY_F=KEY;   //读出休眠前的按键状态。( Q1 i/ T1 Z# Z7 V$ ~7 D
         SLEEP();
& k3 ^5 W6 i& y' T- L# E( ~    }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

165

主题

528

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步
$ p$ s3 {) J% K1 r# H

159

主题

583

帖子

1229

积分

四级会员(40)

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

积分
1229
3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!& f. Z& k1 G8 h8 f" P. N7 ]( 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-20 14:34 , Processed in 0.080446 second(s), 31 queries , Gzip On.

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

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

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