Sunday, February 21, 2016

BÀI 32 : ĐỌC NHIỀU KÊNH ADC PIC16F877A CCS

Về phần lý thuyết các bạn đọc Datasheet hoặc lên mạng tìm hoặc qua bên TUT về PIC16F877A XC8 tìm đọc nha !
- Ảnh mô phỏng protues.

đọc nhiều kênh adc pic16f877a

- Code chương trình,

#include <16F877A.h>
#device ADC=10
#fuses HS, NOWDT, PROTECT
#use delay(clock=20M)
#use fast_io(b)
#use fast_io(c)
static unsigned char So[]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1b, 0x01, 0x09};
unsigned int8 DV, TP;
unsigned int8 Value1, Value2, Value3;
float Temp;
void Hienthi()
{
  TP=Value1%10;
  DV=Value1/10;
  output_c(0x01);
  output_b(So[DV]-0x01);
  delay_ms(1);
  output_c(0x02);
  output_b(So[TP]);
  delay_ms(1);

  TP=Value2%10;

  DV=Value2/10;
  output_c(0x04);
  output_b(So[DV]-0x01);
  delay_ms(1);
  output_c(0x08);
  output_b(So[TP]);
  delay_ms(1);

  TP=Value3%10;

  DV=Value3/10;
  output_c(0x10);
  output_b(So[DV]-0x01);
  delay_ms(1);
  output_c(0x20);
  output_b(So[TP]);
  delay_ms(1);

  output_c(0x00);

  output_b(0xff);
  delay_ms(1);
}
void Doc_ADC()
{
  set_adc_channel(0);//Chon Kenh ADC AN0
  delay_us(20);//Tre toi thieu 20us de gia tri lay mau dung.
  temp=read_adc();
  Value1=(int8)((temp*50)/1023);

  set_adc_channel(1);//Chon Kenh ADC AN1

  delay_us(20);//Tre toi thieu 20us de gia tri lay mau dung.
  temp=read_adc();
  Value2=(int8)((temp*50)/1023);

  set_adc_channel(2);//Chon Kenh ADC AN2

  delay_us(20);//Tre toi thieu 20us de gia tri lay mau dung.
  temp=read_adc();
  Value3=(int8)((temp*50)/1023);
}
void main()
{
  set_tris_b(0x00);
  set_tris_c(0x00);
  setup_adc(ADC_CLOCK_INTERNAL);
  setup_adc_ports(AN0_AN1_AN2_AN3_AN4_AN5);
  while(true)
  {
      Doc_ADC();
      Hienthi();
  }

}
- Link download project Click here

1 comment:

  1. Sao bạn không copy phần lý thuyết qua luôn để anh em tiện đọc, có người chỉ sử dụng CSS thôi không muốn dùng MPLap lại phải qua trang đó tìm đọc nữa.

    ReplyDelete