📄 main.c
字号:
#include "msp430x24x.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define uchar unsigned char
uchar datax[256];
uchar a;
unsigned char temp[256];
unsigned long poinx=0;
uchar flashRead_data(unsigned long fl_addr);
#include "gq.h"
#include "xianshi.h"
uchar buff1;
#define fCS_EN P5OUT &= ~BIT0
#define fCS_DEN P5OUT |= BIT0
#define fCS_OUT P5DIR |= BIT0
//////////////////////
//SPI初始化
void UCB1Init(void)
{P5SEL |= BIT1+BIT2+BIT3; // P5.5,2 USCI_B0 option select
fCS_OUT; // P5.0 output direction
UCB1CTL0 |= UCMST+UCSYNC+UCMSB+UCCKPH; // 4-pin, 8-bit SPI mstr, MSB 1st
UCB1CTL1 |= UCSSEL_2; // SMCLK
UCB1BR0 = 0x01;
UCB1BR1 = 0;
UCB1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
void flashSend_Byte(uchar odata)
{UCB1TXBUF=odata;}
////////////////////
uchar flashGet_Byte(void)
{uchar indata;
indata=UCB1RXBUF;
return indata;
}
unsigned char Read_SR(void)
{unsigned char tmp_byte;
tmp_byte=0;
fCS_EN; //使能片选
flashSend_Byte(0x05); //发送读状态寄存器命令字
flashSend_Byte(0x00);
tmp_byte=flashGet_Byte(); //从端口读出的状态寄存器的内容
fCS_DEN; //禁止使能
return tmp_byte; //返回读出值
}
void Wait_Busy()
{while ((Read_SR())&0x01 == 0x01) /* waste time until not busy */
Read_SR();
}
void WREN_Check()
{uchar byte;
byte = Read_SR(); /* 读取状态register */
if((byte&0x02)!=0x02) /* 检查WEL位置位 */
{fCS_EN;
flashSend_Byte(0x06);
delay_us(0.5);
fCS_DEN;//如果未置1进行相应处理,如对其进行写使得操作
}
}
void Chip_Erase(void)
{WREN_Check();
fCS_EN;
flashSend_Byte(0x60); //片擦除命令字
delay_us(0.5);
fCS_DEN;
Wait_Busy();
}
void Sector_Erase(unsigned long Dst)
{WREN_Check();
fCS_EN; /* enable device */
flashSend_Byte(0x20); /* send Sector Erase command */
flashSend_Byte(((Dst & 0xFFFFFF) >> 16)); /* send 3 address bytes */
flashSend_Byte(((Dst & 0xFFFF) >> 8));
flashSend_Byte(Dst & 0xFF);
delay_us(0.5);
fCS_DEN; /* disable device */
Wait_Busy();
}
void Block_Erase_32K(unsigned long Dst)
{
WREN_Check();
fCS_EN;
flashSend_Byte(0x52); /* 发送32 KByte Block Erase命令*/
flashSend_Byte(((Dst & 0xFFFFFF) >> 16)); /* 发送3bytes地址*/
flashSend_Byte(((Dst & 0xFFFF) >> 8));
flashSend_Byte(Dst & 0xFF);
delay_us(0.5);
fCS_DEN; /* disable device */
Wait_Busy();
}
void Block_Erase_64K(unsigned long Dst)
{
WREN_Check();
fCS_EN;
flashSend_Byte(0xD8); /* 发送64KByte Block Erase 命令 */
flashSend_Byte(((Dst & 0xFFFFFF) >> 16)); /* 发送3 bytes地址 */
flashSend_Byte(((Dst & 0xFFFF) >> 8));
flashSend_Byte(Dst & 0xFF);
delay_us(0.5);
fCS_DEN; /* disable device */
Wait_Busy();
}
void flashwrite_data(unsigned long fl_addr,uchar fl_data)//向FLASH的一地址写数据进去
{fCS_EN;
flashSend_Byte(0x06);
delay_us(0.5);
fCS_DEN;
fCS_EN;
flashSend_Byte(0x02);//字节编程命令字
flashSend_Byte(((fl_addr&0xFFFFFF) >> 16));
flashSend_Byte(((fl_addr&0xFFFF) >> 8));
flashSend_Byte(fl_addr&0xFF);
flashSend_Byte(fl_data);
delay_us(0.5);
fCS_DEN;
}
///////////////
uchar flashRead_data(unsigned long fl_addr) //从FLASH某一地址读出数据
{uchar fdabyte;
fCS_EN;
flashSend_Byte(0x03);
flashSend_Byte(((fl_addr & 0xFFFFFF) >> 16));
flashSend_Byte(((fl_addr & 0xFFFF) >> 8));
flashSend_Byte(fl_addr & 0xFF);
flashSend_Byte(0x00);
fdabyte=flashGet_Byte();
fCS_DEN;
return fdabyte;
}
//////////////
void UCA1UART_init()
{
P3SEL |= BIT6+BIT7; // P3.6,7= USCI_A1 TXD/RXD
P3DIR |= BIT6; //输出
P3DIR &= ~BIT7;
UCA1CTL1 |= UCSSEL_3; // CLK = SMCLK
UCA1BR0 = 142; // 8MHz-19200
UCA1BR1 = 0x00; // 65+0*256=833
UCA1MCTL = UCBRS1+UCBRS0+UCBRS2; // Modulation UCBRSx = 4
// UCA1BR0 = 0x41; // 8MHz-19200
/// UCA1BR1 = 0x03; // 65+0*256=833
// UCA1MCTL = UCBRS1; // Modulation UCBRSx = 4
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UC1IE |= UCA1RXIE; // Enable USCI_A0 RX interrupt
_EINT();
}
#pragma vector=USCIAB1RX_VECTOR
__interrupt void USART1_RX(void)
{
buff1=UCA1RXBUF;
flashwrite_data(65536+poinx,buff1);
poinx++;
}
/////////////////////
void ClkInit(void)//基本时钟初始化//
{unsigned int i;
BCSCTL1&=~XT2OFF;//则启动TX2
BCSCTL3 |= XT2S_2;
do
{
IFG1&=~OFIFG;//清除振荡器故障标志
for (i = 0xFF; i > 0; i--);//延时h
}
while((IFG1&OFIFG)!=0);//判断故障标志是否存在
BCSCTL2 += SELM_2; //MCLK选择TX2(8MHZ)
BCSCTL2 += SELS; //SMCLK选择TX2(8MHZ)
}
unsigned int const qiya[9]={9698,9699,9698,9699,9700,9701,9700,9699,9700};
uchar qiyabc[18];
unsigned int qi[9]={0x0000};
uchar qiu,qiu1;
unsigned int qy;
////////////
int main( void )
{unsigned long i,j;
//unsigned long i;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ClkInit();
LCD_init();
LCD_clear();
UCB1Init();
fCS_EN;
flashSend_Byte(0x50);
delay_us(1);
fCS_DEN;
fCS_EN;
flashSend_Byte(0x01);
flashSend_Byte(0x00);
delay_us(1);
fCS_DEN;
//Chip_Erase();
//delay_ms(50);
/* for(i=0;i<256;i++)
{flashwrite_data(i,i);
delay_ms(50);
buff2[i]=flashRead_data(i);
delay_ms(50);
}*/
/* Sector_Erase(4096*3);
delay_ms(50);
Sector_Erase(4096*4);
delay_ms(50);
Sector_Erase(4096*5);
delay_ms(50);
Sector_Erase(4096*6);
delay_ms(50);
Sector_Erase(4096*7);
delay_ms(50);
Block_Erase_32K(32768);
delay_ms(100);
Block_Erase_64K(65536*1);
delay_ms(100);
Block_Erase_32K(32768*4);
delay_ms(100);*/
/* Block_Erase_32K(32768*5);
Block_Erase_64K(65536*3);
Block_Erase_64K(65536*4);
Block_Erase_64K(65536*5);
Block_Erase_64K(65536*6);
Block_Erase_64K(65536*7);
Block_Erase_64K(65536*8);*/
/*Block_Erase_32K(32768*17);
Block_Erase_32K(32768*18);
Block_Erase_64K(65536*9);
Block_Erase_64K(65536*10);
Block_Erase_64K(65536*11);*/
/* Block_Erase_64K(65536*12);
Block_Erase_64K(65536*13);
Block_Erase_64K(65536*14);
Block_Erase_64K(65536*15);*/
/* Block_Erase_64K(65536*16);
Block_Erase_64K(65536*17);
Block_Erase_64K(65536*18);
Block_Erase_64K(65536*19);
Block_Erase_64K(65536*20);*/
/* Block_Erase_64K(65536*21);
Block_Erase_64K(65536*22);
Block_Erase_64K(65536*23);
Block_Erase_64K(65536*24);
Block_Erase_64K(65536*25);
Block_Erase_64K(65536*26);
Block_Erase_64K(65536*27);*/
/* Block_Erase_64K(65536*28);
Block_Erase_64K(65536*29);
Block_Erase_64K(65536*30);
Block_Erase_64K(65536*31);
Block_Erase_64K(65536*32);
Block_Erase_64K(65536*33);
for(j=0;j<32;j++)
{for(i=0;i<6;i++)
{flashwrite_data((j*6+i),xsdatas[j][i]);}
}
for(j=0;j<116;j++)
{for(i=0;i<24;i++)
{flashwrite_data((200+j*24+i),xshan[j][i]);}
}
for(j=0;j<36;j++)
{for(i=0;i<27;i++)
{flashwrite_data((3000+j*27+i),znztux[j][i]);}
}
for(i=0;i<597;i++)
{flashwrite_data(4000+i,year_code[i]);
}*/
/*Sector_Erase(4096*2);
j=0;
for(i=0;i<9;i++)
{qiyabc[j++]=(qiya[i]>>8);
qiyabc[j++]=qiya[i];
}
for(i=0;i<18;i++)//气压数据保存
{flashwrite_data(8192+i,qiyabc[i]);}
for(i=0;i<18;i++)//气压数据读取
{qiyabc[i]=flashRead_data(8192+i);}
j=0;
for(i=0;i<9;i++)
{qi[i]=qiyabc[j++];
qi[i]=(qi[i]<<8)|qiyabc[j++];
}
// qiu=flashRead_data(8192);
// qiu1=flashRead_data(8193);*/
LCD_write_addrdata(0x40,0x80,0);
LCD_write_addrdata(0x40,0x86,1);
LCD_write_addrdata(0x40,0x8c,2);
LCD_write_addrdata(0x40,0x98,31);
LCD_write_addrhan(0x40,0xb0,105);
LCD_write_addrdata1(0x40,0xbc,7,8,105);
LCD_write_addrhan1(0x42,0x80,104);
LCD_write_addrhan2(0x42,0x8c,101,109);
znanzhtu(0x41,0x98,33);
znanzhtu(0x42,0x98,34);
znanzhtu(0x43,0x98,35);
UCA1UART_init();
while(1)
{
for(i=0;i<127;i++)
datax[i]=flashRead_data(i);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -