Thông báo

Collapse
No announcement yet.

Giúp code giao tiếp giữa PIC và rs232 với máy tính qua VB6 !!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giúp code giao tiếp giữa PIC và rs232 với máy tính qua VB6 !!

    Hiện tại mình có làm 1 đồ án với đề tài là điều khiển động cơ bằng máy tính qua giao diện Visual Basic 6. Nội dung như sau:
    Phần cứng gồm:
    + 2 con led 7 đoạn để hiển thị tốc độ động cơ
    + 6 nút nhấn gồm có: bắt đầu, ON/OFF, nhanh dần, chậm dần, quay thuận và quay nghịch
    giao diện VB cũng có 6 command button như 6 nút nhấn trên, chỉ thêm 1 command button là Cài đặt động cơ, nút này cho phép nhập tốc độ động cơ và sau đó hiển thị tốc độ trên led 7 đoạn.
    Dưới đây là code C của mình, hok biết sai chổ nào mà nó hok nhận giữ liệu từ máy tính cũng như nút nhấn. Sơ đồ nguyên lý mình kèm theo ở dưới luôn:
    #include <16f877a.h>
    #fuses hs,nowdt,noprotect,nolvp,put // cau hinh cho Pc
    #use delay (clock=4000000)
    #use RS232(baud = 9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
    #use fast_io(b)
    #use fast_io(c)
    #use fast_io(d)
    #use fast_io(e)
    #byte portb = 0x6
    #byte portc = 0x7
    #byte portd = 0x8
    #byte porte = 0x9
    #byte timer11 = 0xE
    #byte timer1h = 0xF
    #byte t1con = 0x10
    #byte intcon =0x0b
    #bit congat=intcon.2
    #bit p0 = t1con.0
    #bit p1 = t1con.1
    #bit p2 = t1con.2
    #bit p3 = t1con.3
    #bit p4 = t1con.4
    #bit p5 = t1con.5
    #bit b0 = portb.0
    #bit b1 = portb.1
    #bit b2 = portb.2
    #bit b3 = portb.3
    #bit b4 = portb.4
    #bit b5 = portb.5
    #bit c0 = portc.0
    #bit c1 = portc.1
    #bit c2 = portc.2
    #bit c3 = portc.3
    #bit c4 = portc.4
    #bit c5 = portc.5
    #bit d1 = portd.1
    #bit d2 = portd.2
    #bit d3 = portd.3
    #bit d4 = portd.4
    #bit d5 = portd.5
    #bit e1 = porte.1
    #bit e2 = porte.2
    Int16 value,speed; //KHAI BIEN TOAN CUC
    Int8 sansang,Hngan,Htram,Hchuc,HDonVi,x,data,tam,i;
    char z;
    #Int_rda //data nhan tu rs232 san sang

    void ngat1()

    {

    z = getc();//nhan du lieu z
    if(z!='a' && z!='b' && z!='c' && z!='d' && z!='e' && z!='f') // z khac a,b,c..
    {

    data= z;
    if(c3 == 0 && e1 ==0)//kiem tra quay thuan va quay nghich
    {
    c3 = 1;
    e1= 0;
    setup_ccp2(ccp_pwm); // xuat xung pwm2 ra chan c1
    set_pwm2_duty(x);//x=m,Th=m*gia tri chia tan
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);// cho chan c2 ve muc thap( dong co quay thuan)
    setup_timer_2(t2_div_by_4,255,1);
    }
    if(c3 == 1 && e1 ==0)//kiem tra nut nhan
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(x);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    }
    if(c3 == 0 && e1 == 1)
    {
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(x);
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    }
    }
    else
    {
    if(z = 'f')
    {
    z=0;
    sansang = !sansang;
    if(sansang ==1)
    e2 = 1;
    else
    {
    e2 = 0;
    c3 = e1 = 0;
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    x = 10;
    while(true);
    }
    }
    }
    }
    #INT_TIMER0 //ngat timer 0

    void ngat()
    {
    value = (timer1h*256)+(timer11%256);
    set_timer0(15280);
    timer11 = 0;
    timer1h = 0;
    p1 = 1;
    p2 = 0;
    p3 = 0;
    p4 = 0;
    p5 = 0;
    p0 = 1;// ON
    congat = 0;
    }

    Void hienthi();

    Void main()

    {
    enable_interrupts(INT_RDA);
    enable_interrupts(INT_TIMER0);
    enable_interrupts(GLOBAL);
    ext_int_edge(L_TO_H);//chon cach lay xung canh len
    set_tris_b(0b111111);
    set_tris_c(0b10000001);
    set_tris_d(0);
    set_tris_e(0b00);
    portb=portc=portd=porte=0;
    setup_timer_0(RTCC_DIV_256| RTCC_INTERNAL);//
    set_timer0(15280);// delay 50ms
    timer11 = 0;
    timer1h = 0;
    p1 = 1;
    p2 = 0;
    p3 = 0;
    p4 = 0;
    p5 = 0;
    p0 = 1; // On
    value = 0;
    sansang = 0;
    tam = 1;
    speed = 20;
    data = 20;
    x = 120;
    while(1)
    {
    speed = (value*20)/400;
    Hchuc = speed/10;
    HDonVi = speed%10;
    putc(Hchuc+48);
    putc(HDonVi+480);

    hienthi();
    if(b0==0)
    {
    do
    {}
    while(b0==0);
    putc('#');
    putc('4');
    sansang=!sansang;
    if(sansang==1)
    e2=1;
    else
    {
    e2=0;
    c3 = e1 = 0;
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    x =10;
    while(true);
    }
    }
    if(sansang==1)
    {
    if(b1==0 || z=='a')
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    x =10;
    while(true);

    delay_ms(500);
    z=0;
    c3=1;
    e1=0;
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(x);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    putc('#');
    putc('1');
    }
    if(b2=0 || z=='b')
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    x =10;
    while(true);

    delay_ms(500);
    z=0;
    c3=0;
    e1=1;
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    putc('#');
    putc('2');
    }
    if(b3==0 ||z=='c')
    {
    z=0;
    c3=e1=0;
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    putc('#');
    putc('3');
    x =10;

    }
    if(b4==0 ||z=='d')
    {
    do
    {
    }
    while(b4==0);

    delay_ms(500);
    if(data>=2)
    data=data-1;
    z= 0;
    }
    if(b5==0 || z=='e')
    {
    do
    {
    }
    while(b5==0);

    delay_ms(50);
    x =10;
    if(data<=34)
    data=data+1;
    z =0;
    }
    if(speed>data && x>=1)
    {
    x=x-1;
    if(c3==1 && e1==0)
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(x);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    }
    if(c3==0 && e1==1)
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(x);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    }
    }
    if(speed<data && x<=254)
    {
    x=x+1;
    if(c3 ==1 &&e1 ==0)
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(x);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(0);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    }
    if(c3 ==0 && e1 ==1)
    {
    setup_ccp2(ccp_pwm);
    set_pwm2_duty(0);
    setup_ccp1(ccp_pwm);
    set_pwm1_duty(x);
    setup_timer_2(t2_div_by_4,255,1);
    while(true);
    }
    }
    }
    }
    }

    Void hienthi()
    {
    For(i=0;i<=2;i++)
    {
    Int ht[10]={192,249,164,176,153,146,130,248,128,144};
    portd=ht[Hchuc];
    c5=0;
    c4=1;

    delay_ms(10);
    portd=ht[HDonVi];
    c5=1;
    c4=0;
    delay_ms(10);
    }
    }
    file sơ đồ nguyên lý: Free Cloud Storage - MediaFire

  • #2
    hok ai giúp được àh ?

    Comment


    • #3
      mắc cười quá - tự bạn viết được bao nhiêu đây câu lệnh bài bản vậy mà ko biết tại sao giao tiếp máy tính / trong khi đó lệnh giao tiếp chỉ có 3 line là xong . trả lời bạn là xem lại công tắc nguồn đã ON chưa kaka
      Đang thất nghiệp 0988-010-486

      Comment

      Về tác giả

      Collapse

      mtoan122 Tìm hiểu thêm về mtoan122

      Bài viết mới nhất

      Collapse

      Đang tải...
      X