📄 main.c
字号:
/********************************************************************
* Author :cuit xiao deng www.cuit.edu.cn QQ:75968687
* Date : 2009-4-12
* File : aduc845.c
* Hardware : ADuC845
* Description : 主函数程序
*********************************************************************/
#include<ADuC845.H>
/********************************************************************
*作者:许海波
*功能:全局变量声明
**********************************************************************/
char ADC_buffer[3][3]=0; //定义全局变量接收三个通道的AD转换结果
unsigned int AD_flag=0; //定义转换标志位
unsigned int TIMER_60s=0; //定义时间变量
unsigned long int FM25H20_ADDRESS=0x00000000; //首地址
unsigned long int FM25H20_START=0x00000000
#define FM25H20_WREN 0x06 //Set Write Enable Latch
#define FM25H20_WRDI 0x04 //Write Dsiable
#define FM25H20_RDSR 0x05 //Read Status Register
#define FM25H20_WRSR 0x01 //Write Status Register
#define FM25H20_READ 0x03 //Read Memory Data
#define FM25H20_WRITE 0x02 //Write Memory Data
#define FM25H20_SLEEP 0xb9 //Enter Sleep Mode
#define FM25H20_CAPACITY 0x0003ffff //容量
sbit CLK =P2^0;
sbit MOSI =P2^1;
sbit MISO =P2^2;
sbit SS =P2^3;
sbit HOLD =P2^5; /*一般置低*/
sbit W =P2^6; /*一般置高*/
/*********************************************************************
*作者:许海波
*功能:定义主函数中包含个人定义的头文件
**********************************************************************/
#include"adc.h"
#include"uart.h"
/**********************************************************************
*作者:许海波
*功能:声明主函数中的一些函数
***********************************************************************/
void delay(unsigned int i);
void SPI_TX(unsigned char dat);
unsigned char SPI_RX(void);
void SPI_FM25H20_WRSR(void);
unsigned char SPI_FM25H20_READ(unsigned long int address);
void SPI_FM25H20_WRITE(unsigned long int address,unsigned char dat);
void TIMER0_Init();
void ARM_SEND();
/************************************************************************
*函数:void delay(unsigned int i)
*作者:许海波
*功能:延时函数,延时大小有i的值决定
*************************************************************************/
void delay(unsigned int i)
{
while(i--);
}
/************************************************************************
*函数:void SPI_TX(unsigned char dat)
*作者:许海波
*功能:向SPI总线发送数据
*************************************************************************/
void SPI_TX(unsigned char dat)
{
ISPI=0; //对ISPI位清零
SPIDAT=dat;
while(!ISPI); //等待数据发送完成
}
/*************************************************************************
*函数:unsigned char SPI_RX(void)
*作者:许海波
*功能:向SPI总线发送数据
**************************************************************************/
unsigned char SPI_RX(void)
{
unsigned char dat=0;
//ISPI=0;
dat|=SPIDAT;
//while(!ISPI);
return(dat);
}
/*************************************************************************
*函数:void SPI_FM25H20_WRSR(void)
*作者:许海波
*功能:配置FM25H20中的状态寄存器
**************************************************************************/
void SPI_FM25H20_WRSR(void)
{
SS = 0;
SPI_TX(FM25H20_WREN);
delay(10);
SS = 1;
delay(10);
SS = 0;
SPI_TX(FM25H20_WRSR);
SPI_TX(0x40); /******对FM25H20内部状态寄存器进行配置,WPEN=1 ;BP0BP1=00;*******/
delay(10);
SS = 1;
}
/*************************************************************************
*函数:unsigned char SPI_FM25H20_READ(unsigned long int address)
*作者:许海波
*功能:从FM25H20读取数据
**************************************************************************/
unsigned char SPI_FM25H20_READ(unsigned long int address)
{
unsigned char ADDR_H,ADDR_M,ADDR_L;
unsigned char dat=0;
unsigned long int ADD;
ADD = address;
ADDR_H=(unsigned char)((ADD >> 16) & 0x000000FF);
ADD = address;
ADDR_M=(unsigned char)((ADD >> 8) & 0x000000FF);
ADD = address;
ADDR_L=(unsigned char)(ADD & 0x000000FF);
SS = 0;
SPI_TX(FM25H20_WRDI);
SS = 1;
delay(10);
SS = 0;
SPI_TX(FM25H20_READ);
SPI_TX(ADDR_H); /**发送地址数据高8位**/
SPI_TX(ADDR_M); /**发送地址数据中间8位**/
SPI_TX(ADDR_L); /**发送地址数据低8位**/
dat=SPI_RX();
return(dat);
SS = 1;
}
/*****************************************************************************
*函数:void SPI_FM25H20_WRITE(unsigned long int address,unsigned char dat)
*作者:许海波
*功能:向FM25H20写数据
******************************************************************************/
void SPI_FM25H20_WRITE(unsigned long int address,unsigned char dat)
{
unsigned char ADDR_H,ADDR_M,ADDR_L;
unsigned long int ADD;
ADD = address;
ADDR_H=(unsigned char)((ADD >> 16) & 0x000000FF);
ADD = address;
ADDR_M=(unsigned char)((ADD >> 8) & 0x000000FF);
ADD = address;
ADDR_L=(unsigned char)(ADD & 0x000000FF);
SS = 0;
SPI_TX(FM25H20_WREN);
delay(10);
SS = 1;
delay(10);
SS = 0;
SPI_TX(FM25H20_WRITE);
SPI_TX(ADDR_H); /**发送地址数据高8位**/
SPI_TX(ADDR_M); /**发送地址数据中间8位**/
SPI_TX(ADDR_L); /**发送地址数据低8位**/
SPI_TX( dat); /****发送数据****/
//delay(10);
SS = 1;
//delay(10);
}
/****************************************************************************
*函数:void TIMER0_int () interrupt 1
*作者:许海波
*功能:定时1S向FM250存数据
*****************************************************************************/
void TIMER0_int () interrupt 1
{
int i,j;
EA=0;
TIMER_60s++;
if(TIMER_60s==200) //如果时间到了1S向FM250存数据
{
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
{ if (FM25H20_ADDRESS==0xFFFFFFFF) //如果数据存满了返回开头从新存 覆盖旧的数据
FM25H20_ADDRESS=0x00000000;
else SPI_FM25H20_WRITE(FM25H20_ADDRESS++,ADC_buffer[i][j]);
}
TIMER_60s=0;
}
EA=1;
}
/****************************************************************************
*函数:void TIMER0_Init()
*作者:许海波
*功能:定时1S向FM250存数据
*****************************************************************************/
void TIMER0_Init()
{
TMOD=0X01; // 定时器0,工作模式1
TH0=0X00; // 给初值
TL0=0X00;
ET0=1; // 开启定时器0的中断
}
/****************************************************************************
*函数:ARM_SEND()
*作者:许海波
*功能:向主系统发送数据
*****************************************************************************/
void ARM_SEND()
{
unsigned long int i;
EA=0;
for( i=FM25H20_START;i<=FM25H20_CAPACITY;i++)
{
UART_SEND_DATA((char) SPI_FM25H20_READ(i));
}
EA=1;
}
/******************************************************************************
*函数:void main()
*作者:许海波
*功能:主函数
*******************************************************************************/
void main(void)
{
unsigned int Tongxun=0;
ADC_Init();
UART_INIT();
TIMER0_Init();
SPICON = 0x30;
UART_INIT();
HOLD = 0; /*一般置低*/
W = 1; /*一般置高*/
SPI_FM25H20_WRSR();
while(1)
{
Tongxun=UART_RECEIVE_DATA( );
if(Tongxun==123)
{
ARM_SEND();
SBUF=0X00;
Tongxun=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -