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

      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      • afrendly
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi afrendly
        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
        04-12-2025, 01:27
      • nick22
        Trả lời cho Máy điện châm ?
        bởi nick22
        Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
        01-12-2025, 13:23
      Đang tải...
      X