đọc và ghi eprom
chào các a trong diễn đàn, em đọc hoài mà ko a nào hướng dẫn về cách đọc và cách ghi dữ liệu vào trong eprom hết
Mong a nào bít thì hướng dẫn chi tiết hơn về eprom để e hiểu rõ hơn( có cả tourtial thì tốt wa') |
Giải mã điều khiển từ xa
Em đang lam với pic6f877a.Dung nó để giải ma 1 cái điều khiển từ xa của sony.Em dùng 1 con led thu hồng ngoại 3 chân mà chưa biết viết trương trình thế nào.led thu em nối với BIT Bo.Gỉ sử bấm phím 1 thì portc=00000001;bấm phím 2 thì portc=00000010.....Cứ như vậy đến 9.Em mới học pic nên còn "GÀ".Anh chi trong diễn đan giúp em với.Néu co thể viết luôn cho em trương trình hoàn chỉnh.Chân thành cám ơn các anh chị nhiều!
|
Trích:
http://www.picvietnam.com/forum/showthread.php?t=3108 |
kink của a đưa chung chung wa mình cũng chưa hiểu rõ lắm, ko bít có 1 bài viết nào cụ thể hơn về cái đọc và ghi lên eeprom
nhưng cũng thank vì a đã góp ý |
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; |
Trích:
thì ví dụ như vầy nè: thằng 77a có bộ nhớ là 8k nên nó sẽ có tổng cộng 256 ô nhớ (0 - 255)và mỗi ô nhớ dài 8bit.Với 8bit thì bạn sẽ có thể lưu được con số từ 0 - 255.Tới đây hiểu chưa nè? để thao tác với các ô nhớ đó bạn chỉ việc sử dụng 02 hàm là: write_eeprom(địa chỉ,giá trị);//nạp một giá trị vào eeprom tại địa chỉ a=read_eeprom(địa chỉ);//đọc giá trị trong eeprom tại ô nhớ địa chỉ rồi gán cho biến a. Với địa chỉ và giá trị bạn có thể sử dụng cơ số 10 cho nó dể! cố gắng lên bạn!!! |
chào các bác co ai biết cách eprom CP50 thi cho em xin một hai cách sử dụng xin đề nghị co ai biết cho biết với xin các bác vào chat yahoo LVTH_LVTH là thấy em cám ơn nhiều
|
em mới mua EPROM CP50 về chưa biết sử dụng như thế nào co huyênh đệ nào biết cách chỉ cho với
|
có 1 vấn đề mình đang thắc mắc về eprom của 877....
có 1 ứng dụng mà mình phải ghi và xóa liên tục vào bít nhớ đó (TB cứ 1s ghi-đọc 1 lần) nếu chướng trình của mình mà chạy lâu dài thì ô nhớ đó có bị sao ko?? mình sợ mỗi bit nhớ có thể ghi hc xóa trong khoảng bao nhiêu lần đó thôi vậy nên đến 1 lúc nào đó chương trình của mình sẽ ko chạy hc là bị lỗi.... nếu ko làm theo cách đó thì còn có cách làm nào ## ko??? |
Trích:
|
tất nhiên là ko phải mình muốn như thế....
ứng dụng nhỏ thôi nhưng mà nó cần lưu trữ data khi bị mất nguồn...nên ko thể send tới mt đc... vậy thì phải giải quyết sao đêy?? |
Trích:
vd mún lưu mật mã --> có thể lưu tại 1 địa chỉ trong eeprom bao nhiu lần cũng đc , nhưng tốt nhất là nên lưu sau khi nhấn enter vd : lưu lại giá trị các biến thì nên khai báo là kiểu unsigned char flash ,hoặc unsigned char eeprom , hoặc write_eeprom (địa chỉ , dta) . hình như ghi xóa đc 10 000 lần . Hoặc dùng nguồn dự phòng , cái này cần thiết kế 1 mạch đo áp khi mất điện để đóng role thông nguồn ngoài . |
mình cần 1 thiết bị có thể lưu thời gian hoạt động của máy..điều hòa công nghiệp,mà cái máy này cứ bật lại tắt liên tục....nó có thể tắt bất kì lúc nào...
yêu cầu cần phải có 1 cái đồng hồ hiển thị số thời gian nó sử dụng đc từ lúc mình đặt..hc là reset... do đó cứ khoảng 10->15 s là phải lưu giá trị thời gian 1 lần... mình định ghi nó vào eprom của PIC nhưng sợ rằng lưu giá trị này vào 1 ô nhớ quá nhiều lần trong 1 thời gian dài thì nó sẽ bị hỏng ....hc bị sai.. mạch này hoạt động mà ko đc dùng nguồn ngoài như nguồn 5v hay 3v phụ cho RTC mình đang rất bí mà chưa có giải pháp nào phù hợp cả... |
Trích:
|
Trích:
Nên đọc kỹ datasheet hơn! ^^ |
Trích:
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); } } |
nhờ mấy bác giúp đỡ em với, vấn đề này em làm mấy hôm rồi vẫn chưa ra, đã thử ở mấy con PIC 16f877a khác kết quả vẫn không có như mong muốn, nhờ các bác giúp với
|
Chào mọi người,mọi người cho mình hỏi mình dùng lệnh write_eeprom(add,data) và read_eeprom(add) trong ccs thì lại báo lỗi là function used but not defined...read_eeprom SCR3681
mình không biết bị lỗi gì mong mọi người chỉ giúp [CODE]void Read_e2prom(void){ fprintf(HOSTPC,">** Read eeprom program**\n\r"); A=read_eeprom(A_eeprom);//trình dịch báo lỗi hàm chưa được định nghĩa B=read_eeprom(B_eeprom); C=read_eeprom(C_eeprom); D=read_eeprom(D_eeprom); E=read_eeprom(E_eeprom); F=read_eeprom(F_eeprom); G=read_eeprom(G_eeprom); H=read_eeprom(H_eeprom); fprintf(HOSTPC,">A=%d\n\r",A); delay_ms(10); fprintf(HOSTPC,">B=%d\n\r",B); delay_ms(10); fprintf(HOSTPC,">C=%d\n\r",C); delay_ms(10); fprintf(HOSTPC,">D=%d\n\r",D); delay_ms(10); fprintf(HOSTPC,">E=%d\n\r",E); delay_ms(10); fprintf(HOSTPC,">F=%d\n\r",F); delay_ms(10); fprintf(HOSTPC,">G=%d\n\r",G); delay_ms(10); fprintf(HOSTPC,">H=%d\n\r",H); delay_ms(10); } [CODE] Cám ơn mọi người |
Nếu dữ liệu là kiểu float thì sao các bác nhỉ ? có cách nào nhanh hơn là chuyển 32bit thành 4 lần 8bit rồi gửi từng cái không nhỉ ? em thấy cái này chỉ cho gửi dữ liệu 8bit mà em đang cần lưu kiểu float , em dùng ccs và pic877a. thanks ^^
|
co ban nao biet cach ghi doc prom roi xuat ra cong com giao tiep voi may tinh k chi mh voi
thay mh yeu cau sau khi nhan nut doc eeprom thi truyen ve may tinh va dung chuong trinh vb6 de tong hop xem co ban=o nhieu y kien chon nut do,AI GIUP MH VOI HUHUHUHU |
có ai biết địa chỉ mua eprom 27c512 moi mà rẻ tại hà nội chủ rùm em với. cám ơn trước nhe.
|
#include <16f877a.h>
#FUSES HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT //#use i2c(Master,slow,sda=PIN_C4,scl=PIN_C3)//toc do 100kb slow #use Delay(clock=20000000) //#include "lcd 8bit.h" //#define Mode PIN_A3 //#define Up PIN_A2 //#define Down PIN_A1 //#define Setup PIN_A0 /* int8 value=0,value_display=1,value_VC_front=7,value_VC_ rear=7, value_Tr=5,value_Md=3,value_Bas=1, value_Ce=7,value_Sub=8, value_Mt,value_1db,value_10db, value_B=158,value_M=172,value_T=186, value_FL=24,value_FR=40,value_RR=88,value_RL=72, value_C=56,value_SW=104;// */ int8 value, value_display, value_VC_front, value_VC_rear, value_Tr,value_Md,value_Bas, value_Ce,value_Sub, value_Mt,value_1db,value_10db, value_B,value_M,value_T, value_FL,value_FR,value_RR,value_RL, value_C,value_SW;// void Write_EE() { Write_EEPROM(0x00,40); //value_Mt=40 Write_EEPROM(0x01,217); //value_1db=217 Write_EEPROM(0x02,227); //value_10db=227 Write_EEPROM(0x03,158); //value_B=158 Write_EEPROM(0x04,1); //value_Bas=1, Write_EEPROM(0x05,172); //value_M=172 Write_EEPROM(0x06,3); //value_Md=3 Write_EEPROM(0x07,186); //value_T=186 Write_EEPROM(0x08,5); //value_Tr=5 Write_EEPROM(0x09,7); //value_VC_front=7 Write_EEPROM(0x10,24); //value_FL=24 Write_EEPROM(0x11,40); //value_FR=40 Write_EEPROM(0x12,7); //value_VC_rear=7 Write_EEPROM(0x13,72); //value_RL=72 Write_EEPROM(0x14,88); //value_RR=88 Write_EEPROM(0x15,7); //value_Ce=7 Write_EEPROM(0x16,56); //value_C=56 Write_EEPROM(0x17,104); //value_SW=104 Write_EEPROM(0x18,8); //value_Sub=8 } void Read_EE() { value_Mt= Read_EEPROM(0x00); value_1db= Read_EEPROM(0x01); value_10db= Read_EEPROM(0x02); value_B= Read_EEPROM(0x03); value_Bas= Read_EEPROM(0x04); value_M= Read_EEPROM(0x05); value_Md= Read_EEPROM(0x06); value_T= Read_EEPROM(0x07); value_Tr= Read_EEPROM(0x08); value_VC_front= Read_EEPROM(0x09); value_FL= Read_EEPROM(0x10); value_FR= Read_EEPROM(0x11); value_VC_rear= Read_EEPROM(0x12); value_RL= Read_EEPROM(0x13); value_RR= Read_EEPROM(0x14); value_Ce= Read_EEPROM(0x15); value_C= Read_EEPROM(0x16); value_SW= Read_EEPROM(0x17); value_sub= Read_EEPROM(0x18); } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// void main() { Write_EE(); //Read_EE(); while(1) {/* if(!input(Mode)) {while(!input(Mode)); value_Mt= Read_EEPROM(0x00); Lcd_gotoxy(0x80); printf(lcd_putchar,"%u",value_Mt); } if(!input(Up)) {while(!input(Up)); value_VC_front= Read_EEPROM(0x02); Lcd_gotoxy(0x40); printf(lcd_putchar,"%u",value_10db); } */ } } Chào các bạn. Mình có đoạn code ghi các giá trị vào eeprom. Sau khi nạp xong mình đọc lại bằng pickit2 thì tại địa chỉ 0x00 nó không ghi đúng giá trị mình đặt, mình có thử ghi lại tại địa chỉ khác cũng không được. Mong các bạn giúp đỡ. Thanks. |
Múi giờ GMT. Hiện tại là 02:08 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam