View Full Version : cho em hỏi về câu lệnh truyền nhận với máy tính
kugirl
07-04-2009, 05:52 PM
em đọc một số code mẩu có một số câu lệnh truyền lên máy tính như:
convert_bcd((int8)value);//hàm chuyển đổi số
printf("\n\r nhiet do phong:%u",value);//hàm chyển dử liệu lên máy tính
Như vậy hàm printf là hàm chuyển dử liệu lên máy tinh , và ở trên thì nó truyền giá trị value lên máy tính.máy tính sẽ lưu giá trị value vào bộ đệm.nếu ta viết hàm nhận bằng VB thì hàm ngắt của VB là hàm nhận dử liệu.vậy ở đây em không hiểu là:
+)ngắt xảy ra khi truyền xong hàm printf phải không ạ?
+)cách nhận dử liệu như thế nào ạ?nó có khác gì khi ta truyền 1 kí tự lên máy tính = hàm getc không
namqn
07-04-2009, 06:04 PM
em đọc một số code mẩu có một số câu lệnh truyền lên máy tính như:
convert_bcd((int8)value);//hàm chuyển đổi số
printf("\n\r nhiet do phong:%u",value);//hàm chyển dử liệu lên máy tính
Như vậy hàm printf là hàm chuyển dử liệu lên máy tinh , và ở trên thì nó truyền giá trị value lên máy tính.máy tính sẽ lưu giá trị value vào bộ đệm.nếu ta viết hàm nhận bằng VB thì hàm ngắt của VB là hàm nhận dử liệu.vậy ở đây em không hiểu là:
+)ngắt xảy ra khi truyền xong hàm printf phải không ạ?
+)cách nhận dử liệu như thế nào ạ?nó có khác gì khi ta truyền 1 kí tự lên máy tính = hàm không
printf() là hàm xuất chuỗi có định dạng trong thư viện chuẩn của C. Nếu không chỉ định ngõ ra thì printf() sẽ xuất đến ngõ ra chuẩn (standard output). Với CCS C thì ngõ ra chuẩn là một stream RS-232. Nếu bạn nối ngõ ra RS-232 này với máy tính thì kết quả của printf() sẽ được gửi đến máy tính qua giao tiếp RS-232.
Ở phía máy tính, tùy thuộc vào sự thiết lập của bạn mà ngắt nhận dữ liệu từ cổng RS-232 có thể xảy ra theo một điều kiện nào đó (sau mỗi ký tự, hay khi bộ đệm nhận tràn, ...).
Việc xử lý dữ liệu như thế nào tùy thuộc vào bạn quy ước giao thức giữa máy tính và thiết bị ngoại vi.
Thân,
kugirl
07-04-2009, 07:54 PM
printf() là hàm xuất chuỗi có định dạng trong thư viện chuẩn của C. Nếu không chỉ định ngõ ra thì printf() sẽ xuất đến ngõ ra chuẩn (standard output). Với CCS C thì ngõ ra chuẩn là một stream RS-232. Nếu bạn nối ngõ ra RS-232 này với máy tính thì kết quả của printf() sẽ được gửi đến máy tính qua giao tiếp RS-232.
Ở phía máy tính, tùy thuộc vào sự thiết lập của bạn mà ngắt nhận dữ liệu từ cổng RS-232 có thể xảy ra theo một điều kiện nào đó (sau mỗi ký tự, hay khi bộ đệm nhận tràn, ...).
Việc xử lý dữ liệu như thế nào tùy thuộc vào bạn quy ước giao thức giữa máy tính và thiết bị ngoại vi.
Thân,
cảm ơn trưởng lảo em đã hiểu,nếu ở đây ta muốn máy tính theo giỏi dử liệu từ con pic này truyền lên liên tục thì phải làm thế nào ạ.ở đây dử liệu thu được từ 5 kênh ADC đầu vào.
theo ngu ý của em là ta dùng time của VB,cứ 1 khoảng thời gian cố định nào đó ta gửi yêu cầu truyền dử liệu xuống con pic này,và khi nhận được yêu cầu thì con pic này truyền lên qua công nối tiếp.ví dụ nó truyền adc0,adc1,adc2...,thì VB nhận được một dử liệu sau 1 ngắt và ta phải lưu vào 1 biến nhan1,nhan2...phải không ạ?
Nhân đây em hỏi bác là giao tiếp với 1 thiết bị DAC 12 bit giao tiếp I2C thì phải làm như thế nào?.em nghe nói là truyền dử liệu 2 lần,1 lần 8 bít và 1 lần 4 bít.
bác ví dụ cho em bằng 1 cái code mẩu được không?
em cảm ơn trưởng lảo trước ạ!
namqn
07-04-2009, 08:24 PM
cảm ơn trưởng lảo em đã hiểu,nếu ở đây ta muốn máy tính theo giỏi dử liệu từ con pic này truyền lên liên tục thì phải làm thế nào ạ.ở đây dử liệu thu được từ 5 kênh ADC đầu vào.
theo ngu ý của em là ta dùng time của VB,cứ 1 khoảng thời gian cố định nào đó ta gửi yêu cầu truyền dử liệu xuống con pic này,và khi nhận được yêu cầu thì con pic này truyền lên qua công nối tiếp.ví dụ nó truyền adc0,adc1,adc2...,thì VB nhận được một dử liệu sau 1 ngắt và ta phải lưu vào 1 biến nhan1,nhan2...phải không ạ?
Nhân đây em hỏi bác là giao tiếp với 1 thiết bị DAC 12 bit giao tiếp I2C thì phải làm như thế nào?.em nghe nói là truyền dử liệu 2 lần,1 lần 8 bít và 1 lần 4 bít.
bác ví dụ cho em bằng 1 cái code mẩu được không?
em cảm ơn trưởng lảo trước ạ!
Cách làm đó thì ổn, tuy nhiên bạn cần hiểu là giao tiếp RS-232 sẽ truyền từng ký tự, có độ dài 7, 8, hay 9 bit. Do đó, bạn phải xác định xem cần bao nhiêu ký tự cho một kết quả ADC, rồi mới thiết lập MSComm trong VB. Tham khảo ví dụ ở đây chẳng hạn (đã rất lâu rồi tôi không còn dùng VB):
http://www.users.on.net/~cit/html/visual_basic_mscomm_control.html
Về thiết bị DAC, bạn nên đọc datasheet của linh kiện để hiểu những tham số cần thiết lập cho master, và giao thức mà nó hỗ trợ. Về cách dùng PIC làm master I2C, bạn có thể tham khảo ở đây:
http://namqn.byethost7.com/Commu.php
Thân,
kugirl
07-04-2009, 08:42 PM
Cách làm đó thì ổn, tuy nhiên bạn cần hiểu là giao tiếp RS-232 sẽ truyền từng ký tự, có độ dài 7, 8, hay 9 bit. Do đó, bạn phải xác định xem cần bao nhiêu ký tự cho một kết quả ADC, rồi mới thiết lập MSComm trong VB. Tham khảo ví dụ ở đây chẳng hạn (đã rất lâu rồi tôi không còn dùng VB):
http://www.users.on.net/~cit/html/visual_basic_mscomm_control.html
Về thiết bị DAC, bạn nên đọc datasheet của linh kiện để hiểu những tham số cần thiết lập cho master, và giao thức mà nó hỗ trợ. Về cách dùng PIC làm master I2C, bạn có thể tham khảo ở đây:
http://namqn.byethost7.com/Commu.php
Thân,
ủa thế khi dùng hàm printf ta phải nhận truyền theo kí tự à bác.em thấy trong tài liệu có định dạng truyền kết quả bằng số à.
VD printf("hello");truyền ký tự
printf("%u",k);truyền theo dạng số
còn nếu dùng ký tự để truyền kết quả ADC như thế nào ạ?em chưa hiểu.bác giải thích cho em với.
namqn
07-04-2009, 09:09 PM
ủa thế khi dùng hàm printf ta phải nhận truyền theo kí tự à bác.em thấy trong tài liệu có định dạng truyền kết quả bằng số à.
VD printf("hello");truyền ký tự
printf("%u",k);truyền theo dạng số
còn nếu dùng ký tự để truyền kết quả ADC như thế nào ạ?em chưa hiểu.bác giải thích cho em với.
printf("%u", k) sẽ xuất giá trị k ở dạng chuỗi ký tự ASCII biểu diễn số k (dạng mà con người thường dùng để biểu diễn các con số). Ví dụ, nếu k của bạn là số 250 (có thể mã hóa trong một byte) thì lệnh printf() đó sẽ xuất ra các ký tự '2', '5' và '0', tức là dùng 3 byte.
Ví dụ, nếu kết quả ADC của bạn chứa trong 10 bit thì giá trị thập phân lớn nhất mà bạn có thể cần biểu diễn sẽ là 1023 (tương ứng với 0b1111111111 = 0x3FF), do đó bạn sẽ có thể cần đến 4 ký tự để gửi giá trị này đi bằng printf(). Ở phía máy tính, nếu bạn chỉ dùng để hiển thị thì chuỗi ký tự này là sẵn sàng để sử dụng, nhưng nếu bạn cần tính toán với giá trị nhận được thì bạn sẽ cần phải chuyển chuỗi ký tự này trở lại thành một số nguyên 10-bit (chứa trong một ô nhớ 16-bit chẳng hạn).
Thân,
kugirl
08-04-2009, 12:13 AM
em hiểu rồi.Em cám ơn trưởng lảo nhiều lắm.chúc trưởng lảo sức khỏe để đóng góp cho picvietnem ngày một hoàn thiện hơn.Thân
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.