PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 06-11-2007, 02:58 AM   #1
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
lệnh ghi eeprom nội của pic ntn?

tôi viết = CCS,tôi dùng lệnh ghi lên eeprom nội của pic,thấy trong tài liệu CCS help nói lệnh này thực hiện trong vài mili giây,vậy nếu lệnh đang thực hiện mà xảy ra ngắt thì có ảnh hưởng gì ko?theo đúng lý thuyết chương trình sẽ nhảy vào ngắt và khi thực hiện ngắt xong thì quay lại làm tiếp,vấn đề tài ngắt tôi xài là ngắt pwm tần số 20Khz(50us),vậy thì nhảy ra nhảy vào mấy chục lần mới xong cái lệnh ghi eeprom,như vậy còn đảm bảo chuơng trình thực hiện chính xác ko?tôi xài con pic18f4331
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-11-2007, 11:39 AM   #2
Jerry
Đệ tử 5 túi
 
Jerry's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 100
:
Trước khi ghi vào EEPROM trong phải cấm tất cả các ngắt (xoá bit GIE đi). Ghi xong mới set lại nó =1. Trong datashet của PIC có nói đến việc này mà.
__________________
Do more than exist, LIVE
Jerry vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2007, 12:53 AM   #3
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
cảm ơn bác đã giải thích,cái chổ bác nói phải cấm ngắt trước khi ghi eeprom là trong tài liệu nào vậy?nếu có thể bác cho biết trang luôn nhé,điều này có bắt buộc ko?tức là nếu ghi eeprom mà ko cấm ngắt thì ko ghi được sao?cám ơn
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2007, 12:59 AM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi sandro_bk View Post
cảm ơn bác đã giải thích,cái chổ bác nói phải cấm ngắt trước khi ghi eeprom là trong tài liệu nào vậy?nếu có thể bác cho biết trang luôn nhé,điều này có bắt buộc ko?tức là nếu ghi eeprom mà ko cấm ngắt thì ko ghi được sao?cám ơn
Jerry đã nói là trong datasheet của PIC rồi mà. Với con PIC18F4331 mà bạn đang dùng, bạn hãy đọc ví dụ 7-2, trang 87 (theo như được đánh số trong tài liệu DS39616B của Microchip).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2007, 01:04 AM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi Jerry View Post
Trước khi ghi vào EEPROM trong phải cấm tất cả các ngắt (xoá bit GIE đi). Ghi xong mới set lại nó =1. Trong datashet của PIC có nói đến việc này mà.
Nói một cách chính xác hơn là phải cấm ngắt để đảm bảo thực hiện chuỗi lệnh kích hoạt ghi EEPROM (required sequence), một khi đã kích hoạt việc ghi thì có thể cho phép ngắt trở lại. Bản thân việc ghi EEPROM cũng có thể tạo một ngắt khi ghi xong (bit EEIF).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-11-2007, 10:39 AM   #6
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
mình cũng đang tìm hiểu về eeprom. đã đọc trong help của ccs rồi mã vẫn không hiểu.
mình cũng đã tìm hết diễn đàn rồi mà cũng chưa có bài viết nào hoàn chỉnh về eeprom để tham khảo cả. ai có bài nào thì port lên cho mình tham khảo với. hi hi
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2007, 11:00 PM   #7
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
đây là 1 cái code ng bạn mới đưa cho tui !
Code:
void write_ext_eeprom(unsigned char address, unsigned char data)
{
start();
write(0xa0);
write(address);
write(data);
stop();
DelayMs(11);
}

/****************************** ****************************** ******************************/

unsigned char read_ext_eeprom(unsigned char address)
{
unsigned char data;

start();
write(0xa0);
write(address);
repStart();
write(0xa1);
data=read(0);
stop();
return(data);
}

/****************************** ****************************** ******************************/

void main()
{
unsigned char i=0;

PORTB=0x00; // port
PORTC=0x00; // port

TRISB=0x00; //portb out
TRISC=0x00; //portc out

init(); // 

while(i<=10) /* Viet 10 so vao eeprom */ //dung yeu cau roi nhe
{ 
PORTB=i; // xuat ra cho nao do. de de nhan biet moi lan vietnao eprom cho xuat ra led
write_ext_eeprom(i,i); // viet vao eprom
i++;
DelayMs(255);
}


PORTB=0xff; // sang led
DelaySec(1);
PORTB=0x00;
DelaySec(1);

i=0;

while(i<=10)
{
PORTB=i; // dia chi nay se doc tu eprom den led
DelayMs(255);
PORTB=0x00; // leds tat
DelayMs(255);
PORTB=read_ext_eeprom(i); // bo nho se chi cho led sang
DelayMs(255);
i++;
}
}
/****************************** ****************************** ******************************/
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2007, 11:01 PM   #8
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
tungtot_vl thử & cho ý kiến
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-11-2007, 05:43 AM   #9
sandro_bk
Đệ tử 4 túi
 
sandro_bk's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 66
:
thật ra để ghi và đọc eeprom của pic chỉ cần dùng lệnh hàm write_eeprom(địa chỉ,giá trị);
read_eeprom(địa chỉ); đã được cung cấp sẵn,có điều như đã nói ở trên,khi ghi phải cấm tất cả các ngắt và ghi xong cho phép ngắt lại,tại sao phải như vậy thì coi bài bác Nam post ở trên
sandro_bk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-11-2007, 03:30 PM   #10
dongbka
Nhập môn đệ tử
 
