Trích:
Nguyên văn bởi tuongdtd
chào các bác trên diễn đàn!
dưới đây là đoạn code trong vd5-2 của anh Nam:
while (1) {
if (flag) { //Neu co ket qua moi thi xuat ket qua
idx = (ADCValue >> 8); //Nibble cao nhat (chi co 2 bit)
U1TXREG = HexTable[idx]; //Chuyen thanh ky tu tuong ung
while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu
idx = ((ADCValue >> 4) & 0x000F); //Nibble thu hai
U1TXREG = HexTable[idx]; //Chuyen thanh ky tu tuong ung
while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu
idx = (ADCValue & 0x000F); //Nibble thap nhat
U1TXREG = HexTable[idx]; //Chuyen thanh ky tu tuong ung
while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu
U1TXREG = 0x0A; //Cap ky tu CR, LF
while (!U1STAbits.TRMT); //Cho den khi truyen xong ky tu
U1TXREG = 0x0D;
flag = 0; //Xoa co bao hieu co ket qua moi
};
};
theo em hiểu như thế này ko biết có đúng ko?
giả sử ADCvalue = 0x037f
ban đầu ta lấy 2 bit cao nhất tức là idx =0x0003
ta lấy 4 bit tiếp theo idx= 0x0007
và 4 bit cuối idx = 0x000f.
vậy ta sẽ gửi 3 byte lên máy tính, nhưng tai sao ta không gửi U1TXREG = idx mà phải sử dụng U1TXREG = HexTable[idx]?
tại sao ta lại phải truyền thêm hai ký tự CR và LF?
|
Các giá trị 0x00 đến 0x0F sẽ không hiển thị được trên màn hình máy tính (trong bảng mã ASCII trên máy tính, bất kỳ ký tự nào có mã dưới 0x20 đều là ký tự không hiển thị được), do đó cần phải chuyển các giá trị này thành ký tự ASCII tương ứng. Ví dụ, giá trị 0x07 cần được chuyển thành ký tự '7' (có mã ASCII là 0x37) trước khi gửi về máy tính. Việc dùng bảng HexTable[] là một trong những cách chuyển đổi đó.
Hai ký tự CR và LF để về đầu dòng và xuống dòng trên Hyper Terminal thôi.
Thân,