基于HI-TECH C的PIC12C508读写93LC4源程序

发布者:温馨生活最新更新时间:2018-03-09 来源: eefocus关键字:HI-TECH  PIC12C508  读写93LC4 手机看文章 扫描二维码
随时随地手机看文章

  /************************************************************ 
 * 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;
}

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

 Function : StartBit          
  Input : None        
 Output : None          
  Description :  
  1. Set Chip Select(CS) = 1 (high)
 2. Set a Start Bit(1) to Serial Data Input(DI)
------------------------------------------------------*/      
void StartBit(void)
{
    CS = 1;
    DI = 1;
    Pulse();
}

    /*---------------------------------------------------- 
 Function : EWEN          
  Input : None        
 Output : None          
  Description :  ERASE/WRITE Enable
 ------------------------------------------------------*/      
void EWEN(void)
{
    unsigned char i,temp;

        StartBit();                  /* 1 */

        temp = 0x80;                        /* 0011xxxx ,(opcode:00, Address:11xxxx) */
    for(i=0; i<8; i++) {
        if(0x30 & temp)
            DI = 1;
        else
            DI = 0;
        Pulse();
        temp >>= 1;
    }

        CS = 0;
}

    /*---------------------------------------------------- 
 Function : EWDS          
  Input : None        
 Output : None          
  Description :  ERASE/WRITE DISAble
 ------------------------------------------------------*/      
void EWDS(void)
{
    unsigned char i;

        StartBit();                  /* 1 */

        DI = 0;                      /* 0000xxxx, (opcode:00, Address:00xxxx) */
    for(i=0; i<8; i++)
        Pulse();

        CS = 0;
}

    /*---------------------------------------------------- 
 Function : Write93LC46          
  Input : unsigned char Offset Address, unsigned int tx_data        
 Output : None          
  Description :  Write 16bits data in to 93LC46 Offset Address
 ------------------------------------------------------*/      
void Write93LC46(unsigned char Offset_Addr, unsigned int tx_data)
{
    unsigned char Addr, i;
    unsigned int temp;

        EWEN();

        StartBit();                  /* 1 */
    Offset_Addr=Offset_Addr&0x3F; /* 6bits address */
    Addr = Offset_Addr + 0x40;          /* 01AAAAAA ,(opcode:01, address:AAAAAA) */
    temp = 0x0080;
    for(i=0; i<8; i++) {
        if(Addr & temp)
            DI = 1;
        else
            DI = 0;
        Pulse();
        temp >>= 1;
    }

        temp = 0x8000;                      /* DDDDDDDDDDDDDDDD(16bits data)*/
    for(i=0; i<16; i++) {
        if(tx_data & temp)
            DI = 1;
        else
            DI = 0;
        Pulse();
        temp >>= 1;
    }
    CS = 0;

        EWDS();
}

    /*---------------------------------------------------- 
 Function : Read93LC46          
  Input : unsigned char Offset Address
 Output : unsigned int          
  Description :  Read 16bits data from 93LC46 offset address
 ------------------------------------------------------*/      
unsigned int Read93LC46(unsigned char Offset_Addr)
{
    unsigned char Addr, i, temp;
    unsigned int  rx_data;

        StartBit();                  /* 1 */
    Offset_Addr = Offset_Addr&0x3F; /* 6bits address */
    Addr = Offset_Addr + 0x80;          /* 10AAAAAA ,(opcode:10, address:AAAAAA) */
    temp = 0x80;
    for(i=0; i<8; i++) {
        if(Addr & temp)
            DI = 1;
        else
            DI = 0;
        Pulse();
        temp >>= 1;
    }

        rx_data = 0x0000;                    /* DDDDDDDDDDDDDDDD(16bits data)*/
    for(i=0; i<16; i++) {
        Pulse();
        if(DO)
            rx_data |= 0x0001;
        if(i < 15)
            rx_data <<= 1;
    }
    CS = 0;

        return(rx_data);
}

    void InitPIC(void)
{
    OPTION = (GPWU | GPPU | PS2 | PS1 | PS0);
    TRIS = 0x10;    
    CS = 0;
    CLK = 0;
    DI = 0;    
}

    /* Main routine */
void main(void)
{
 unsigned char addr;
 unsigned int rx_buf;
 
 InitPIC();
 /* Read a word then +1 and write back to 93LC46 */
 for (addr = 0; addr < 10; addr++)
 {
  rx_buf = Read93LC46(addr);
  rx_buf = rx_buf+1;
  Write93LC46(addr, rx_buf);
 }

    }


关键字:HI-TECH  PIC12C508  读写93LC4 引用地址:基于HI-TECH C的PIC12C508读写93LC4源程序

上一篇:读写24LCxx系列的EEPROM的实例C语言程序
下一篇:PIC单片机程序设计的基本框架

推荐阅读最新更新时间:2024-03-16 15:56