Tham gia ngày: Oct 2007
Bài gửi: 3
:
tui đang tìm hiểu về ghép nối pic6f877a với rom ngoài.
bạn nào có tài liệu gì về vấn đề này không pót lên cho tui tham khảo với.
nếu có sơ đồ ghép nối và code thì tốt quá.tôi định làm với con rom 256k
vẫn chưa biết làm thế nào cả
dongbka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-03-2008, 04:59 PM   #11
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
cho em hỏi , em lưu 1 giá trị 8 bit vào eeprom con Pic 16f887 thì được , nhưng làm sao ghi 1 giá trị 10 bit hoặc lớn hơn vào eeprom vậy? ai có giải thuật giúp em với ..
__________________
_________________________________________________
Le Trung Duc
Industry Research & Application Center
NTT Institute of Hi_technolog
ltduc@ntt.edu.vn
leduc_cktd@yahoo.com.vn
http://www.nttc.edu.vn
CNC DIY : http://quangcaosanpham.com/shop/driverservo
0909300332
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-03-2008, 05:10 PM   #12
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi LeDuc View Post
cho em hỏi , em lưu 1 giá trị 8 bit vào eeprom con Pic 16f887 thì được , nhưng làm sao ghi 1 giá trị 10 bit hoặc lớn hơn vào eeprom vậy? ai có giải thuật giúp em với ..
PIC16F887 là vi điều khiển 8-bit, do đó độ dài dữ liệu tự nhiên là 8-bit. Để lưu các giá trị dài hơn 8-bit vào EEPROM của PIC16F887 thì bạn có thể tách các giá trị này ra thành nhiều phần, mỗi phần dài nhất là 8-bit, và lưu vào PIC theo một quy ước nào đó (có thể do bạn tự đặt ra). Các trình biên dịch ngôn ngữ cấp cao thường xử lý việc này cho bạn, do đó không có lý do gì bạn phải tự xử lý, trừ khi bạn viết chương trình bằng hợp ngữ.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-03-2008, 05:48 PM   #13
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Trích:
Nguyên văn bởi namqn View Post
PIC16F887 là vi điều khiển 8-bit, do đó độ dài dữ liệu tự nhiên là 8-bit. Để lưu các giá trị dài hơn 8-bit vào EEPROM của PIC16F887 thì bạn có thể tách các giá trị này ra thành nhiều phần, mỗi phần dài nhất là 8-bit, và lưu vào PIC theo một quy ước nào đó (có thể do bạn tự đặt ra). Các trình biên dịch ngôn ngữ cấp cao thường xử lý việc này cho bạn, do đó không có lý do gì bạn phải tự xử lý, trừ khi bạn viết chương trình bằng hợp ngữ.

Thân,
Nhưng anh Nam ơi, khi đọc ra thì phải làm sao để lấy đủ giá trị 10 bit .
bài toán em đang làm là : xét AD của 8 kênh dữ liệu , lưu vào eeprom . Đọc dữ liệu của 8 kênh được lưu trong eeprom , và xử lý khi có ngắt AD ..
Bình thường khi ghi vào eeprom nếu giá trị lớn hơn 8bit , nó tự tách ra nhiều phần , mỗi phần là 8 bit . Nhưng khi đọc ra làm sao ta lấy dủ dữ liệu 10 để so sanh với giá trị AD 10 bit tức thời ...
Em vẫn ko nghĩ ra được giải thuật, rất mong các anh giúp em...
Thanks for all ..
__________________
_________________________________________________
Le Trung Duc
Industry Research & Application Center
NTT Institute of Hi_technolog
ltduc@ntt.edu.vn
leduc_cktd@yahoo.com.vn
http://www.nttc.edu.vn
CNC DIY : http://quangcaosanpham.com/shop/driverservo
0909300332
LeDuc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-03-2008, 10:56 PM   #14
caonam
Đệ tử 2 túi
 
Tham gia ngày: Aug 2005
Bài gửi: 30
:
Trích:
Nguyên văn bởi LeDuc View Post
Nhưng anh Nam ơi, khi đọc ra thì phải làm sao để lấy đủ giá trị 10 bit .
bài toán em đang làm là : xét AD của 8 kênh dữ liệu , lưu vào eeprom . Đọc dữ liệu của 8 kênh được lưu trong eeprom , và xử lý khi có ngắt AD ..
Bình thường khi ghi vào eeprom nếu giá trị lớn hơn 8bit , nó tự tách ra nhiều phần , mỗi phần là 8 bit . Nhưng khi đọc ra làm sao ta lấy dủ dữ liệu 10 để so sanh với giá trị AD 10 bit tức thời ...
Em vẫn ko nghĩ ra được giải thuật, rất mong các anh giúp em...
Thanks for all ..
Chời ơi,
unsigned int temp;
temp = (ADRESH << 8) | ADRESL;
vậy là được mà.

Nếu bạn ghi 1 số kiểu integer (2 byte) vào địa chỉ 10H chẳng hạn thì đọc nó ra byte 10H và 11H, phần cao và phần thấp đó, xong làm như phép trên là được.
Bạn bảo trình biên dịch nó tự tách ra thì phải lưu theo thứ tự đó, byte đầu là phần cao, byte sau là phần thấp.
caonam vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:05 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam