📄 sck.c
字号:
#include <C8051F020.h> // SFR declarations
sfr16 DP = 0x82; // data pointer
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 RCAP2 = 0xca; // Timer2 capture/reload
sfr16 T2 = 0xcc; // Timer2
sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
sfr16 T4 = 0xf4; // Timer4
sfr16 DAC0 = 0xd2; // DAC0 data
sfr16 DAC1 = 0xd5; // DAC1 data
sbit P_0 = P0^0;
sbit P_1 = P0^1; // green LED: '1' = ON; '0' = OFF
sbit P_2 = P0^2;
sbit RDY = P2^0;
sbit CS1 = P2^3;
sbit CS2 = P2^4;
sbit CS3 = P2^5;
sbit P_4 = P0^4;
sbit P_5 = P0^5;
sbit P_6 = P0^6;
//sbit P_2 = P0^2;
//sbit P_2 = P0^2;
void SYSCLK_Int(void)
{
int i;
OSCICN|=0x17; //内部晶振初始化
for(i=0;i<256;i++);
for(i=0;i<256;i++);
/* OSCXCN=0x47; //启动外部晶振
for(i=0;i<256;i++);
for(i=0;i<256;i++);
for(i=0;i<256;i++);
while(!(OSCXCN&0x80));
OSCICN=0x88;*/
}
void PORT_Int(void)
{
XBR2=0x40;
XBR0=0x02;
P_1=1;
P0MDOUT=0x05; //使用SPI串行总线
P2MDOUT=0x18;
}
void SPI0_Init(void) //SPI0初始化
{
SPI0CFG = 0x47;
SPI0CFG&= 0xBF;
SPI0CN = 0x03;
SPI0CKR = 0x00;
}
void ADC_Int(void)
{
ADC1CN=0x80; //允许ADC1
ADC1CF=0x19; //转换时钟
AMX1SL=0x00;
}
void SPI0_Write(unsigned char ch,unsigned char N) //SPI向AT45DB321C写一个字节
{
SPIF = 0; //准备输出数据
SPI0DAT = ch; //初始化输出,提供SCK信号,向器件写一个字节
while(TXBSY==1); //等待一个字节数据输出完毕
if(N==0x01)
{CS1=1;} //通讯结束
}
unsigned char SPI0_Read(unsigned char N) //读一个字节
{ //int i;
SPIF =0;
//RDY =0;
SPI0DAT=0;
while(SPIF==0);
if(N==0x01)
{CS1=1;}
return SPI0DAT;
//return 0x50;
}
void main (void)
{
unsigned char xdata * idata pwrite; //定义参数
unsigned int i,j,n;
unsigned char xdata *k;
unsigned char xdata * xr;
//unsigned char ch,l,m,p;
unsigned char chr,da;
WDTCN = 0xde; //禁止看门狗定时器
WDTCN = 0xad;
SYSCLK_Int();
PORT_Int();
SPI0_Init();
ADC_Int();
REF0CN=0x03; //允许内部基准点压
for(i=0;i<256;i++); //延时
pwrite = k; // initialize FLASH write pointer
FLSCL |= 0x01; // enable FLASH writes/erases from
PSCTL = 0x01;
k=0x1000;
for(n=0;n<64;n++)
{ pwrite = k;
FLSCL |= 0x01;
PSCTL = 0x03; // MOVX writes erase FLASH page
*pwrite = 0; // initiate page erase
PSCTL = 0; // MOVX writes target XRAM
FLSCL &= ~0x01; // disable FLASH writes/erases from user software
k+=0x0200;
}
//chr=0x55;
CS1=0;
for(i=0;i<2;i++);
SPI0_Write(0x84,0x00); //向片外FLASH写指令
SPI0_Write(0x00,0x00); //以下三行是写初始地址
SPI0_Write(0x00,0x00);
SPI0_Write(0x00,0x00);
//SPI0_Write(chr,0x01);
for(i=0;i<528;i++)
{
ADC1CN &= 0xdf; //AD转换器清标志位
ADC1CN |= 0x10; //AD转换开始
while(!(ADC1CN&0x20)); //等待采集结束
chr=ADC1;
SPI0_Write(chr,0x00);
}
CS1=1;
for(j=0;j<1000;j++);
CS1=0;
xr=0;
for(i=0;i<2;i++);
SPI0_Write(0xD4,0x00);
SPI0_Write(0x00,0x00);
SPI0_Write(0x00,0x00);
SPI0_Write(0x00,0x00);
SPI0_Write(0x00,0x00);
//SPI0_Read(0x00);
for(j=0;j<528;j++)
{
da=SPI0_Read(0x00);
// *((char xdata *)xr)=da;
*((unsigned char xdata *)xr)=da;
xr++;
}
CS1=1;
k=0x1000;
pwrite = k; // initialize FLASH write pointer
FLSCL|= 0x01; // enable FLASH writes/erases from
PSCTL = 0x01;
xr=0;
for(n=0;n<528;n++)
{
*pwrite =*((unsigned char xdata *)xr); // copy byte
xr++; // advance pointers
pwrite++;
k++;
}
//CS1=1;
//for(i=0;i<20;i++); //以上时采集数据
PSCTL = 0x00; // MOVX writes target XRAM
FLSCL &= ~0x01;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -