📄 testeeprom.c
字号:
#include <mega16.h>
#include <USART.h>
#include <TWI.h>
#include <TWIAPP.h>
#include <String.h>
#include <Types.h>
#include <delay.h>
/************************
接线方式:
DS1302 PortC
6.VCC 5.WP1 1.PC0 2.PC1
4.SCL 3.WP2 3.PC2 4.PC3
2.SDA 1.GND 5.PC4 6.PC5
7.PC6 8.PC7
9.GND 10.VCC
6.VCC -- 10.VCC
4.SCL -- 1.PC0
2.SDA -- 2.PC1
5.WP1 -- 3.PC2 (可不接)
3.WP2 -- 4.PC3 (可不接)
1.GND -- 9.GND
************************************/
#define MAXCMDBUF 32
#pragma warn-
//eeprom unsigned char EEPROMS[512];
#pragma warn+
void port_init(void) //初始化各端口
{
PORTB = 0xF0;
DDRB = 0x0F;
PORTC = 0x00;
DDRC = 0x00;
PORTB =0b11001100;
}
void TestCmd(void)
{
unsigned int i;
unsigned char CmdBuf[CMD_MAXBUFFER]; //命令缓冲区
unsigned char Chip; //芯片地址
unsigned int Addr; //内存地址
unsigned char AddrType;//内存地址格式 8 bit 或16 bit
unsigned int Cnt; //读取长度
unsigned char LED; //LED显示,作用不大
USART_Init(47); //3.6864M=23, 7.3728M=47
TransmitStringF("Welcome AVR Zone");
for (i=0;i<CMD_MAXBUFFER;i++) CmdBuf[i]=0; //初始化命令缓冲区
LED=0;
while (1)
{
ReceiveCMD(CmdBuf); //读取一条命令行
if (CmdBuf[0]>0) //如果命令行长度不为零
{
//for (i=0;i<MAXCMDBUF;i++) TransmitByte(CmdBuf[i]);
TransmitByte(CMDBEGIN); //送出命令开始符
TransmitByte(CmdBuf[1]); //送出命令
if (CmdBuf[1]=='H') //如果接收的是帮助命令
{
TransmitStringF("Command format(Hex):'1B CMD 1C'");
TransmitByte(13);
TransmitStringF("Read EEPROM Data:'R','Addr','Count'");
TransmitByte(13);
TransmitStringF("Write EEPROM Data:'W','Addr','Data'");
TransmitByte(13);
TransmitStringF("Show Help:'H'");
TransmitByte(13);
PORTB=~PORTB;
}
if (CmdBuf[1]=='R') //如果接收的是读取EEPROM命令
{
AddrType=HexToByte(&CmdBuf[2]); //EEPROM地址类型
Chip=(HexToByte(&CmdBuf[4])&0B00001110)|EEPROM_BUS_ADDRESS; //芯片地址
Addr=(((unsigned int)HexToByte(&CmdBuf[6]))<<8)|((unsigned int)HexToByte(&CmdBuf[8])); //内存地址
Cnt=(((unsigned int)HexToByte(&CmdBuf[10]))<<8)|((unsigned int)HexToByte(&CmdBuf[12])); //读写个数
if (Addr+Cnt>255) Cnt=255-Addr;
for (i=0;i<Cnt;i++)
{
TransmitString(ByteToHex(EEPROM_Read(Chip,AddrType,Addr+i))); //送回上位机
TransmitByte(32);
}
}
if (CmdBuf[1]=='W') //如果接收的是写入EEPROM命令
{
AddrType=HexToByte(&CmdBuf[2]);
Chip=(HexToByte(&CmdBuf[4])&0B00001110)|EEPROM_BUS_ADDRESS;
Addr=(((unsigned int)HexToByte(&CmdBuf[6]))<<8)|((unsigned int)HexToByte(&CmdBuf[8]));
EEPROM_Write(Chip,AddrType,Addr,HexToByte(&CmdBuf[10]));
delay_ms(5); //写EEPROM的时候要隔5ms
TransmitString(ByteToHex(EEPROM_Read(Chip,AddrType,Addr))); //回送给上位机做检查
}
TransmitByte(CMDEND); //送出命令结束符
for (i=0;i<CMD_MAXBUFFER;i++) CmdBuf[i]=0; //清空命令缓冲区
}
LED++;
//PORTB&=~((LED>>7)&0x03);
}
}
void main()
{
port_init();
TWI_DefaultInit();
TestCmd();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -