51单片机用24c02保存一个数据可以读取再从串口发出的程序
时间: 2024-04-15 16:30:09 浏览: 14
下面是一个使用51单片机和24C02芯片保存数据并通过串口发送的示例程序:
```c
#include <reg51.h>
#include <stdio.h>
#define EEPROM_ADDR 0xA0 // 24C02芯片的I2C地址
#define UART_BAUDRATE 9600 // 串口波特率
sbit SDA = P2^0; // I2C数据线
sbit SCL = P2^1; // I2C时钟线
void delay() {
unsigned int i, j;
for (i = 0; i < 10; i++) {
for (j = 0; j < 1000; j++);
}
}
void I2C_Start() {
SDA = 1;
delay();
SCL = 1;
delay();
SDA = 0;
delay();
SCL = 0;
delay();
}
void I2C_Stop() {
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
delay();
}
void I2C_Write(unsigned char dat) {
unsigned char i;
for (i = 0; i < 8; i++) {
SDA = (dat & 0x80) >> 7;
delay();
SCL = 1;
delay();
SCL = 0;
delay();
dat <<= 1;
}
SDA = 1;
delay();
SCL = 1;
delay();
SCL = 0;
delay();
}
unsigned char I2C_Read() {
unsigned char i, dat = 0;
SDA = 1;
for (i = 0; i < 8; i++) {
dat <<= 1;
SCL = 1;
delay();
dat |= SDA;
SCL = 0;
delay();
}
return dat;
}
void UART_Init() {
TMOD = 0x20;
TH1 = 256 - (11059200 / 12 / 32 / UART_BAUDRATE);
TL1 = TH1;
PCON = 0x00;
TCON = 0x40;
SCON = 0x50;
}
void UART_SendChar(unsigned char dat) {
SBUF = dat;
while (!TI);
TI = 0;
}
unsigned char UART_ReceiveChar() {
while (!RI);
RI = 0;
return SBUF;
}
void EEPROM_Write(unsigned char addr, unsigned char dat) {
I2C_Start();
I2C_Write(EEPROM_ADDR);
I2C_Write(addr);
I2C_Write(dat);
I2C_Stop();
}
unsigned char EEPROM_Read(unsigned char addr) {
unsigned char dat;
I2C_Start();
I2C_Write(EEPROM_ADDR);
I2C_Write(addr);
I2C_Start();
I2C_Write(EEPROM_ADDR | 0x01);
dat = I2C_Read();
I2C_Stop();
return dat;
}
void main() {
unsigned char dataToSave = 0x55; // 要保存的数据
unsigned char readData;
UART_Init();
EEPROM_Write(0x00, dataToSave); // 将数据保存到24C02的地址0x00处
readData = EEPROM_Read(0x00); // 从24C02的地址0x00处读取数据
UART_SendChar(readData); // 发送读取到的数据到串口
while (1);
}
```
这个程序中,首先定义了24C02芯片的I2C地址和串口的波特率。然后使用了一些函数来实现I2C通信和串口通信。`I2C_Start()`和`I2C_Stop()`函数用于开始和停止I2C通信。`I2C_Write()`和`I2C_Read()`函数用于向24C02芯片写入数据和读取数据。
在`main()`函数中,首先初始化串口,然后将要保存的数据写入到24C02芯片的地址0x00处,再从该地址读取数据,并通过串口发送出去。
请根据实际情况修改程序,包括I2C通信的引脚定义和波特率等。