📄 main.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 + -