C51自学笔记】LCD1602
LCD1602: (16*2字符 A:当前显示 B:当前无法显示 初始化: #include reg52.h #define uchar unsigned char #define uint unsigned int sbit rs=P2^4; sbit rw=P2^5; sbit e=P2^6; uchar table1 = www.tlxmcu.com ; uchar table2 = LCD1602 test ok! ; //************************************************ //延时函数,在12MHz的晶振频率下 //大约50us的
[单片机]
【<font color='red'>C</font>51自学笔记】LCD1602
15W I2C 电源管理器以 3.5A 电流给 LiFePO4 电池充电
加利福尼亚州米尔皮塔斯 (MILPITAS, CA) – 2012 年 3 月 15 日 – 凌力尔特公司 (Linear Technology Corporation) 推出大功率、I2C 控制和高效率的电源通路 (PowerPath™) 管理器、理想二极管控制器及磷酸铁锂 (LiFePO4) 电池充电器 LTC4156,该器件适用于单节电池设备,例如便携式医疗和工业设备、备份设备以及其他高功率密度电池供电应用。该 IC 可高效地从各种电源传输高达 15W 的功率,同时最大限度地降低功耗并减轻热量的限制。LTC4156 的开关电源通路拓扑结构可无缝地管理从两个输入源 (例如:一个墙上适配器和 USB 端口) 至器件的可再充 Li
[电源管理]
PWM的C51程序
#include intrins.h #include stdio.h #include math.h #include UPSD3200.H #include upsd_pwm.h #define uint unsigned int #define uchar unsigned char PSD_REGS PSD8xx_reg _at_ csiop; #define KEYIO (~(PSD8xx_reg.DATAIN_A)) & 0x07 sbit CP=P4^7; sbit U_D=P1^1; void init_system(); // 系统初始化 uchar keyboard(); void uPSD_PWM4
[单片机]
基于S3C44B0X的嵌入式Socket通信设计
摘要:阐述了嵌入式系统的概念及嵌入式网络通信系统的结构。给出了基于嵌入式微处理器S3C44B0X完成具有以太网络接口的嵌入式网络通信系统的电路设计方法,同时给出了在一个裁剪的uCliunx操作系统环境下实现系统与主机Socket通信的应用端用户程序。 关键词:嵌入式系统;uClinux;Socket通信;S3C44B0X 随着微电子技术的不断创新和发展,嵌入式系统已经广泛渗透到科学研究、工程设计、国防军事、自动化控制领域以及人们日常生活的方方面面。由嵌入式微控制器组成的系统其最明显的优势就是可以嵌入到任何微型或小型仪器和设备中。 嵌入式系统是指将应用程序、操作系统与计算机硬件集成在一起的系统。它以应用为中心、以计算机技术为基
[应用]
无缝5G网络,实现C-V2X,Movandi推出车载中继器
日前,Movandi通过车载BeamXR技术,成功演示了其在车联网中提供无缝5G网络实现C-V2X的可行性,首席执行官兼联合创始人Maryam Rofougaran表示:“通过在真实环境下对Movandi中继器进行车载测试,证明毫米波技术可为扩展5G覆盖范围提供现成的解决方案。我们的技术已准备好在互联汽车中进行大规模部署。 通过将5G无线电定制为一个完整的系统、共同设计的RF芯片组、DSP功能、波束成形和算法,我们对BeamX 毫米波中继器的性能也进行了优化,从而满足汽车应用。此外,我们还与5G软件创新者Airfide Networks合作开发了切换算法,使基于BeamXR的中继器在快速信号传输中更加高效。
[汽车电子]
无缝5G网络,实现<font color='red'>C</font>-V2X,Movandi推出车载中继器
基于89C52单片机的时钟设计
第一次来论坛发帖,不多说,直接上。 一直喜欢搞单片机,最近有时间,用51单片机做个板子玩玩。从电路板制作到最终调试,全部由本人自己完成。 原理图很简单,单片机最小系统,LCD1602,外加几个按键,绘制完的PCB长这样 完了就可以发工厂制作了,别说还真便宜,5块板子才5块钱。这个时候就可以着手买元器件了,单片机和液晶屏,烧录器,总共30左右。 板子到了,看起来还不错 接下来就可以焊接元器件了 准备调试,这里有坑。烧录器怎么也不能识别单片机,检查晶振电路,晶振启震(可以用示波器看波形,也可以用万用表量电压,电压大概是1/2VCC) 怀疑是线解除问题,在碰线的过程中,突然识别到了单片机,然后点击了下载,都没有
[单片机]
基于89<font color='red'>C</font>52单片机的时钟设计
C51单片机0~60计数器
源码 #includeunsigned char code table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char second=0; bit a=0; char t=0; int0_srv() interrupt 1{ t++; if(t==20){t=0;a=1;} TH0=0x3c; TL0=0xb0; } main(){ P0=P2=table ; TMOD=0x01; TH0=0x3c; TL0=0xb0; ET0=1; EA=1; TR0=1; while(1){ if(a){
[单片机]
<font color='red'>C</font>51单片机0~60计数器
rs232c串口接线图
RS-232, RS表示EIA的“推荐标准”,232为标准编号。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准(如图1所示)。接口标准包括机械特性、功能特性和电气特性几方面内容。   (l)机械特性 RS-232C接口规定使用25针连接器,连接器的尺寸及每个插针的排列位置都有明确的定义。在一般的应用中并不一定用到RS-232C标准的全部信号线,连接器引脚定义如图1所示。           (a)DB-25(阳头)             (b)DB-9(阳头)  图 通信连接器引脚定义    (2)功能特性 RS-232C接口的主要信号线功能定义如表1所示。  
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved