Thông báo

Collapse
No announcement yet.

adc pic 16f887

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

  • adc pic 16f887

    #include "16f887.h"
    #fuses NOWDT,HS,NOPUT,NOPROTECT,BROWNOUT,LVP,NOCPD,NOWRT
    #use delay(Clock = 4000000)
    #device *=16 ADC=10
    int8 temp = 0;
    int8 adc;
    #int_TIMER1
    void TIMER1_isr(void)
    {
    temp++;
    if(temp == 4) //400us = 40% muc cao.
    output_high(PIN_D0);
    else if(temp == 6)
    {
    output_low(PIN_D0); //600us = 60% muc thap.
    temp = 0;
    }
    set_timer1(65335);
    }
    void adc_read(void)
    {
    set_ADC(ADC_internal);
    set_ADC_port(AN0);
    set_ADC_channel(0);
    delay_us(10);
    while(true)
    {
    adc=read_adc();
    output_B(adc);
    #if adc>128
    { output_low(PIN_D1);}

    }
    }
    void main()
    {
    //Khoi tao T1 va ngat.
    setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //T1 dem xung noi, ti le chia 1
    enable_interrupts(INT_TIMER1);
    enable_interrupts(GLOBAL);
    set_timer1(65335); //Thach anh 8 MHz => CK may = 4/8 = 0,5us
    //100us ngat 1 lan = 200xung = 65535 - 65335
    //Thiet lap cac pin xuat nhap
    set_tris_d(0x00);
    adc_read();//PORTD xuat du lieu.
    //----------------------------
    while(1);
    }


    các bác sủa hộ em đoạn code này với , nó cứ sai ở câu lệnh #device *=16 ADC=10

  • #2
    Chuyển câu lệnh device lên sau lệnh include
    Sửa lại setup_adc...,setup_adc_ports...

    Comment


    • #3
      dư thế này bác à:

      #include <16F877a.h>
      #device 16F877*16ADC=8
      #include <def_877a.h>
      #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
      #use delay(clock=4000000)
      //----------------------------------------------------------------------------------------

      Còn fie "def_877a.h" bác copy về rồi save lại thành đuôi .h nhé? ( sau đó để vào thư mục mà bác đang lập trình )
      def_877a.h
      // register definitions

      #define W 0
      #define F 1

      // register files
      #byte INDF =0x00
      #byte TMR0 =0x01
      #byte PCL =0x02
      #byte STATUS =0x03
      #byte FSR =0x04
      #byte PORTA =0x05
      #byte PORTB =0x06
      #byte PORTC =0x07
      #byte PORTD =0x08
      #byte PORTE =0x09

      #byte EEDATA =0x10C
      #byte EEADR =0x10D
      #byte EEDATH =0x10E
      #byte EEADRH =0x10F
      #byte ADCON0 =0x1F
      #byte ADCON1 =0x9F
      #byte ADRESH =0x9F
      #byte ADSESL =0x9F

      #byte PCLATH =0x0a
      #byte INTCON =0x0b
      #byte PIR1 =0x0c
      #byte PIR2 =0x0d
      #byte PIE1 =0x8c
      #byte PIE2 =0x8d

      #byte OPTION_REG =0x81
      #byte TRISA =0x85
      #byte TRISB =0x86
      #byte TRISC =0x87
      #byte TRISD =0x88
      #byte TRISE =0x89

      #byte EECON1 =0x18C
      #byte EECON2 =0x18D

      //DINH NGHIA BIT
      #bit ra5 =0x05.5
      #bit ra4 =0x05.4
      #bit ra3 =0x05.3
      #bit ra2 =0x05.2
      #bit ra1 =0x05.1
      #bit ra0 =0x05.0

      #bit rb7 =0x06.7
      #bit rb6 =0x06.6
      #bit rb5 =0x06.5
      #bit rb4 =0x06.4
      #bit rb3 =0x06.3
      #bit rb2 =0x06.2
      #bit rb1 =0x06.1
      #bit rb0 =0x06.0

      #bit rC7 =0x07.7
      #bit rC6 =0x07.6
      #bit rC5 =0x07.5
      #bit rC4 =0x07.4
      #bit rC3 =0x07.3
      #bit rC2 =0x07.2
      #bit rC1 =0x07.1
      #bit rC0 =0x07.0

      #bit rD7 =0x08.7
      #bit rD6 =0x08.6
      #bit rD5 =0x08.5
      #bit rD4 =0x08.4
      #bit rD3 =0x08.3
      #bit rD2 =0x08.2
      #bit rD1 =0x08.1
      #bit rD0 =0x08.0

      #bit rE2 =0x09.2
      #bit rE1 =0x09.1
      #bit rE0 =0x09.0


      #bit trisa5 =0x85.5
      #bit trisa4 =0x85.4
      #bit trisa3 =0x85.3
      #bit trisa2 =0x85.2
      #bit trisa1 =0x85.1
      #bit trisa0 =0x85.0

      #bit trisb7 =0x86.7
      #bit trisb6 =0x86.6
      #bit trisb5 =0x86.5
      #bit trisb4 =0x86.4
      #bit trisb3 =0x86.3
      #bit trisb2 =0x86.2
      #bit trisb1 =0x86.1
      #bit trisb0 =0x86.0

      #bit trisc7 =0x87.7
      #bit trisc6 =0x87.6
      #bit trisc5 =0x87.5
      #bit trisc4 =0x87.4
      #bit trisc3 =0x87.3
      #bit trisc2 =0x87.2
      #bit trisc1 =0x87.1
      #bit trisc0 =0x87.0

      #bit trisd7 =0x88.7
      #bit trisd6 =0x88.6
      #bit trisd5 =0x88.5
      #bit trisd4 =0x88.4
      #bit trisd3 =0x88.3
      #bit trisd2 =0x88.2
      #bit trisd1 =0x88.1
      #bit trisd0 =0x88.0

      #bit trise2 =0x89.2
      #bit trise1 =0x89.1
      #bit trise0 =0x89.0

      // INTCON Bits for C
      #bit gie = 0x0b.7
      #bit peie = 0x0b.6
      #bit tmr0ie = 0x0b.5
      #bit int0ie = 0x0b.4
      #bit rbie = 0x0b.3
      #bit tmr0if = 0x0b.2
      #bit int0if = 0x0b.1
      #bit rbif = 0x0b.0

      // PIR1 for C
      #bit pspif = 0x0c.7
      #bit adif = 0x0c.6
      #bit rcif = 0x0c.5
      #bit txif = 0x0c.4
      #bit sspif = 0x0c.3
      #bit ccp1if = 0x0c.2
      #bit tmr2if = 0x0c.1
      #bit tmr1if = 0x0c.0

      //PIR2 for C
      #bit cmif = 0x0d.6
      #bit eeif = 0x0d.4
      #bit bclif = 0x0d.3
      #bit ccp2if = 0x0d.0

      // PIE1 for C
      #bit adie = 0x8c.6
      #bit rcie = 0x8c.5
      #bit txie = 0x8c.4
      #bit sspie = 0x8c.3
      #bit ccp1ie = 0x8c.2
      #bit tmr2ie = 0x8c.1
      #bit tmr1ie = 0x8c.0

      //PIE2 for C
      #bit osfie = 0x8d.7
      #bit cmie = 0x8d.6
      #bit eeie = 0x8d.4

      // OPTION Bits
      #bit not_rbpu = 0x81.7
      #bit intedg = 0x81.6
      #bit t0cs = 0x81.5
      #bit t0se = 0x81.4
      #bit psa = 0x81.3
      #bit ps2 = 0x81.2
      #bit ps1 = 0x81.1
      #bit ps0 = 0x81.0

      // EECON1 Bits
      #bit eepgd = 0x18c.7
      #bit free = 0x18C.4
      #bit wrerr = 0x18C.3
      #bit wren = 0x18C.2
      #bit wr = 0x18C.1
      #bit rd = 0x18C.0

      //ADCON0
      #bit CHS0 =0x1F.3
      #bit CHS1 =0x1F.4
      #bit CHS2 =0x1F.5

      Comment


      • #4
        cám ơn bác.hi

        Comment


        • #5
          mà save dưới dạng file text hả bác..tại e mới dùng ccs nên không biết add hàm tư viện bác ạ

          Comment


          • #6
            e sửa thành setup_adc_ports(AN0) thì lại báo lỗi ở AN0 bác sửa hộ em cái ạ

            Comment


            • #7
              Nguyên văn bởi langtu_711 Xem bài viết
              e sửa thành setup_adc_ports(AN0) thì lại báo lỗi ở AN0 bác sửa hộ em cái ạ
              setup_adc_ports(sAN0);
              Đưa thư viện vào chương trình sử dụng
              #include "...."
              #include <...>

              Comment


              • #8
                rõ là em khai báo int8 adc; vậy mà vẫn báo lỗi ở câu lệnh output_B(adc) là sao hả a?

                Comment


                • #9
                  báo lỗi ở giá trị adc không phải là hằng, nhưng biến adc em đã gán bằng giá trị read_adc rồi mà

                  Comment


                  • #10
                    Nguyên văn bởi langtu_711 Xem bài viết
                    mà save dưới dạng file text hả bác..tại e mới dùng ccs nên không biết add hàm tư viện bác ạ
                    bác làm dư thế này:

                    Copy về, rồi lưu vào New Text Document.txt ( hoặc là notepad ) đều dc--->Rồi đổi cái duôi .txt thành .h

                    Comment


                    • #11
                      bác sửa hộ em lỗi adc cái ạ. như em nói ở trên ý

                      Comment


                      • #12
                        Nguyên văn bởi luongthitu Xem bài viết
                        bác làm dư thế này:

                        Copy về, rồi lưu vào New Text Document.txt ( hoặc là notepad ) đều dc--->Rồi đổi cái duôi .txt thành .h
                        Cách này không sai. Tuy nhiên hơi cực. Các bạn có thể dùng cách này đơn giản hơn nếu dùng CCS.
                        Cách dùng dùng ChipEdit của CCS để tạo file header. File header này vẫn dùng được cho các trình dịch C khác.
                        Code:
                        Để tạo file header (*.h) lưu trữ các thanh ghi và các bit trong CCS các bạn làm như sau :
                        1/ Từ trình dịch CCS chọn View\Special Registers => xuất hiện hộp thoại Device Table Editor.
                        2/ Chọn PIC muốn tạo file header ở cột bên trái.
                        3/ Chọn Make Include file => hiện hộp thoại Generate Registers Define
                        4/ Chọn đường dấn lưu file header, xóa MCU_ ở ô Byte Prefix và Bit Prefix, xóa dấu _ ở Add byte name to Prefix, chọn các modul muốn khai báo thanh ghi.
                        5/ Nhấn vào Generate để xuất file header.

                        Comment


                        • #13
                          e làm theo cách bác nhưng vẫn báo lỗi output_B(adc) not constant, hay là do adc ko hoạt động hả bác, có phải chương trình em sai cấu trúc

                          Comment


                          • #14
                            Nguyên văn bởi langtu_711 Xem bài viết
                            e làm theo cách bác nhưng vẫn báo lỗi output_B(adc) not constant, hay là do adc ko hoạt động hả bác, có phải chương trình em sai cấu trúc
                            Sai ở đây :
                            Code:
                            #if adc>128
                            { output_low(PIN_D1);}
                            
                            }
                            Và đây nữa :
                            Code:
                            
                            

                            Comment


                            • #15
                              Nguyên văn bởi langtu_711 Xem bài viết
                              e làm theo cách bác nhưng vẫn báo lỗi output_B(adc) not constant, hay là do adc ko hoạt động hả bác, có phải chương trình em sai cấu trúc
                              Sai ở đây :
                              Code:
                              #if adc>128
                              { output_low(PIN_D1);}
                              
                              }
                              Và đây nữa :
                              Code:
                              while(1);
                              Sửa lại như sau :
                              Code:
                              if (adc>128)
                              { output_low(PIN_D1);}
                              
                              }
                              Và đây nữa :
                              Code:
                              while(true);
                              Dấu # chỉ dùng cho câu lệnh tiền xử lí như #include,#device,#fuses...

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X