em làm được rồi .thanks mọi người nhiều
Đúng là bị chỗ ngắt như bác namqn nói
bài này em chỉ test truyền nhận qua mô phỏng thôi. chưa xử lí dữ liệu.
có 1 chú ý nhỏ : nếu trên VB gửi 2 kí tự thì portB đảo trạng thái 2 lần quá nhanh khiến ta không thấy sự thay đổi portB. Em dùng biến COUNT để đém số lần ngắt này.
/////////////////////////////////////////////////////////////////////////////
#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
}
}
////////////////////////////////////////////////////////////////////////////
đây là code VB
////////////////////////////////////////////////////////////////////////////
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
|