PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 02-12-2008, 05:12 PM   #1
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Ngoài cách kiểm tra dữ liệu sẽ nạp vào 01 ô nhớ (nếu >=256) thì cho tách dữ liệu.
thì còn có cách nào khác biết 1 ô nhớ bị tràn không bạn(ví dụ như bật một cờ báo nào đó chẳng hạn- mình dùng ccs - c nha!)?để mình có thể kiểm tra nếu tràn thì tự động cho tách dữ liệu.
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-12-2008, 08:36 PM   #2
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 lequocbao View Post
Ngoài cách kiểm tra dữ liệu sẽ nạp vào 01 ô nhớ (nếu >=256) thì cho tách dữ liệu.
thì còn có cách nào khác biết 1 ô nhớ bị tràn không bạn(ví dụ như bật một cờ báo nào đó chẳng hạn- mình dùng ccs - c nha!)?để mình có thể kiểm tra nếu tràn thì tự động cho tách dữ liệu.
Bạn đọc lại post #4 của tôi. Nếu con số mà bạn muốn lưu trữ vượt quá khả năng biểu diễn của một kiểu dữ liệu thì bạn dùng kiểu dữ liệu có nhiều byte hơn.

Lấy ví dụ, giả sử chúng ta dùng một biến kiểu unsigned int32 (lưu trữ trong 4 byte) để lưu giá trị của một đại lượng nào đó.

- Nếu giá trị của đại lượng đó >= 16777216, thì chắc chắn byte cao nhất của biến sẽ khác 0x00,
- Nếu giá trị của đại lượng đó nằm giữa 65536 và 16777216 (65536 <= giá trị < 16777216) thì chắc chắn byte cao thứ nhì của biến sẽ khác 0x00, byte cao nhất sẽ bằng 0x00,
- Nếu giá trị của đại lượng đó nằm giữa 256 và 65536 (256 <= giá trị < 65536) thì chắc chắn byte thấp thứ nhì của biến sẽ khác 0x00, byte cao nhất và cao thứ nhì sẽ bằng 0x00,
- Nếu giá trị của đại lượng đó <= 255 thì chắc chắn byte thấp nhất của biến sẽ khác 0x00, các byte cao hơn sẽ bằng 0x00.

Dữ liệu đã nằm sẵn ở các byte của biến, bạn có thể dùng hàm make8() của CCS C để lấy chúng ra và ghi vào EEPROM bất kỳ lúc nào.

Khả năng tràn số chỉ xảy ra khi bạn thực hiện phép toán số học trên biến, và PIC có cờ C trong thanh ghi STATUS cho biết phép toán số học gần nhất có tạo ra việc nhớ/mượn.

Khi đã xảy ra tràn số thì bạn không thể so sánh để phát hiện đâu. Ví dụ, bạn dùng một byte để lưu giá trị. Giả sử hiện thời giá trị là 200. Sau khi bạn cộng nó với 100, về lý thuyết thì bạn có kết quả là 300, nhưng vì 1 byte không thể biểu diễn được 300, nên bạn chỉ nhận được giá trị 0x2C (44 thập phân) trong byte đó, và bit thứ 9 đã được chuyển vào cờ C trong thanh ghi STATUS. Lúc này, xuất hiện việc tràn số do kết quả của phép cộng. Byte nhớ của bạn sẽ không bao giờ chứa được giá trị >= 256, do đó phép so sánh >= 256 của bạn sẽ luôn luôn cho kết quả false.

Nếu bạn dùng biến có độ dài 2 byte để lưu giá trị, thì với phép cộng trên, byte thấp sẽ là 0x2C, còn byte cao sẽ là 0x01, và không xảy ra sự tràn số. Các dữ liệu đã nằm sẵn ở các byte tương ứng, không cần phải tách dữ liệu bằng cách so sánh giá trị xem có >= 256 hay khô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
Trả lời

Ðiều Chỉnh
Xếp Bà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à 08:54 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