找回密码
 注册
关于网站域名变更的通知
查看: 394|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
PIC12F508单片机学习之一——定时器$ r' ?$ k( j) r
! R7 i( g) [& s: y3 _  ~: _5 m
PIC12F508单片机是没有中断的,定时器只能是查询方式。
: `( f  s# g" {# A7 G8 l8 o% W) o* P$ V+ y8 M( x) `
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
# l8 d5 g4 ~8 `. S9 W( d
4 x% p& m- D! l) A& s: p/ J8 F; t//***************************************************. i+ B9 n, d4 W
//             __________________
# I; o$ E7 u# Z# ]% M  b//             VDD-| 1            8 |-VSS
8 v* S, j& j% {2 [//             GP5-| 2           27 |-GP0/DAT$ F7 T* v! `' p* }# a
//             GP4-| 3           26 |-GP1/CLK. z1 b& B& K0 C, f. q) ?4 n
//GP3/RMCLR--| 4           25 |-GP2
( ^3 k! `( `  ~8 z//             |________________|2 `, E$ y0 o8 T' y- m
//               12F508
5 N' y2 j; q) R2 R1 O2 Y//***************************************************
6 E) F4 p3 \& _  L
6 e; b' R2 T6 ^$ W//定时器模式试用
; R' v8 W) g& L/ o* A* L#include4 X0 ]" e5 i3 B( n( g! d0 y
#include
4 ~: i/ j* b/ J; [, t7 S3 }+ N" F0 X/ r$ u6 b2 O$ C6 S: z. u
// #pragma config statements should precede project file includes.. a! p  e) t3 N# ?+ g7 F7 h
// Use project enums instead of #define for ON and OFF.
' b$ {4 W6 D+ B* w2 w; Q7 U# X4 E' i- H
// CONFIG
! ~5 v4 z! n& E  j3 |#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
/ z4 v7 C! D9 `* i) w#pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled)3 M( d3 ?& Y5 e) [
#pragma config CP = OFF         // Code Protection bit (Code protection off)
1 e) D9 V& ?4 h# l#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)4 _. K- o, W1 ?; O
( J. Y7 Y- G" d7 O$ E
#define uchar unsigned char
3 X: f# x( t) S$ {/ n: N$ t#define uint unsigned int
3 g) G' y4 P/ O# N8 I( s" m# Muchar  count;
, Y) F% o5 y* B//uchar  GP3_F;
9 ]% y4 G- ^9 n; O! p6 s# T2 t7 L/ ?void Init()2 v/ W+ m5 D$ [: ~; S
{' r6 k1 w) ~* K- {4 ~3 ?( X* D
       TRIS=~0x3F;  //GP3输入,其它输出
$ \5 _7 f4 K8 L% J+ ?     OPTION=0xC5;//分频器给定时器 64 4MHz        x=257-tJ/4F
5 h! M# U* {' M; D+ T* @3 Q: H     TMR0=0x63;   //10ms x=257-tJ/4F2 _: r  |! u2 I9 |7 T4 Q
}
# O3 u1 |1 i9 n9 u* k* E  [; Rvoid  main()
& q: v# J* e5 H, ]' N{  , B$ N! s5 Q+ \' v: y: J
Init();  
% U; f1 `' T, S9 c% ]while(1)7 c8 c6 h: b: I- I. O# d# H* }% L
      if(TMR0==0xFF)
3 q" a- h1 s4 I  f" |1 T% i& T/ [      {3 n) L+ i2 F" H) f6 Q
       TMR0=0x63;   //
# `1 |+ K" U1 o  A! Q       if(++count==50)//1s+ [; d( o$ d& l8 B
        {
3 l" r& D' N& h9 B1 C' \! ~! Q$ ?         count=0;
6 T; G/ D( p9 R) f& `         GP2=~GP2;//LED闪烁0 |& Q9 t. z4 f# e1 X
        }4 W6 f; Y5 `* p8 M
       }2 l3 s  V0 y3 ~4 a/ L
    }8 O( |- `  r, D: K5 G
}
( f$ L% I5 M- Z5 b& G# ?5 A9 _! l

- X2 }$ D1 z* c0 ?! b( oPIC12F508单片机学习之二——看门狗和休眠模式试用
. u4 K. T' }6 z: v- j- y( c& \8 e9 F$ m( D
PIC12F508单片机是没有中断的,复位情况只能是查询方式。
5 P* _# \6 ^0 N
1 W) p9 f( M* Y+ ?7 H% ?9 N编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
* G/ A8 q" H1 z" `1 L
/ w1 C! p! u& _/ }) Q下载器是PICKIT3.
' Y3 I/ P& C" g9 s; c6 ^( N( `# j% j, u0 S
//***************************************************
: J* a7 t) ~5 ]5 l$ \//           __________________, A' w. `  A2 a- P1 }
//       VDD-| 1            8 |-VSS
) v4 b: W* R$ M3 F//       GP5-| 2           27 |-GP0/DAT
* i9 @; O% o! P% W3 G//       GP4-| 3           26 |-GP1/CLK7 j3 E6 P- S  O2 W- H5 n" D8 p
//GP3/RMCLR--| 4           25 |-GP2
3 v1 m% u  n) W" i5 P) |//           |________________|
( K) |2 ~, w) ?//               12F5083 M8 \3 v, M/ n9 M$ X# j5 ]
//***************************************************
0 v- L6 g1 W4 G1 V& W// 看门狗和休眠模式试用& ?. ^$ u7 K/ e3 Z6 M

