Tôi có đoạn code này nhưng nó chỉ truyền lên vb kênh 0 mà thôi ,xin góp ý giúp với .thank
#include <C:\Program Files\PICC\Devices\16F877A.h>
#device *=16 ADC=8
#fuses HS,NOWDT,NOLVP,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
byte adc;
byte buffer;
#INT_TIMER0
void send_data()
{
byte begin = 0xAA;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);//sets the internal clock as source
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0); // ngat timer0 de update screen
send_data();
Chào anh Bac!
Thật mừng là PIC việt nam có một thành viên như anh.Càng mừng hơn khi anh lại là sinh viên DHBKHN.Em thấy anh tham gia rất nhiều diễn đàn trên mạng phục anh quá.Anh có phương pháp học nào học hiệu quả chỉ giúp cho em với. Nhất là học lập trình thực sự em rất ngại động vào nó ,mặc dù ngành chúng em rất cần đến nó. Thú thực với anh em học về nó rất nhiều nhưng kết quả thì trái ngược với những j mà em dành cho nó. Rất mong nhận được sự chỉ bảo của anh.Chúc anh học tốt ,Cảm ơn anh
chào các bác. em muốn làm một mạch giao tiếp cổng của pc với 2 pic (ví dụ A và B). em muốn khi pc gửi data cho pic A thì chỉ có pic A nhận, B không nhận. khi pc gửi data cho pic B thì B nhận, A không nhận. các bác có cách nào thì xin chỉ mình giúp.
Lâu rùi không vào mà thấy mọi người trao đổi nhiều quá. hiiic.
Bạn nên mã hóa để cho nó gửi không bị sai tín hiệu.
VD: gửi mã hóa => gửi dữ liệu => gửi checksum.
Như vậy nếu c.hỉ gửi không thì bạn sẽ dễ hơn đó.
Còn về ADC các bạn nên dùng ADC 10 bít thì tốt hơn, nó có độ phân giải cao hơn và độ chính sác cao hơn là dùng 8 bít (đương nhiên là 1024 sẽ lớn hơn 256).
ex code: // gửi số có giá trị là 16 byte là "datasend"
void send_to_pc(unsigned int datasend, char set){
unsigned char chksum;
putc(0xAD); // gui ma hoa
putc(0xDA); // gui ma hoa
putc(set); // chon che do gui
putc((datasend>>8)&0xff); // Gui byte cao
putc(datasend & 0xff); // Gui byte thap
chksum = ((datasend>>8)|datasend))%256; // kiem tra loi
putc(chksum); // gui byte kiem tra loi
}
gửi phủ phước
code của bạn sai trong vòng for bạn chưa kết thúc chương trình, nếu bạn để như vậy thì vòng For chỉ chạy lần đầu tiên, không gửi được các kênh adc còn lại là đúng. Nên để chương trình đọc adc là chương trình con và gửi luôn là ok. như trên bạn gửi "set" là các kênh adc khác nhau là ok. như vậy vừa có thể đọc adc theo kênh vừa gửi là ok không sợ bị lỗi và bị nhầm.......
Chúc thành công nhé.
Last edited by vandungevn; 28-02-2009, 11:51 PM.
Lý do: Gửi thêm code mã hóa + kiểm tra lỗi.
Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
Nick name : VanDungEvn ( Yahoo + Skype ) Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.
Các bác ơi giúp em với em giao diện vi điều khiển với máy tính bằng vb.còn vi điều khiển em viết bằng ngôn ngữ c
Vb em viết đơn giản sau:
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "2400,n,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim strf As String
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 50
strf = MSComm1.Input
L.Caption = strf
End Sub
Vi điều khiển em viết như sau:em dùng 89C52
#include<REG52.H>
#include<stdio.h>
void xung()
{
SCON= 0x50;
TMOD= 0x20;
TH1 = 0xF3;
TR1 = 1;
TI = 1;
}
main()
{
int i;
P1=0x00;
xung();
for(;
{
P1=0x01;
printf("CHUNG TOI LA NNUNG CHIEN SI");
} }
Nhưng không hiểu trên máy tính toàn nhận kí tự gì ấy không được như ý nắm và báo nỗi "28", thỉnh thoảng được thì hiển thị kí tự quá nhiều và phụ thuộc vào cái này:Loop Until MSComm1.InBufferCount >= 50
Các bác nào bớt chút thời gian giải thich và khác phục cho em với
Tiện thể cho em mấy chương trình xuất nhập đơn giản trên VB và cả VDK một chương trình mà khi ta bấm 1 phím mà trên VDK các post xuất cho tín hiệu để điều khiển và ngược lại VDK gửi tín hiệu máy tính mà hiển thị trên màn hình
Các bác có gắng các lệnh đều phải có chú giải nhé !
Cám ơn những nhà thông thái!
Các bác ơi giúp em với em giao diện vi điều khiển với máy tính bằng vb.còn vi điều khiển em viết bằng ngôn ngữ c
Vb em viết đơn giản sau:
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "2400,n,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim strf As String
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 50
strf = MSComm1.Input
L.Caption = strf
End Sub
Vi điều khiển em viết như sau:em dùng 89C52
#include<REG52.H>
#include<stdio.h>
void xung()
{
SCON= 0x50;
TMOD= 0x20;
TH1 = 0xF3;
TR1 = 1;
TI = 1;
}
main()
{
int i;
P1=0x00;
xung();
for(;
{
P1=0x01;
printf("CHUNG TOI LA NNUNG CHIEN SI");
} }
Nhưng không hiểu trên máy tính toàn nhận kí tự gì ấy không được như ý nắm và báo nỗi "28", thỉnh thoảng được thì hiển thị kí tự quá nhiều và phụ thuộc vào cái này:Loop Until MSComm1.InBufferCount >= 50
Các bác nào bớt chút thời gian giải thich và khác phục cho em với
Tiện thể cho em mấy chương trình xuất nhập đơn giản trên VB và cả VDK một chương trình mà khi ta bấm 1 phím mà trên VDK các post xuất cho tín hiệu để điều khiển và ngược lại VDK gửi tín hiệu máy tính mà hiển thị trên màn hình
Các bác có gắng các lệnh đều phải có chú giải nhé !
Cám ơn những nhà thông thái!
Các bác cho em các hàm trong C hay trong KEIL về giao tiếp máy tính nhé
Các bác ơi giúp em với em giao diện vi điều khiển với máy tính bằng vb.còn vi điều khiển em viết bằng ngôn ngữ c
Vb em viết đơn giản sau:
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "2400,n,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim strf As String
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 50
strf = MSComm1.Input
L.Caption = strf
End Sub
Vi điều khiển em viết như sau:em dùng 89C52
#include<REG52.H>
#include<stdio.h>
void xung()
{
SCON= 0x50;
TMOD= 0x20;
TH1 = 0xF3;
TR1 = 1;
TI = 1;
}
main()
{
int i;
P1=0x00;
xung();
for(;
{
P1=0x01;
printf("CHUNG TOI LA NNUNG CHIEN SI");
} }
Nhưng không hiểu trên máy tính toàn nhận kí tự gì ấy không được như ý nắm và báo nỗi "28", thỉnh thoảng được thì hiển thị kí tự quá nhiều và phụ thuộc vào cái này:Loop Until MSComm1.InBufferCount >= 50
Các bác nào bớt chút thời gian giải thich và khác phục cho em với
Tiện thể cho em mấy chương trình xuất nhập đơn giản trên VB và cả VDK một chương trình mà khi ta bấm 1 phím mà trên VDK các post xuất cho tín hiệu để điều khiển và ngược lại VDK gửi tín hiệu máy tính mà hiển thị trên màn hình
Các bác có gắng các lệnh đều phải có chú giải nhé !
Cám ơn những nhà thông thái!
Các bác cho em các hàm trong C hay trong KEIL về giao tiếp máy tính nhé
Anh Hải Bắc ơi! Cho em hỏi : Em đã dùng đoạn code mà anh post lên về giao tiếp RS232 bằng VC++ nhưng khi biên dịch thì chuơng trình báo lỗi là chưa định nghĩa "COM1" và "COM2". Anh có thể chỉ cho em cách sửa lỗi không ạ?
Em vẫn chưa hiểu là chuơng trình tự nhận ra cổng COM hay là mình phải cấu hình như thế nào cho nó?
Cho em hỏi luôn là trên máy tính nó có ghi cho mình biết cái nào là "COM1" và "COM2" cho mình biết ko?
Em xin cám ơn!!!!!!!!!!!!!!!!!
chào mọi người . mình mới nghiên cứu về pic.
chủ đề giao tiếp này mình thấy cực cực hay & thực tế.
mới tìm hiểu nên lùng bùng quá. có gì nhờ mọi người giúp ( dù câu hỏi ngây thơ nhưng đừng cười nha).
mình tự tin là mình làm được.
" impossible is nothing "
Comment