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 Bài Trong Ngày 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 07-04-2009, 05:52 PM   #1
kugirl
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 10
:
cho em hỏi về câu lệnh truyền nhận với máy tính

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

thay đổi nội dung bởi: kugirl, 07-04-2009 lúc 06:27 PM.
kugirl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 06:04 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 kugirl View Post
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,
__________________
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
Old 07-04-2009, 07:54 PM   #3
kugirl
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 10
:
Trích:
Nguyên văn bởi namqn View Post
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 ạ!
kugirl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 08:24 PM   #4
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 kugirl View Post
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/vi...m_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,
__________________
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
Old 07-04-2009, 08:42 PM   #5
kugirl
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 10
:
Trích:
Nguyên văn bởi namqn View Post
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/vi...m_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.
kugirl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-04-2009, 09:09 PM   #6
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 kugirl View Post
ủ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,
__________________
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


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à 12:26 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