IAP15W4K61S4用串口助手配置固定参数到EEPROM的代码实现
时间: 2024-03-05 21:53:49 浏览: 89
以下是IAP15W4K61S4用串口助手配置固定参数到EEPROM的代码实现示例:
```c
#include <reg51.h>
#include <stdio.h>
#define FOSC 24000000L // 定义晶振频率为24MHz
#define BAUD 9600 // 定义波特率为9600bps
#define TH1 (256 - FOSC / 32 / BAUD) // 定义定时器1初值
#define BUFFER_SIZE 10 // 定义接收缓冲区大小为10
sfr P_SW2 = 0xba; // 定义P_SW2特殊功能寄存器
sbit P3_0 = P3^0; // 定义P3.0口
void InitUart() // 初始化串口
{
SCON = 0x50; // 8位数据位,可变波特率
TMOD &= 0x0f; // 设置定时器1为模式1
TMOD |= 0x20;
PCON |= 0x80; // SMOD = 1,波特率加倍
TH1 = TH1; // 设置波特率为9600bps
TL1 = TH1;
TR1 = 1; // 启动定时器1
ES = 1; // 允许串行中断
EA = 1; // 允许总中断
}
void SendByte(unsigned char dat) // 串口发送一个字节
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void SendString(unsigned char *s) // 串口发送一串字符
{
while(*s)
{
SendByte(*s++);
}
}
unsigned char ReceiveByte() // 串口接收一个字节
{
while(RI == 0);
RI = 0;
return SBUF;
}
void ReceiveString(unsigned char *buf, unsigned char len) // 串口接收一串字符
{
unsigned char i = 0;
while(i < len)
{
buf[i] = ReceiveByte();
if(buf[i] == '\r')
{
buf[i] = '\0';
break;
}
i++;
}
}
void WriteEeprom(unsigned char addr, unsigned char dat) // 写入EEPROM
{
unsigned char i;
EA = 0; // 关闭总中断
IAP_ADDRH = 0x00; // 设置地址为0x00
IAP_ADDRL = addr; // 设置地址为addr
IAP_DATA = dat; // 设置数据为dat
IAP_CMD = 0x02; // 设置命令为0x02,表示写入
IAP_TRIG = 0x5a; // 启动IAP
IAP_TRIG = 0xa5;
for(i = 0; i < 5; i++); // 等待IAP完成
EA = 1; // 开启总中断
}
void main()
{
unsigned char buffer[BUFFER_SIZE];
unsigned char addr, dat;
InitUart(); // 初始化串口
SendString("Please input the address and data:\r\n");
ReceiveString(buffer, BUFFER_SIZE); // 接收用户输入的地址和数据
sscanf(buffer, "%hhu,%hhu", &addr, &dat); // 解析用户输入的地址和数据
WriteEeprom(addr, dat); // 写入EEPROM
SendString("Write EEPROM success!\r\n");
while(1);
}
```
上述代码中,使用了IAP来进行EEPROM的写入操作,其中写入命令的值为0x02,表示写入。并且在写入操作时,需要关闭总中断EA,以保证IAP的正常执行。同时,在写入完成后,需要等待一段时间,以确保IAP操作完成。
阅读全文