PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

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

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 06-07-2012, 08:43 AM   #1
huunguyen1990
Đệ tử 1 túi
 
Tham gia ngày: Oct 2010
Bài gửi: 13
:
mạch giao tiếp RS232

các anh chị ơi !! các anh chị cho em hỏi là mạch giao tiếp RS232 em tìm trên các diễn đàn thì các chân nối tới Cổng Com và vi điều khiển (Pic16f877a) thì không có cổng Not ở chân 12 và 14 như trong hình em gửi dưới đây !nhưng chương trình em viết và mô phỏng trên Proteus thì phải cho thêm 2 cổng NOT nó mới chạy đúng .Các anh chị giải thích hộ em với a! nếu làm mạch in thì có cần cho thêm 2 cổng NoT vào không ạ!Em dùng MAX232 CPE mua ở trợ trời 6k anh chị ạ !Em xin cảm ơn !

Hình em gui day ạ !
http://www.mediafire.com/imageview.p...c4tdw62yjd86wr
huunguyen1990 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-07-2012, 09:29 AM   #2
hoc_picpicpic
Đệ tử 6 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 127
:
Trích:
Nguyên văn bởi huunguyen1990 View Post
các anh chị ơi !! các anh chị cho em hỏi là mạch giao tiếp RS232 em tìm trên các diễn đàn thì các chân nối tới Cổng Com và vi điều khiển (Pic16f877a) thì không có cổng Not ở chân 12 và 14 như trong hình em gửi dưới đây !nhưng chương trình em viết và mô phỏng trên Proteus thì phải cho thêm 2 cổng NOT nó mới chạy đúng .Các anh chị giải thích hộ em với a! nếu làm mạch in thì có cần cho thêm 2 cổng NoT vào không ạ!Em dùng MAX232 CPE mua ở trợ trời 6k anh chị ạ !Em xin cảm ơn !

Hình em gui day ạ !
http://www.mediafire.com/imageview.p...c4tdw62yjd86wr
mạch thực tế ko cần thêm cổng NOT, chỉ cần 1 con RS232 là đủ. chạy mô phỏng thì bạn lên bỏ con RS232 đi cho đỡ lằng nhằng
hoc_picpicpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-07-2012, 05:49 PM   #3
huunguyen1990
Đệ tử 1 túi
 
Tham gia ngày: Oct 2010
Bài gửi: 13
:
Trích:
Nguyên văn bởi hoc_picpicpic View Post
mạch thực tế ko cần thêm cổng NOT, chỉ cần 1 con RS232 là đủ. chạy mô phỏng thì bạn lên bỏ con RS232 đi cho đỡ lằng nhằng
anh ơi !!! em có test cong COM trên máy tính để bàn bằng phần mềm Terminal thấy cổng COM còn tốt ! Sau đó em lắp các linh kiện như trên hình trên và cắm vào cổng COM ,khi chưa cấp nguồn 5V cho mạch RS232 và chưa nối tắt 2 chân 11,12 trên con Max 232 , em test lại bằng Terminal thì cổng Com vẫn truyền dc !!!Cắm điện cấp nguồn cũng truyền dc như vậy!! Sau đó em rút một dây từ com vào Max232 thì không truyền dc nữa ! em đo 2 chân cắm từ Com vào thì không chập ,!! Vậy nguyên nhân là do làm sao ạ !!! Em sợ hỏng pic nên chưa giám nối vói pic anh ạ !!
huunguyen1990 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-07-2012, 12:36 AM   #4
huunguyen1990
Đệ tử 1 túi
 
Tham gia ngày: Oct 2010
Bài gửi: 13
:
Hiển thị lên PC bằng VB6.0 bị sai số liệu !! Anh chị giúp em với ạ!

