⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 NE64板和EEPROM_AT93C46程序 MC9S12NE64
💻 C
字号:
/*程序采用单片机的普通IO口读写AT93C46,其中程序没有用锁项环,所以采用
4M晶振得到的总线频率为2M,函数模块为读函数、写函数、读写使能和读写禁止函数*/

#include <hidef.h>      /* common defines and macros */
#include <MC9S12NE64.h>     /* derivative information */
#include <stdio.h>

#pragma LINK_INFO DERIVATIVE "1"
#pragma MESSAGE DISABLE C1420

//定义单片机的SPI端口为普通的IO口
#define CS PTS_PTS7
#define SK PTS_PTS6
#define DI PTS_PTS5
#define DO PTS_PTS4

#define addr 0x10
#define PLL

unsigned int write_data[10]; //把这些数据写到EEPROM里面
unsigned int read_data[10];	 //从EEPROM中读取的数据放到这个数组里面

char buf[30];
void TransmitT(char *text)
{unsigned char a;
  a=SCI0SR1;
  while (*text != '\0')
        {while (!(SCI0SR1 & 0x80));  /* wait for output buffer empty */
         SCI0DRL = *text++;}
}
void TransmitTCom2(char *text)
{unsigned char a;
  a=SCI1SR1;
  while (*text != '\0')
        {while (!(SCI1SR1 & 0x80));  /* wait for output buffer empty */
         SCI1DRL = *text++;}
}
#define BusF 2 //总线频率 单位M
void delay(int n)  //延时n uS
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<BusF;j++){
asm nop;
}}
//写使能
void Ewen(void) {
    unsigned char temp,InData;
    CS=0;	
    SK=0;
    CS=1;
    InData=0x98;    // 10011XXXX
    for(temp=9;temp!=0;temp--) {    // 9
        DI=(InData&0x80)>>7;
        SK=1;	SK=0;
        InData=InData<<1;
    }
    CS=0;
}

// Disables all programming instructions.
void Ewds(void) {
    unsigned char temp,InData;
    CS=0;
    SK=0;
    CS=1;
    InData=0x80;    // 10000XXXX
    for(temp=9;temp!=0;temp--) {    // 9
        DI=(InData&0x80)>>7;
        SK=1;	SK=0;
        InData=InData<<1;
    }
    CS=0;
}

// 读数据,读出的为16位
unsigned int Read(unsigned char address) {
    unsigned char temp;
    unsigned int result;
    //Ewen();
    SK=0;   DI=1;   // 110 A5-A0
    CS=0;   CS=1;
    SK=1;   SK=0;   		// 1
    address=address&0x3f|0x80;
    for(temp=8;temp!=0;temp--) {    // 8
        DI=(address&0x80)>>7;
        SK=1;	SK=0;
        address=address<<1;
    }
    DO=1;
    for(temp=17;temp!=0;temp--) {   // 16
        SK=1;
        result=(result<<1)|DO;
        SK=0;
    }
    CS=0;
  //  Ewds();
    return(result);
}

// 写数据,地址位A5~A0,数据为D15-D0.
void Write(unsigned char address,unsigned int InData) {
    unsigned char temp;
    Ewen();
    SK=0;   DI=1;   // 101 A5-A0
    CS=0;   CS=1;
    SK=1;   SK=0;   		// 1
    address=address&0x3f|0x40;
    for(temp=8;temp!=0;temp--) {    // 8
        DI=(address&0x80)>>7;
        SK=1;	SK=0;
        address=address<<1;
    }
    for(temp=16;temp!=0;temp--) {   // 16
        DI=(InData&0x8000)>>15;
        SK=1;	SK=0;
        InData=InData<<1;
    }
    CS=0;   DO=1;
    CS=1;   SK=1;
    while(DO==0) {          // busy test
        SK=0;	SK=1;
    }
    SK=0;   CS=0;
    Ewds();
}

void main(void) {
	
#ifdef PLL
/*--------锁相环初始化-------*/ 
 CLKSEL=0x00;             //disable pll;
 PLLCTL=0xe1;             //CLOCK MONITOR=ON,PLL=ON,AUTO SELECT,是默认设置
 SYNR=24;REFDV=3;         //bus clock =25M,如果采用25M晶振,要获得25M总线则

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -