📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include <SM89516A.H>
#include "INC\CONFIG.H"
#include "string.h"
#include "INC\V24INT.H" /* 串口操作相关函数 */
#include "INC\SDDRIVER.H" /* SD卡操作的相关函数 */
#include "inc\sdhal.h"
#define CMD_SD_INIT 0x00 /* SD卡初始化卡命令 */
#define CMD_SD_READ 0x01 /* SD卡读命令 */
#define CMD_SD_WRITE 0x02 /* SD卡写命令 */
#define CMD_SD_ERASE 0x03 /* SD卡擦除命令 */
#define CMD_DATA_TRANS 0x04 /* 将sd_buf中的数据发送到PC机 */
#define CMD_DATA_RECV 0x05 /* 接收来自串口的数据,并放入sd_buf中 */
/* SD卡读写缓冲区,比SD卡一个块大8字节 */
INT8U sd_buf[520];
int main (void)
{
INT32U bufaddr;
INT32U blockaddr;
INT32U blocknum;
SCONF |= 0x03;
DBANK = 0;
DISABLE;
//Timer_0_Init();
V24_Init();
ENABLE;
ES = 1;
EA = 1;
TR1 = 1;
IT0 = 1; /*INT0 下降沿触发,计费器数据中断*/
IT1 = 1;
EX1 = 0; //关外部中断1
EX0 = 0; //关外部中断0
SPI_SendByte(0xAA);
SPI_SendByte(0xAA);
while(1) /* 等待串口中断 */
{
if (V24_Inp_Ptr==8) /* 如果串口收到数据 */
{
switch(V24_Rx_Buf[0])
{
case CMD_SD_INIT: V24_Rx_Buf[1] = SD_Initialize(); /* 初始化SD卡 */
break;
case CMD_SD_READ:
blockaddr = (V24_Rx_Buf[1] << 24) + (V24_Rx_Buf[2] << 16) + /* 计算块地址 */
(V24_Rx_Buf[3] << 8) + V24_Rx_Buf[4];
V24_Rx_Buf[1] = SD_ReadBlock(blockaddr, sd_buf); /* SD卡单块读 */
break;
case CMD_SD_WRITE:
blockaddr = (V24_Rx_Buf[1] << 24) + (V24_Rx_Buf[2] << 16) +
(V24_Rx_Buf[3] << 8) + V24_Rx_Buf[4];
V24_Rx_Buf[1] = SD_WriteBlock(blockaddr, sd_buf); /* SD 卡单块写 */
break;
case CMD_SD_ERASE:
blockaddr = (V24_Rx_Buf[1] << 24) + (V24_Rx_Buf[2] << 16) +
(V24_Rx_Buf[3] << 8) + V24_Rx_Buf[4];
blocknum = (V24_Rx_Buf[5] << 16) + (V24_Rx_Buf[6] << 8) +
(V24_Rx_Buf[7]);
V24_Rx_Buf[1] = SD_EraseBlock(blockaddr, blocknum); /* SD 卡擦除 */
break;
case CMD_DATA_RECV:
bufaddr = (V24_Rx_Buf[1] << 8) + V24_Rx_Buf[2]; /* 计算缓冲区地址 */
memcpy(sd_buf + bufaddr, &V24_Rx_Buf[3], 5); /* 收到数据放入sd_buf */
break;
case CMD_DATA_TRANS:
bufaddr = (V24_Rx_Buf[1] << 8) + V24_Rx_Buf[2]; /* 计算缓冲区地址 */
memcpy(&V24_Rx_Buf[1], sd_buf + bufaddr, 7); /* sd_buf数据放入rcv_buf */
break;
default: break;
}
SendRxBuf(); /* 发送 rcv_buf */
V24_Inp_Ptr = 0; /* 接收标志清0 */
}
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -