N76E003之IAP编程代码
时间: 2023-12-25 08:17:01 浏览: 96
以下是一个简单的N76E003 IAP编程代码示例,实现了通过串口接收数据并将其写入EEPROM的功能。需要根据实际应用情况进行修改和优化。
```c
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "IAP.h"
#define UART_RX_BUF_SIZE 16
unsigned char uart_rx_buf[UART_RX_BUF_SIZE];
unsigned char uart_rx_buf_idx;
void uart_init()
{
PCON |= 0x80;
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
}
void uart_send_byte(unsigned char data)
{
SBUF = data;
while(!TI);
TI = 0;
}
void uart_send_str(unsigned char *str)
{
while(*str)
{
uart_send_byte(*str++);
}
}
void uart_isr() interrupt 4
{
unsigned char data;
if(RI)
{
data = SBUF;
RI = 0;
if(uart_rx_buf_idx < UART_RX_BUF_SIZE)
{
uart_rx_buf[uart_rx_buf_idx++] = data;
}
}
}
void main()
{
unsigned int addr, len;
uart_init();
while(1)
{
if(uart_rx_buf_idx >= 2 && uart_rx_buf[0] == 0x55 && uart_rx_buf[1] == 0xAA)
{
addr = uart_rx_buf[2] | (uart_rx_buf[3] << 8);
len = uart_rx_buf[4] | (uart_rx_buf[5] << 8);
if(addr < 0x1000 && len > 0 && len <= UART_RX_BUF_SIZE - 6)
{
IAP_Enable();
IAP_Erase(addr, len);
IAP_Write(addr, uart_rx_buf + 6, len);
IAP_Disable();
uart_send_str("Write OK!\r\n");
}
else
{
uart_send_str("Invalid parameters!\r\n");
}
uart_rx_buf_idx = 0;
}
}
}
```
该代码实现了通过串口接收0x55AA开头的数据包,并将其中的地址和数据长度信息提取出来,然后调用IAP函数库实现数据写入EEPROM中。其中,IAP_Enable和IAP_Disable函数用于打开和关闭IAP功能,IAP_Erase和IAP_Write函数用于擦除和写入数据。在实际应用中,需要根据具体情况进行修改和优化。
阅读全文