Trích:
Nguyên văn bởi Mr.Bi
Tại e k chịu tìm hỉu , cứ đụng tới cái j là lên diễn đàn hỏi , có ng trả lời liền nên k chịu động não search google. Dễ òm chứ có j đâu . Chỉ có 2 hàm : write_eeprom(address,value) và read_eeprom(address) . Cu thể như sau :
Code:
int8 a;
main()
{ write_eeprom(0x01, 0xCA); // ghi 0xCA vào vị trí địa chỉ 0x01 trong eeprom
a= read_eeprom(0x01) ; // đọc eeprom tại địa chỉ 0x01 , gán vào biến a
while(1);
}
h biến a của e đã có giá trị 0xCA, đọc ghi eeprom lun đó , ok chứ ?
|
em viết một đoạn code như sau:
lần đầu tiên em ghi dữ liệu 200 vào địa chỉ 0x01 của EEPROM , sau đó hiên thị lên terminal kết quả ra là 200, đúng như giá trị mình ghi
#include <16F877a.h>
#include <def_877a.h>
#device *=16// ADC=10
#use delay(clock = 20000000)
#fuses HS,NOWDT,PUT,NOPROTECT,NOLVP
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)) //Khai bao su dung rs232, baudbit = 9600, truyen la cong RC6, nhan la cong RC7
int8 i;
void main(){
while(true)
{
write_eeprom(0x01,200);
delay_ms(100);
i=read_eeprom(0x01);
delay_ms(200);
printf("bo nho : %u \r",i);
delay_ms(1000);
}
}
Sau đó em comment đoạn code // write_eeprom(0x01,200); rồi hiển thị dữ liệu ở địa chỉ 0x01 của EEPROM để kiểm tra kết quả đã được
lưu vào địa chỉ 0x01 của EEPROM chưa thì kết quả hiện ra là 255 , không phải là giá trị 200 đã ghi như trước đó .cho em hỏi chương trình em như
vậy có chỗ nào thiếu xót không, nhờ anh giúp đỡ với
#include <16F877a.h>
#include <def_877a.h>
#device *=16// ADC=10
#use delay(clock = 20000000)
#fuses HS,NOWDT,PUT,NOPROTECT,NOLVP
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)) //Khai bao su dung rs232, baudbit = 9600, truyen la cong RC6, nhan la cong RC7
int8 i;
void main()
{
while(true)
{
// write_eeprom(0x01,200);
delay_ms(100);
i=read_eeprom(0x01);
delay_ms(200);
printf("gia tri : %u \r",i);
delay_ms(1000);
}
}