( Y  @* M& I. b
, Y2 N7 M3 f7 e5 H$ ~#include- Q* ]$ ?) }  z6 S
#include
' M; L- {$ H. `: ^& S/ e
* U" h1 D" M2 V6 q) |' W' w// #pragma config statements should precede project file includes.
6 l( q" r5 ?( p// Use project enums instead of #define for ON and OFF.7 k$ `7 K0 n: W, C8 ?' P7 g4 F
8 n) j! D: c0 U9 Z$ w- [- V
// CONFIG( y' C, Q8 x9 z
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)
5 ]2 \' A6 t( n% j/ q0 P#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )1 e) D. w0 Z* E' ]% k8 Z7 R7 w2 h
#pragma config CP = OFF         // Code Protection bit (Code protection off)3 \( v  ]5 T, L8 c/ s) b* k
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)# F6 E& X, Q% S5 q/ L$ S% V$ A9 B
$ b( g; i& k* E( D9 I4 m. R
#define uchar unsigned char! V6 h0 U  ~& Q3 S. U
#define uint unsigned int
0 N% X; g( D- z! K& Uuchar  count;
- ]5 V$ ]# ^% @7 h: _4 l//uchar  GP3_F;7 \* \6 D8 q: F/ J- e
void Init()* c0 N' C4 a+ C/ G8 q* y* `1 u+ Y
{
, E7 \* S6 w5 G& H" d" _    TRIS=~0x3F;  //GP3输入,其它输出/ q8 V3 \5 k# I; j6 k1 p# B  ?
    OPTION=0xCE; //定时器分配看门狗 时间是18Ms*64=1.152S
. p, b5 p( {. z/ H; N# o: `" u}
1 z$ t* Z/ A' k8 A# b3 E) x! H$ evoid  main()" J' E" H% v) P# G+ f$ J
{  
1 I$ d2 w  r' w' v7 S; E2 NInit();
0 B) h; P% X) V8 u+ c+ h7 `& U. b: f0 j' K7 Z6 C1 {. w: z/ \
   " e) \' o. S2 ~/ t; v
while(1)
# a$ D1 Y+ t. J! c: j     {
- |% m: _  E  v
3 E# ]0 {! m# e; j/ m# h    if(nTO==0)      //看门狗引起的复位$ L9 P- e! M" D" n' A0 \& I7 W
   {5 u, N- N5 h8 @+ s' H3 |. _- m
      GP2=~GP2;- m+ n; t. X/ `1 z4 T. T
   }   
% }* v8 g& j1 I. _2 j         SLEEP();4 W9 _; ]. o: ~, D! p8 T
    }
+ _) R( l( A9 d. U/ o6 O}
* a8 z3 i5 J2 f3 c3 w) e) t$ A1 U" U- ~
% y- [3 T3 O8 ^$ r1 d  f2 }4 c
PIC12F508单片机学习之三——按键唤醒
* j( v! W! ^0 S7 e  x( n  
5 W: ~2 s& L8 f- S$ q, xPIC12F508单片机是没有中断的,按键中断只能是查询方式。
3 }) _4 t3 q' {/ h5 `$ B9 b8 Z! @  B* x% N( q1 k9 {3 Z/ Z
编译器用的XC8,编译环境IDE用的是MPLAB X IDE。
3 a# G8 n) E1 C. `% _: ], k% F% ]
下载器是PICKIT3./ a; M3 Z0 B( N6 C) D8 z$ _

