Thông báo

Collapse
No announcement yet.

adc pic 16f887

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

  • #16
    hiih, ổn rồi bác ợ, thank bác nhiều nhé

    Comment


    • #17
      Khi ổn rồi thì lên post toàn bộ code mẫu lên để người đi sau ko gặp phải.
      Đó cũng là cách trả ơn những người đã giúp mình.

      Comment


      • #18
        ok, em mới tham gia nên bác chỉ bảo cho

        Comment


        • #19
          #include "16f887.h"
          #device 16F877*16ADC=8

          #fuses NOWDT,HS,NOPUT,NOPROTECT,BROWNOUT,LVP,NOCPD,NOWRT

          #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



          #use delay(Clock = 4000000)
          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)
          {
          setup_adc(ADC_CLOCK_DIV_2);
          setup_adc_ports(sAN0);
          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);
          set_tris_b(0xff);
          adc_read();//PORTD xuat du lieu.
          //----------------------------
          while(true);
          }

          Comment


          • #20
            anh cho em hỏi những lệnh này hiểu thế nào ạ :
            setup_adc(ADC_CLOCK_DIV_2);
            và trong lệnh này : set_ADC_channel(0);
            giá trị của channel mình có thể chọn tùy mình phải không ạ hay bị ràng buộc gì không ạ .
            Và cho em hỏi đoạn này luôn ạ :
            set_timer1(65335); //Thach anh 8 MHz => CK may = 4/8 = 0,5us
            //100us ngat 1 lan = 200xung = 65535 - 65335
            - Cách để mình tính toán các giá trị nhập cho timer nha anh.
            Cảm ơn các anh.

            Comment


            • #21
              cái này hình như chưa đúng ạ :
              #include "16f887.h"
              #device 16F877*16ADC=8

              - đang dùng thư viện pic 887 sao lại khai báo device 16F877 ạ.
              - cho em hỏi luôn giá trị đặt cho timer1 là 65335 là vì :
              16 bit là 65536-1 , trừ cho giá trị xung timer là ra giá trị đặt cho timer . Hiểu vậy đúng ko ạ

              Comment


              • #22
                - Cho em hỏi là trong CCS khi cần dùng chân nào đó làm ngõ ra/vào là analog hay digital thì có cần khai báo thanh ghi ANSEL và ANSELH hay không ạ

                Comment


                • #23
                  setup_adc(ADC_clock_div_2) là lệnh chọn xung clock , rồi chia cho 2 , tùy vào ứng dụng mà bạn muốn chia nhỏ tần số,
                  set_ADC_channel(0)là lệnh chọn kênh adc mà bạn muốn, kênh nào cũng được

                  Comment


                  • #24
                    Nguyên văn bởi langtu_711 Xem bài viết
                    setup_adc(ADC_clock_div_2) là lệnh chọn xung clock , rồi chia cho 2 , tùy vào ứng dụng mà bạn muốn chia nhỏ tần số,
                    set_ADC_channel(0)là lệnh chọn kênh adc mà bạn muốn, kênh nào cũng được
                    anh cho em hỏi là :
                    - lập trình pic 887 dùng CCS thì có cần set các thanh ghi ANSEL và ANSEL hay không ạ ? hay cách khác ạ . Vì nếu dùng HTC thì phải set 2 thanh ghi này lên 1 thì là chân analog và 0 là digital anh ạ . Cảm ơn anh .

                    Comment


                    • #25
                      k cần bạn ạ, dùng htc mới cần

                      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