Chào các bạn.
Hôm nay mình sẽ hướng dẫn các bạn sử dụng eeprom nội bên trong chip PIC 16F877A.
1. EEPROM
- EEPROM được sử dụng với những mục đíc đặc biệt, để lưu trữ dữ liệu có nhớ (không bị mất khi mất điện), hoặc lưu trữ cấu hình cứng (ví dụ lưu trữ cấu hình FPGA). Trong chip PIC16F877A có khả năng lưu trữ 256bytes EEPROM. Trong CCS có hỗ trợ hai hàm đọc và viết dữ liệu EEPROM.
- Hàm viết dữ liệu data vào địa chỉ addr:
write_eeprom(addr,data);
- hàm đọc dữ liệu ở địa chỉ addr:
read_eeprom(addr);
2. Ví dụ:
- Trong ví dụ sau ta sẽ viết chuỗi kí tự “LAM 3 NGON” vào eeprom sau đó đọc lại chuỗi kí tự đó và hiển thị lên LCD 16x2.
- Hàm viết một chuỗi kí tự vào địa chỉ addr.
Hôm nay mình sẽ hướng dẫn các bạn sử dụng eeprom nội bên trong chip PIC 16F877A.
1. EEPROM
- EEPROM được sử dụng với những mục đíc đặc biệt, để lưu trữ dữ liệu có nhớ (không bị mất khi mất điện), hoặc lưu trữ cấu hình cứng (ví dụ lưu trữ cấu hình FPGA). Trong chip PIC16F877A có khả năng lưu trữ 256bytes EEPROM. Trong CCS có hỗ trợ hai hàm đọc và viết dữ liệu EEPROM.
- Hàm viết dữ liệu data vào địa chỉ addr:
write_eeprom(addr,data);
- hàm đọc dữ liệu ở địa chỉ addr:
read_eeprom(addr);
2. Ví dụ:
- Trong ví dụ sau ta sẽ viết chuỗi kí tự “LAM 3 NGON” vào eeprom sau đó đọc lại chuỗi kí tự đó và hiển thị lên LCD 16x2.
- Hàm viết một chuỗi kí tự vào địa chỉ addr.
void eeprom_write_string(unsigned int8 addr,unsigned char*str)
{
while(*str)
{
write_eeprom(addr,*str);
addr++;
str++;
}
}
- Hàm đọc len kí tự từ eeprom bắt đầu từ địa chỉ addr.{
while(*str)
{
write_eeprom(addr,*str);
addr++;
str++;
}
}
void eeprom_read_string(unsigned int8 addr, unsigned char* str,unsigned int8 len)
{
unsigned int8 i;
for(i=0;i<len;i++)
{
str[i]=read_eeprom(addr+i);
}
str[len]=0;
}
- Đây là ảnh mô phỏng protues.{
unsigned int8 i;
for(i=0;i<len;i++)
{
str[i]=read_eeprom(addr+i);
}
str[len]=0;
}
- Đây là code chương trình.
#include <main.h>
#include <var.h>
#include "lcd.c"
void eeprom_write_string(unsigned int8 addr,unsigned char*str)
{
while(*str)
{
write_eeprom(addr,*str);
addr++;
str++;
}
}
void eeprom_read_string(unsigned int8 addr, unsigned char* str,unsigned int8 len)
{
unsigned int8 i;
for(i=0;i<len;i++)
{
str[i]=read_eeprom(addr+i);
}
str[len]=0;
}
void main()
{
unsigned char str[20];
unsigned char str2[20];
LCD_Init();
sprintf(str," DEMO EEPROM");
delay_ms(10);
LCD_Puts(str);
delay_ms(1000);
LCD_Clear();
sprintf(str," xcvn.blogspot");
LCD_Gotoxy(0,0);
LCD_Puts(str);
sprintf(str," LAM 3 NGON");
eeprom_write_string(0x04,str);
while(TRUE)
{
eeprom_read_string(0x04,str2,11);
LCD_Gotoxy(2,1);
LCD_Puts(str2);
}
}
- Link download project Click here#include <var.h>
#include "lcd.c"
void eeprom_write_string(unsigned int8 addr,unsigned char*str)
{
while(*str)
{
write_eeprom(addr,*str);
addr++;
str++;
}
}
void eeprom_read_string(unsigned int8 addr, unsigned char* str,unsigned int8 len)
{
unsigned int8 i;
for(i=0;i<len;i++)
{
str[i]=read_eeprom(addr+i);
}
str[len]=0;
}
void main()
{
unsigned char str[20];
unsigned char str2[20];
LCD_Init();
sprintf(str," DEMO EEPROM");
delay_ms(10);
LCD_Puts(str);
delay_ms(1000);
LCD_Clear();
sprintf(str," xcvn.blogspot");
LCD_Gotoxy(0,0);
LCD_Puts(str);
sprintf(str," LAM 3 NGON");
eeprom_write_string(0x04,str);
while(TRUE)
{
eeprom_read_string(0x04,str2,11);
LCD_Gotoxy(2,1);
LCD_Puts(str2);
}
}
EmoticonEmoticon