, F$ I3 M4 I1 X* O; M//***************************************************
: ?- e9 e6 \$ |( u//           __________________* i4 ~! o8 p' @5 i8 ^
//       VDD-| 1            8 |-VSS, U  r+ `" q$ Y; x) j2 q  c
//       GP5-| 2           27 |-GP0/DAT
1 y" W3 y/ ^2 k- f" w! ]) ~3 a9 L8 n//       GP4-| 3           26 |-GP1/CLK
0 l2 l5 p* V  c' j8 m//GP3/RMCLR--| 4           25 |-GP2# Q* u( q8 A. [% `5 i4 E/ D% X
//           |________________|% ?* W" J8 A2 M' v5 E% `
//               12F5089 k3 O% ]& H8 B
//***************************************************
  w6 P2 I8 a/ t' M
  k# y5 o$ S+ E+ H( d5 o  H//看门狗 休眠唤醒
. ~5 F  j" c. ~' k- A; d' ^//按键唤醒7 I0 y+ w& W. O, D
9 X0 O2 K2 ~  c0 X
#include+ ?7 p' `& L, ?% X4 r6 @3 ]" H
#include
2 [7 G( q- J2 b+ J8 P! z. p3 T, B/ z( t& a& Y: M
// #pragma config statements should precede project file includes.6 j( U& n+ o/ N& B4 s
// Use project enums instead of #define for ON and OFF.8 b# w: _: D6 l/ l( F' Q
/ _0 V% L2 h1 G) I! _! ~  C! @
// CONFIG0 T3 g2 C. o: ?1 L5 _: l
#pragma config OSC = IntRC      // Oscillator Selection bits (internal RC oscillator)  p3 L7 w& d, q% y# o+ [
#pragma config WDT = ON        // Watchdog Timer Enable bit (WDT Enable )8 R+ R+ F% R- R1 a2 @4 D
#pragma config CP = OFF         // Code Protection bit (Code protection off)
5 w3 s( g/ L7 n# `" I#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital input, MCLR internally tied to VDD)
: g% s  f+ h& n4 [, z) Q0 J. U& v' `( ^% @, X% ~2 {5 M
#define uchar unsigned char+ N8 b, {: }. Y1 x1 C; w
#define uint unsigned int" `4 J% N) {& U0 X: ]" W' {
#define LED1 GP5- @. {, d, y: Q8 h# r( M
#define LED2 GP4+ i3 {; u; c/ \! P5 d$ \( h
#define KEY  GP3' p5 N, ~; L( r9 f* f$ O% e3 ~
bit   KEY_F;. f( x9 a3 H% c; |" N. y' i
uchar  count;
. x6 }& [4 k* l- Z# a0 f# r( l; `//uchar  GP3_F;! |' A% N6 C- k1 j# \7 N4 C+ d
void Init()
+ j' `+ Q/ P) G3 C8 ^{& v) F& f3 A9 F
   TRIS=~0x3F;  //GP3输入,其它输出
$ g' z* ~* B2 L/ ~5 M, V   // OPTION=0x07; //这个寄存器上电复位均为14 i) x- n& A% l8 Q5 i
   //  OPTION=nGPWU|nGPPU|PSA|PS1|PS2; //引脚中断唤醒禁止 弱上拉禁止定时器分配看门狗时间是18Ms*64=1.152S
  ]5 {0 n3 N0 h  v: B' `: K    OPTION=0x1E; // 引脚中断唤醒使能 弱上拉使能  定时器分配看门狗时间是18Ms*64=1.152S
( o0 H# c; \7 Y0 q# g- I, H  // TMR0=0x63;   //10ms
6 g: j- M4 r' S$ Y4 }* f}
3 a5 U; U# ~9 c. {void  main()
5 ?* w4 B& c+ l5 t; e7 q{  
; |6 p& P! Y  S3 PInit();   ; G$ H& N: r8 j
while(1)- A+ S1 g8 F  L( s
{- N/ |1 h, M/ I$ I
    if((GPWUF==1)&&(KEY==0))   //引脚引起的中断唤醒
  A$ R2 J( B- D% I% n3 X0 h   {
2 [, f" ^' {$ f& @+ {     LED2=~LED2;
. {. F& b* x4 q% h% q4 v   }
6 V! l( s+ u; N    if(nTO==0)      //看门狗引起的复位9 C. K) O- O& G, G" C% `
   {
- j& O" c& X8 V% I" ]8 k9 o      LED1=~LED1;. o6 p7 ]6 R: v- B! e
   }
8 K4 {( C3 X! V/ Z& ]. O+ K7 z         KEY_F=KEY;   //读出休眠前的按键状态。9 W6 B4 g; S, B: p- w0 ]
         SLEEP();
% D0 R0 Y* z* M% }    }

该用户从未签到

2#
 楼主| 发表于 2016-6-28 14:45 | 只看该作者
资源多,学习不止步" O  a/ G: O+ V5 p

该用户从未签到

3#
发表于 2016-6-29 10:47 | 只看该作者
路过捧场,谢谢分享!* q5 A$ T/ i, c. u; g* i3 \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-24 17:27 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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