![]() |
![]() |
#6 |
Đệ tử 6 túi
Tham gia ngày: Nov 2008
Nơi Cư Ngụ: Di Linh
Bài gửi: 131
: |
![]() Đú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 |
![]() |
![]() |
|
|