PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   xin giúp đỡ e về cách chuyển đổi số 16bit đưa vào 2 thanh ghi 8 bit (http://www.picvietnam.com/forum/showthread.php?t=6100)

melody010 08-04-2010 08:06 PM

xin giúp đỡ e về cách chuyển đổi số 16bit đưa vào 2 thanh ghi 8 bit
 
- E dùng CCS C để lập trình nhưng có phần này ko biết viết sao nữa. mong các a giúp đỡ để e viết được tiếp chương trình của e.

- Giả sử e khai báo biến

int16 vitri;

- bây giờ nếu e muốn đưa giá trị từ 2 thanh ghi 8 bit vào biến vitri (16 bit) thì e dùng code như sau (cái này do e tham khảo các bài khác):


void Read_QEI() // ĐỌC ENCODER
{
vitri = make16(POSCNTH,POSCNTL);


(2 thanh ghi POSCNTH,POSCNTL là 8 bit)


- e xin hỏi bây giờ e có biến vitri đang mang giá trị số 16 bit nếu muốn đưa vào 2 thanh ghi POSCNTH,POSCNTL thì code phải viết như thế nào? (8 bit cao của vitri đưa vào POSCNTH và 8 bit thấp đưa vào POSCNTL). mong các a giúp đỡ gấp với vì e sắp nộp đồ án rồi, chả là e đang viết chương chình nhưng tới phần này ko biết viết. Xin cảm ơn các a rất nhiều!

melody010 08-04-2010 10:49 PM

Trích:

Nguyên văn bởi ngocthanh07 (Post 34894)
Mình có cách này, bạn tham khảo chơi
POSCNTL = vitri ; //vì vị trí là 16 bit, POSCNTL chỉ có 8 bit nên nó chỉ move đuợc 8 bit thấp vào thôi
POSCNTH = vitri>>8 ;//biến vi tri dịch phải 8 bit, khi đó 8 bit cao dời tới vị trí 8 bit thấp, sau đó đưa vào POSCNTH khi đó 8 bit cao (giờ đang nằm ở chỗ thấp) đuợc đưa vào POSCNTH

cách khác là dùng cấu trúc union, khi đó byte thấp và byte cao cùng địa chỉ biến vitri, nó tự lấy giá trị, bạn không cần làm gì. Cách nữa là dùng con trỏ ...

thanks bạn nhìu ! mình đã hiểu ý của bạn, để mình thử xem !

kiepphudu 09-04-2010 09:48 AM

Trích:

Nguyên văn bởi melody010 (Post 34891)
- E dùng CCS C để lập trình nhưng có phần này ko biết viết sao nữa. mong các a giúp đỡ để e viết được tiếp chương trình của e.

- Giả sử e khai báo biến

int16 vitri;

- bây giờ nếu e muốn đưa giá trị từ 2 thanh ghi 8 bit vào biến vitri (16 bit) thì e dùng code như sau (cái này do e tham khảo các bài khác):


void Read_QEI() // ĐỌC ENCODER
{
vitri = make16(POSCNTH,POSCNTL);


(2 thanh ghi POSCNTH,POSCNTL là 8 bit)


- e xin hỏi bây giờ e có biến vitri đang mang giá trị số 16 bit nếu muốn đưa vào 2 thanh ghi POSCNTH,POSCNTL thì code phải viết như thế nào? (8 bit cao của vitri đưa vào POSCNTH và 8 bit thấp đưa vào POSCNTL). mong các a giúp đỡ gấp với vì e sắp nộp đồ án rồi, chả là e đang viết chương chình nhưng tới phần này ko biết viết. Xin cảm ơn các a rất nhiều!

bạn thử làm như vậy xem có được không!
POSCNTH = (vitri)>>8;
POSCNTL = vitri&0x00FF;


Múi giờ GMT. Hiện tại là 02:12 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