Thông báo

Collapse
No announcement yet.

các bác giúp em ti về pic nha

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

  • các bác giúp em ti về pic nha

    em mới học pic ( 16f877) nên xin các bác giúp đỡ
    chương trình như sau : có 4 cảm biến báo về tiến hiệu analoc ( a0 a1 a2 a3 ) ,
    chuyển đổi adc 10bit , đặt các biến cb1 cb2 cb3 cb4 tuong đương theo thứ tự
    nếu cb1 - cb2 > 2 thì PORTC=0B11111110 ;
    nếu cb2 - cb1 > 2 thì PORTC=0B11111101 ;
    nếu cb3 - cb4 > 2 thì PORTC=0B11111011 ;
    nếu cb4 - cb3 1 > 2 thì PORTC=0B11110111 ; // số 2 là sai số cho phép
    ngược lại thì PORTC=0B01111111 ; // sử dụng thạch anh 12m đi
    không bít là sai chổ nào mà e thay chương trình chạy tào lao quá .



    cort

    #include <16F877a.h>
    #include <def_877a.h>
    #device *=16 adc=10
    #use delay(clock=12000000)
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
    #use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7,st op=1)
    #include <STDDEF.h>
    #include <math.h>


    unsigned long cb1 , cb2 , cb3 , cb4;
    TRISA = 0xff ;
    TRISC = 0B00000000 ;
    ADCON1 = 0x80 ;
    ADCON0 = 0xC1 ;
    void main()
    {
    while (1)
    {
    PORTC=0B11111111 ;
    delay_ms(50) ;
    cb1 = adc_read(0) ;
    delay_ms(100) ;
    cb2 = adc_read(1) ;
    delay_ms(100) ;
    cb3 = adc_read(2) ;
    delay_ms(100) ;
    cb4 = adc_read(3) ;
    delay_ms(1000) ;
    if (( cb1 - cb2 ) > 2) goto dc2qnghich ;
    if (( cb2 - cb1 ) > 2) goto dc2qthuan ;
    if (( cb3 - cb4 ) > 2) goto dc1qnghich ;
    if (( cb4 - cb3 ) > 2) goto dc1qthuan ;
    goto phatlaze ;
    }
    dc2qnghich :
    PORTC=0B11111111;
    delay_ms(50) ;
    cb1 = adc_read(0) ;
    delay_ms(100) ;
    cb2 = adc_read(1) ;
    delay_ms(100) ;
    if (( cb1 - cb2 ) > 2)
    {
    PORTC=0B11111110 ;
    delay_ms(1000) ;
    goto dc2qnghich ;
    }
    goto phatlaze ;

    dc2qthuan :
    PORTC=0B11111111;
    delay_ms(3000) ;
    cb1 = adc_read(0) ;
    delay_ms(100) ;
    cb2 = adc_read(1) ;
    delay_ms(100) ;
    if (( cb2 - cb1 ) > 2)
    {
    PORTC=0B11111101 ;
    delay_ms(3000) ;
    goto dc2qthuan ;
    }
    goto phatlaze ;

    dc1qthuan :
    PORTC=0B11111111;
    delay_ms(3000) ;
    cb3 = adc_read(2) ;
    delay_ms(100) ;
    cb4 = adc_read(3) ;
    delay_ms(100) ;
    if (( cb4 - cb3 ) > 2)
    {
    PORTC=0B11110111 ;
    delay_ms(3000) ;
    goto dc1qthuan ;
    }
    goto phatlaze ;

    dc1qnghich :
    PORTC=0B11111111;
    delay_ms(3000) ;
    cb3 = adc_read(2) ;
    delay_ms(100) ;
    cb4 = adc_read(3) ;
    delay_ms(100) ;
    if (( cb3 - cb4 ) > 2)
    {
    PORTC=0B11111011;
    delay_ms(3000) ;
    goto dc1qnghich ;
    }
    goto phatlaze ;

    phatlaze :
    PORTC=0B11111111;
    delay_ms(3000) ;
    while (1)
    {
    cb1 = adc_read(0) ;
    delay_ms(100) ;
    cb2 = adc_read(1) ;
    delay_ms(100) ;
    cb3 = adc_read(2) ;
    delay_ms(100) ;
    cb4 = adc_read(3) ;
    delay_ms(100) ;
    if (( cb1 - cb2 ) > 2) goto dc2qnghich ;
    if (( cb2 - cb1 ) > 2) goto dc2qthuan ;
    if (( cb3 - cb4 ) > 2) goto dc1qnghich ;
    if (( cb4 - cb3 ) > 2) goto dc1qthuan ;
    PORTC=0B01111111 ;
    delay_ms(3000) ;
    }
    }
    }
    Attached Files

  • #2
    sao không ai giúp gì e hết zay ?

    Comment


    • #3
      Trc hết tstung1991 phải xem lại cách chuyển đổi ADC của pic16f cái đã, tính hiệu Analog nhận vào phải qua chuyển đổi thì mới có thỉ lấy đi so sánh đc cái này trên dd có nhìu lắm kiếm cái là có ngay. và nên viết chtr theo nhìu hàm con đừng viết kiểu nhảy tới nhảy lên như vậy sẽ khó quản lí && dò lổi lắm nhé. Trình dịch là CCS đúng k nếu vậy nó có hổ trợ sẳn cách thiết lặp ADC đó chỉ cần Set trong code là đc.

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X