PIC12C508读写93LC46范例程式

控制/MCU

1814人已加入

描述

  /************************************************************

  * Processer : MICroChip PIC12C508 *

  * Compiler : Hi-TECH PICC 8.00 PL2 *

  * Writer : Jason Kuo *

  * Description : It CAN read/write 93LC46 (64 x 16-bit organization) *

  *************************************************************/

  static volatile unsigned char RTCC @ 0x01;

  static volatile unsigned char TMR0 @ 0x01;

  static volatile unsigned char PCL @ 0x02;

  static volatile unsigned char STATUS @ 0x03;

  static unsigned char FSR @ 0x04;

  static volatile unsigned char OSCCAL @ 0x05;

  static volatile unsigned char GPIO @ 0x06;

  static unsigned char control OPTION @ 0x00;

  static volatile unsigned char control TRIS @ 0x06;

  /* STATUS bits */

  static bit GPWUF @ (unsigned)&STATUS*8+7;

  static bit PA0 @ (unsigned)&STATUS*8+5;

  static bit TO @ (unsigned)&STATUS*8+4;

  static bit PD @ (unsigned)&STATUS*8+3;

  static bit ZERO @ (unsigned)&STATUS*8+2;

  static bit DC @ (unsigned)&STATUS*8+1;

  static bit CARRY @ (unsigned)&STATUS*8+0;

  /* OPTION bits */

  #define GPWU (1《《7)

  #define GPPU (1《《6)

  #define T0CS (1《《5)

  #define T0SE (1《《4)

  #define PSA (1《《3)

  #define PS2 (1《《2)

  #define PS1 (1《《1)

  #define PS0 (1《《0)

  /* OSCCAL bits */

  static volatile bit CAL3 @ (unsigned)&OSCCAL*8+7;

  static volatile bit CAL2 @ (unsigned)&OSCCAL*8+6;

  static volatile bit CAL1 @ (unsigned)&OSCCAL*8+5;

  static volatile bit CAL0 @ (unsigned)&OSCCAL*8+4;

  static volatile bit GP5 @ (unsigned)&GPIO*8+5;

  static volatile bit GP4 @ (unsigned)&GPIO*8+4;

  static volatile bit GP3 @ (unsigned)&GPIO*8+3;

  static volatile bit GP2 @ (unsigned)&GPIO*8+2;

  static volatile bit GP1 @ (unsigned)&GPIO*8+1;

  static volatile bit GP0 @ (unsigned)&GPIO*8+0;

  #define CONFIG_ADDR 0xFFF

  /* code protection */

  #define MCLREN 0xFFFF // memory clear enable

  #define MCLRDIS 0xFFEF // memory clear dISAble

  /*watchdog*/

  #define WDTEN 0xFFFF // watchdog timer enable

  #define WDTDIS 0xFFFB // watchdog timer disable

  /* code protection */

  #define PROTECT 0xFFF7 // protect the program code

  #define UNPROTECT 0xFFFF // do not protect the program code

  /*osc configurations*/

  #define EXTRC 0xFFFF // external resistor/caPACitor

  #define INTRC 0xFFFE // internal

  #define XT 0xFFFD // crystal/resonator

  #define LP 0xFFFC // low power crystal/resonator

  /* 93LC46 I/O PIN define */

  #define CS GP0 //Chip Select

  #define CLK GP1 //Serial Data CLOCk

  #define DI GP2 //Serial Data Input

  #define DO GP4 //Serial Data Output

  void Delay(unsigned int counter);

  void Pulse(void);

  void StartBit(void);

  void EWEN(void);

  void EWDS(void);

  extern void Write93LC46(unsigned char Offset_Addr, unsigned int tx_data);

  extern unsigned int Read93LC46(unsigned char Offset_Addr);

  void InitPIC(void);

  #define CLRWDT() asm(“ clrwdt”)

  #define SLEEP() asm(“ sleep”)

  #define ___mkstr1(x) #x

  #define ___mkstr(x) ___mkstr1(x)

  #define __CONFIG(x) asm(“tpsect config,class=CONFIG,delta=2”);

  asm(“tglobaltconfig_word”);

  asm(“config_word”);

  asm(“tdw ”___mkstr(x))

  #define __IDLOC(w) asm(“tpsect idloc,class=IDLOC,delta=2”);

  asm(“tglobaltidloc_word”);

  asm(“idloc_word”);

  asm(“tirpct__arg,” ___mkstr(w));

  asm(“tdw 0&__arg&h”);

  asm(“tendm”)

  __CONFIG(MCLRDIS & WDTDIS & EXTRC & PROTECT);

  /*----------------------------------------------------

  Function : Delay

  Input : unsigned int (counter)

  Output : None

  Description : Delay routine

  if counter=1 delay 35us , if counter=10 delay 134us,

  if counter=100 delay 1.12ms,

  These delay is base on internal 4MHz

  ------------------------------------------------------*/

  void Delay(unsigned int counter)

  {

  while(counter》0) counter--;

  }

  /*----------------------------------------------------

  Function : Pulse

  Input : None

  Output : None

  Description : Send a pulse (10) to Serial Data Clock(CLK)

  ------------------------------------------------------*/

  void Pulse(void)

  {

  CLK = 1;

  Delay(25);

  CLK = 0;

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分