?? main.c
字號(hào):
/********************************************************************
* Author :cuit xiao deng www.cuit.edu.cn QQ:75968687
* Date : 2009-4-12
* File : aduc845.c
* Hardware : ADuC845
* Description : 主函數(shù)程序
*********************************************************************/
#include<ADuC845.H>
/********************************************************************
*作者:許海波
*功能:全局變量聲明
**********************************************************************/
char ADC_buffer[3][3]=0; //定義全局變量接收三個(gè)通道的AD轉(zhuǎn)換結(jié)果
unsigned int AD_flag=0; //定義轉(zhuǎn)換標(biāo)志位
unsigned int TIMER_60s=0; //定義時(shí)間變量
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; /*一般置高*/
/*********************************************************************
*作者:許海波
*功能:定義主函數(shù)中包含個(gè)人定義的頭文件
**********************************************************************/
#include"adc.h"
#include"uart.h"
/**********************************************************************
*作者:許海波
*功能:聲明主函數(shù)中的一些函數(shù)
***********************************************************************/
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();
/************************************************************************
*函數(shù):void delay(unsigned int i)
*作者:許海波
*功能:延時(shí)函數(shù),延時(shí)大小有i的值決定
*************************************************************************/
void delay(unsigned int i)
{
while(i--);
}
/************************************************************************
*函數(shù):void SPI_TX(unsigned char dat)
*作者:許海波
*功能:向SPI總線發(fā)送數(shù)據(jù)
*************************************************************************/
void SPI_TX(unsigned char dat)
{
ISPI=0; //對(duì)ISPI位清零
SPIDAT=dat;
while(!ISPI); //等待數(shù)據(jù)發(fā)送完成
}
/*************************************************************************
*函數(shù):unsigned char SPI_RX(void)
*作者:許海波
*功能:向SPI總線發(fā)送數(shù)據(jù)
**************************************************************************/
unsigned char SPI_RX(void)
{
unsigned char dat=0;
//ISPI=0;
dat|=SPIDAT;
//while(!ISPI);
return(dat);
}
/*************************************************************************
*函數(shù):void SPI_FM25H20_WRSR(void)
*作者:許海波
*功能:配置FM25H20中的狀態(tài)寄存器
**************************************************************************/
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); /******對(duì)FM25H20內(nèi)部狀態(tài)寄存器進(jìn)行配置,WPEN=1 ;BP0BP1=00;*******/
delay(10);
SS = 1;
}
/*************************************************************************
*函數(shù):unsigned char SPI_FM25H20_READ(unsigned long int address)
*作者:許海波
*功能:從FM25H20讀取數(shù)據(jù)
**************************************************************************/
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); /**發(fā)送地址數(shù)據(jù)高8位**/
SPI_TX(ADDR_M); /**發(fā)送地址數(shù)據(jù)中間8位**/
SPI_TX(ADDR_L); /**發(fā)送地址數(shù)據(jù)低8位**/
dat=SPI_RX();
return(dat);
SS = 1;
}
/*****************************************************************************
*函數(shù):void SPI_FM25H20_WRITE(unsigned long int address,unsigned char dat)
*作者:許海波
*功能:向FM25H20寫數(shù)據(jù)
******************************************************************************/
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); /**發(fā)送地址數(shù)據(jù)高8位**/
SPI_TX(ADDR_M); /**發(fā)送地址數(shù)據(jù)中間8位**/
SPI_TX(ADDR_L); /**發(fā)送地址數(shù)據(jù)低8位**/
SPI_TX( dat); /****發(fā)送數(shù)據(jù)****/
//delay(10);
SS = 1;
//delay(10);
}
/****************************************************************************
*函數(shù):void TIMER0_int () interrupt 1
*作者:許海波
*功能:定時(shí)1S向FM250存數(shù)據(jù)
*****************************************************************************/
void TIMER0_int () interrupt 1
{
int i,j;
EA=0;
TIMER_60s++;
if(TIMER_60s==200) //如果時(shí)間到了1S向FM250存數(shù)據(jù)
{
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
{ if (FM25H20_ADDRESS==0xFFFFFFFF) //如果數(shù)據(jù)存滿了返回開頭從新存 覆蓋舊的數(shù)據(jù)
FM25H20_ADDRESS=0x00000000;
else SPI_FM25H20_WRITE(FM25H20_ADDRESS++,ADC_buffer[i][j]);
}
TIMER_60s=0;
}
EA=1;
}
/****************************************************************************
*函數(shù):void TIMER0_Init()
*作者:許海波
*功能:定時(shí)1S向FM250存數(shù)據(jù)
*****************************************************************************/
void TIMER0_Init()
{
TMOD=0X01; // 定時(shí)器0,工作模式1
TH0=0X00; // 給初值
TL0=0X00;
ET0=1; // 開啟定時(shí)器0的中斷
}
*函數(shù):ARM_SEND()
*作者:許海波
*功能:向主系統(tǒng)發(fā)送數(shù)據(jù)
*****************************************************************************/
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;
}
/******************************************************************************
*函數(shù):void main()
*作者:許海波
*功能:主函數(shù)
*******************************************************************************/
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;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -