![]() |
![]() |
#7 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
từ mô phỏng đến mạch thật sao khó quá, em bí gần tuần nay, mong các anh giúp
bài này hôm trước đã mô phỏng được nhưng làm mạch thực thì chỉ đuọc 1 chiều từ PIC ==> PC còn chiều ngược lại không đươc.
Mình làm theo các bước sau: 1.test truyền nhận VB 2 cách c1: nối chân 2 & 3 lại với nhau -->truyền nhận OK c2 : làm mạch thực max 232 ( chưa nối đến PIC) , nối 2 chân 7 & 8 của max 232 --> truyền nhận OK. ===> kết luận : truyền nhận VB ok. đây là code VB cho 2 cách trên : //////////////////////////////////////////////////////////////////////////// Private Sub Command1_Click() Dim data_send As Variant If Text1.Text = "" Then Exit Sub End If data_send = Text1.Text MSComm1.Output = data_send Text1.Text = "" End Sub Private Sub Command2_Click() Text2.Text = "" End Sub Private Sub Form_Load() If MSComm1.PortOpen = True Then MSComm1.PortOpen = False End If 'dong serial port neu no mo ' cau hinh lai cho serial port MSComm1.CommPort = 5 ' dung port 5 MSComm1.Settings = " 9600 , n , 8 , 1" 'baud = 9600, 8 bit MSComm1.InputLen = 0 ' doc buffer MSComm1.RThreshold = 1 ' neu nhan 1 ki tu don se phat sinh su kien commevents MSComm1.PortOpen = True End Sub Private Sub MSComm1_OnComm() If (MSComm1.CommEvent = comEvReceive) Then Text2.Text = Text2.Text + MSComm1.Input End If End Sub 2. test truyền nhận VB <==> PIC có các bước sau : b1 : mô phỏng proteus( dùng Virtual Verminal để giả lập cổng com) kết quả : truyền nhận VB <==> PIC ok. b2: mạch thực kết quả : .từ PIC lên VB thì được ,nhưng từ VB truyền xuống ko dc .xảy ra ngắt liên tục, biến count (biến đếm số lần ngắt xảy ra) cứ tăng lên dù VB chưa truyền xuống. code VB như trên đây là code CCS: #include <16F877.h> #device *= 16 ADC = 10 // su dung ADC 10 bit , ADC tu 0-1024 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #use delay(clock=4000000,RESTART_WDT) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)//,stream=PC,errors) #use fast_io(b) #byte portb = 0x06 #byte portd = 0x08 //////////////////////// int16 val_adc; int nhan_val; int count ; // biến đếm số lần ngắt xảy ra #INT_rda void ngat_rs232() { portb = ~ portb; /// neu xay ra ngat rs_232 thi dao portb nhan_val = getc(); count++; } ////////////////////////////////////////////////// void main() { set_tris_a ( 0xff ) ; set_tris_b ( 0x00 ) ; set_tris_d (0); enable_interrupts ( INT_rda ) ; // data nhan tu rs 232 da san sang enable_interrupts ( GLOBAL ) ; // cho phep ngat toan cuc ////// cho phep bien doi ad chan RA2 ////////////// setup_adc(adc_clock_internal); setup_adc_ports(all_analog); set_adc_channel(2); delay_ms(10); portb = 0; portd = 0; /////////////////////////////////////////////////// while(1) { Delay_ms(500); val_adc = read_adc(); val_adc = (val_adc >> 2) ; putc(val_adc); putc(nhan_val); portd = count; // số lần ngắt } } Nhận xét : .code VB ok , phần cứng OK , đã mô phỏng được , nhưng mạch thực bị như trên Mình đã bí chỗ này gần tuần nay, vì vậy không thể thực hiện các bước tiếp theo Rất mong mọi người nghiên cứu dùm rồi chỉ hướng xử lí cho mình Thanks a lot |
![]() |
![]() |
|
|