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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 25-03-2008, 07:50 AM   #10
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
Lấy ví dụ đơn giản, bạn có chuỗi 1 sẽ được ghi vào EEPROM. Ở đầu hàm viet_eeprom(), bạn đã cấm ngắt toàn cục. Khi thực hiện ghi chuỗi 1, bạn gọi hàm write_eeprom(b1, s) để ghi lại giá trị của s. Về nguyên tắc, hàm write_eeprom() của CCS C dùng khả năng ghi vào EEPROM của phần cứng bên trong PIC, do đó sẽ kích hoạt cờ EEIF khi đã ghi xong byte s đó vào b1. Theo yêu cầu của phần cứng, có lẽ hàm write_eeprom() của CCS C sẽ xóa cờ EEIF trong trường hợp polling và để nguyên nó nếu bạn có dùng #INT_EEPROM (để trình phục vụ ngắt #INT_EEPROM có thể xử lý như thiết kế).

Vì ngắt toàn cục đã bị cấm, hàm viet_eeprom() của bạn tiếp tục chạy đến vòng lặp để ghi chuỗi vào vùng nhớ add1. Như đã nói ở trên, cứ sau mỗi lần ghi được 1 byte vào EEPROM, cờ EEIF sẽ được bật, và có lẽ sẽ không được xóa vì bạn đã khai báo có dùng #INT_EEPROM. Tôi không rõ hàm write_eeprom() sẽ làm gì trong trường hợp này (đây cũng là một trong những lý do khiến tôi không thích những hàm built-in của CCS C, vì hành vi của chúng không được giải thích rõ ràng).

Hành vi của hàm viet_eeprom() của bạn phụ thuộc vào hành vi không được biết rõ của hàm write_eeprom(). Và cách viết code của bạn là không thân thiện với cấu trúc ngắt của PIC.

Thân,[/QUOTE]

vì data từ pc gởi xuống phải được lưu vào eeprom. ví dụ khi gửi xuống chuổi 1 thì chuổi 1 phải được lưu vào mãng chu[] và ghi vào eeprom. và sau đó phải xoá mãng chu[] để tiếp tục lưu chuỗi thứ 2,3...
nếu khi gởi data từ pc xuống mà không lưu vào eeprom ngay thì chuỗi 2 gởi xuống sẽ làm mất chuỗi 1.
còn nếu muốn tách hàm viet_eeprom vào doc_eeprom ra thì cần có nhiều mãng chu[]. mỗi mãng phải lưu 1 chuỗi khác nhau. cách này hơi tốn ram lắm.
em có thể bỏ hàm viet_eeprom xuống cuối hàm giao tiếp PC như phía dưới thì có ổn không.
#INT_RDA

void giao_tiep()
{ int8 c;
disable_interrupts(global);
output_low(pin_b0); output_low(pin_b1); output_low(pin_b2); output_low(pin_b3);
c = getc();
putc(c);
k=c;
if(k==255)
{
//////
}
else { chu[s]=k; s++; delay_ms(500);}
enable_interrupts(global);
viet_eeprom();
}
theo leduc noi không nên dùng ngắt khi viết vào eprom do đó nếu em bỏ các lệnh
#INT_EEPROM
disable_interrupts(global); và enable_interrupts(global);
và vẫn giữ nguyên hàm ngắt giao tiếp pc như cũ thì có ổn không hả các anh.
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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:14 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