Em làm mạch đo nhiệt độ dùng LM35 đang trong giai đoạn mô phỏng ! chương trình đo và hiển thị lên LCD , giao tiếp với PC qua RS232 để hiển thị nhiệt độ trên giao diện VB6.0, khi chạy trương trình hiển thị LCD thì ok rồi ,chỉ có điều là trên giao diện VB 6.0 hiển thị không đúng, em cho in thử một số lên cũng không đúng !! Code em sai chỗ nào anh chị chỉ rùm em với ạ!! thanks anh chị ! .
Code CCS :
......
While (true)
{
adc = read_adc();
nd=adc*500/1023;
LCD_putcmd(0xC0);
Printf(LCD_putchar," t = %f",nd) ;
LCD_putcmd(0xCA);
LCD_putchar("(C)") ;
delay_ms(500);
printf("%f",nd);
}
}
Code VB6.0 :
------------------------------------------------
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 255
MSComm1.PortOpen = True
End Sub
------------------------------------------------
Private Sub MSComm1_OnComm()
Dim n As Integer
If (MSComm1.CommEvent = comEvReceive) Then
n = Asc(MSComm1.Input)
Text1.Text = CDec(n)
End If
End Sub
Hình chương trình em mô phỏng đây ạ!
http://www.mediafire.com/imageview.p...853z6d3073mmom
huunguyen1990 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-07-2012, 09:40 AM   #5
hoc_picpicpic
Đệ tử 6 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 127
:
Trích:
Nguyên văn bởi huunguyen1990 View Post
Em làm mạch đo nhiệt độ dùng LM35 đang trong giai đoạn mô phỏng ! chương trình đo và hiển thị lên LCD , giao tiếp với PC qua RS232 để hiển thị nhiệt độ trên giao diện VB6.0, khi chạy trương trình hiển thị LCD thì ok rồi ,chỉ có điều là trên giao diện VB 6.0 hiển thị không đúng, em cho in thử một số lên cũng không đúng !! Code em sai chỗ nào anh chị chỉ rùm em với ạ!! thanks anh chị ! .
Code CCS :
......
While (true)
{
adc = read_adc();
nd=adc*500/1023;
LCD_putcmd(0xC0);
Printf(LCD_putchar," t = %f",nd) ;
LCD_putcmd(0xCA);
LCD_putchar("(C)") ;
delay_ms(500);
printf("%f",nd);
}
}
Code VB6.0 :
------------------------------------------------
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 255
MSComm1.PortOpen = True
End Sub
------------------------------------------------
Private Sub MSComm1_OnComm()
Dim n As Integer
If (MSComm1.CommEvent = comEvReceive) Then
n = Asc(MSComm1.Input)
Text1.Text = CDec(n)
End If
End Sub
Hình chương trình em mô phỏng đây ạ!
http://www.mediafire.com/imageview.p...853z6d3073mmom


bạn lên thay lệnh: printf("%f",nd); bằng đoạn code sau


x1 = nd/10 | 0x30 ;
x2 = nd%10 | 0x30 ;

putchar(x1);
putchar(x2);
hoc_picpicpic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-11-2012, 03:10 PM   #6
huydungsh
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 10
:
các anh cho em hỏi câu lệnh :
output_high(PIN_C0); //motor direction
output_high(PIN_C3); //brake
trong chương trình sau để làm gì ak!
//file name: using_rs232.c
//using RS232 to get value from A/D converter
//pins connections
// A0: Analog input (from 10K variable resistor)
#include <16f877.h>
#device PIC16F877 *=16 ADC=10 //using 10 bit A/D converter
#use delay(clock=20000000) //we're using a 20 MHz crystal
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
int16 value;
void AD_Init() //initialize A/D converter
{
setup_adc_ports(RA0_RA1_RA3_ANALOG); //set analog input ports: A0,A1,A3
setup_adc(ADC_CLOCK_INTERNAL); //using internal clock
set_adc_channel(0); //input Analog at pin A0
delay_us(10); //sample hold time
}
void main()
{
AD_Init(); //initialize A/D converter
while(1)
{
output_high(PIN_C0); //motor direction
output_high(PIN_C3); //brake
value=read_adc(); //for changing motor speed
printf("A/D value %lu\r", value);
}
}
em thấy trong sơ đồ mạch thì chân RC0,RC3 bỏ trống mà
còn chân RC6,RC7 thì lại được nối với J. sơ đồ mạch như sau:
http://img15.imageshack.us/img15/9497/16f877.png
huydungsh 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à 07:48 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