Yamian

adc.c (16F877A-Showtime)

Mar 25th, 2016 (edited)
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.35 KB | None | 0 0
  1. //chen thu vien
  2. #include"main.h"
  3. void _KhoiTao_ADC(void)
  4. {
  5.     _ThietLapKenh_ADC(AN4_AN3_AN2_AN1_AN0);
  6.     ADFM=1; //dinh dang 10 bit ket qua chuyen doi AD canh phai -> LSB
  7.     ADCON0=0; //khoi dong thanh ghi ADCON0
  8.     ADCS0=1; //chon xung chuyen doi AD tu mach RC trong chip
  9.     ADCS1=1;
  10. }
  11. unsigned int _Read_ADC(char Kenh)
  12. {
  13.     _ChonKenh(Kenh);
  14.     __delay_us(5); //cho ADC thuc hien lay mau
  15.     GODONE=1; //bat dau thuc hien chuyen doi AD
  16.     while(GODONE); //cho ADC thuc hien chuyen doi xong
  17.     //tra ve ket qua ADC sau khi chuyen doi xong
  18.     return(((unsigned int)ADRESH)<<8)|ADRESL; //ghep byte thap va byte cao cua gia tri ADC
  19.    
  20. }
  21. void _ChonKenh(char Kenh)
  22. {
  23.     switch(Kenh)
  24.     {
  25.         case 0:
  26.         {
  27.             CHS0=0; //chon kenh chuyen doi AD la AN0;
  28.             CHS1=0;
  29.             CHS2=0;
  30.             ADON=1; //cho phep ADC hoat dong
  31.             break;
  32.         }
  33.         case 1:
  34.         {
  35.             CHS0=1; //chon kenh chuyen doi AD la AN1;
  36.             CHS1=0;
  37.             CHS2=0;
  38.             ADON=1; //cho phep ADC hoat dong
  39.             break;
  40.         }
  41.         case 2:
  42.         {
  43.             CHS0=0; //chon kenh chuyen doi AD la AN2;
  44.             CHS1=1;
  45.             CHS2=0;
  46.             ADON=1; //cho phep ADC hoat dong
  47.             break;
  48.         }
  49.         case 3:
  50.         {
  51.             CHS0=1; //chon kenh chuyen doi AD la AN3;
  52.             CHS1=1;
  53.             CHS2=0;
  54.             ADON=1; //cho phep ADC hoat dong
  55.             break;
  56.         }
  57.         case 4:
  58.         {
  59.             CHS0=0; //chon kenh chuyen doi AD la AN4;
  60.             CHS1=0;
  61.             CHS2=1;
  62.             ADON=1; //cho phep ADC hoat dong
  63.             break;
  64.         }
  65.         case 5:
  66.         {
  67.             CHS0=1; //chon kenh chuyen doi AD la AN5;
  68.             CHS1=0;
  69.             CHS2=1;
  70.             ADON=1; //cho phep ADC hoat dong
  71.             break;
  72.         }
  73.         case 6:
  74.         {
  75.             CHS0=0; //chon kenh chuyen doi AD la AN6;
  76.             CHS1=1;
  77.             CHS2=1;
  78.             ADON=1; //cho phep ADC hoat dong
  79.             break;
  80.         }
  81.         case 7:
  82.         {
  83.             CHS0=1; //chon kenh chuyen doi AD la AN7;
  84.             CHS1=1;
  85.             CHS2=1;
  86.             ADON=1; //cho phep ADC hoat dong
  87.             break;
  88.         }
  89.         default:break;
  90.     }
  91. }
  92. void _ThietLapKenh_ADC(char config)
  93. {
  94.     switch(config)
  95.     {
  96.         case All_Analog:
  97.         {
  98.             PCFG3=0;
  99.             PCFG2=0;
  100.             PCFG1=0;
  101.             PCFG0=0;
  102.             break;
  103.         }
  104.         case All_Analog_Vref_AN3:
  105.         {
  106.             PCFG3=0;
  107.             PCFG2=0;
  108.             PCFG1=0;
  109.             PCFG0=1;
  110.             break;
  111.         }
  112.         case AN4_AN3_AN2_AN1_AN0:
  113.         {
  114.             PCFG3=0;
  115.             PCFG2=0;
  116.             PCFG1=1;
  117.             PCFG0=0;
  118.             break;
  119.         }
  120.         case AN4_AN2_AN1_AN0_Vref_AN3:
  121.         {
  122.             PCFG3=0;
  123.             PCFG2=0;
  124.             PCFG1=1;
  125.             PCFG0=1;
  126.             break;
  127.         }
  128.         case AN3_AN2_AN1_AN0:
  129.         {
  130.             PCFG3=0;
  131.             PCFG2=1;
  132.             PCFG1=0;
  133.             PCFG0=0;
  134.             break;
  135.         }
  136.         case AN1_AN0_Vref_AN3:
  137.         {
  138.             PCFG3=0;
  139.             PCFG2=1;
  140.             PCFG1=0;
  141.             PCFG0=1;
  142.             break;
  143.         }
  144.         case No_All_Analog:
  145.         {
  146.             PCFG3=0;
  147.             PCFG2=1;
  148.             PCFG1=1;
  149.             PCFG0=1;
  150.             break;
  151.         }
  152.         case All_Analog_Vref_AN3_AN2:
  153.         {
  154.             PCFG3=1;
  155.             PCFG2=0;
  156.             PCFG1=0;
  157.             PCFG0=0;
  158.             break;
  159.         }
  160.         case AN5_AN4_AN3_AN2_AN1_AN0:
  161.         {
  162.             PCFG3=1;
  163.             PCFG2=0;
  164.             PCFG1=0;
  165.             PCFG0=1;
  166.             break;
  167.         }
  168.         case AN5_AN4_AN2_AN1_AN0_Vref_AN3:
  169.         {
  170.             PCFG3=1;
  171.             PCFG2=0;
  172.             PCFG1=1;
  173.             PCFG0=0;
  174.             break;
  175.         }
  176.         case AN5_AN4_AN1_AN0_Vref_AN3_AN2:
  177.         {
  178.             PCFG3=1;
  179.             PCFG2=0;
  180.             PCFG1=1;
  181.             PCFG0=1;
  182.             break;
  183.         }
  184.         case AN4_AN1_AN0_Vref_AN3_AN2:
  185.         {
  186.             PCFG3=1;
  187.             PCFG2=1;
  188.             PCFG1=0;
  189.             PCFG0=0;
  190.             break;
  191.         }
  192.         case AN1_AN0_Vref_AN3_AN2:
  193.         {
  194.             PCFG3=1;
  195.             PCFG2=1;
  196.             PCFG1=0;
  197.             PCFG0=1;
  198.             break;
  199.         }
  200.         case AN0:
  201.         {
  202.             PCFG3=1;
  203.             PCFG2=1;
  204.             PCFG1=1;
  205.             PCFG0=0;
  206.             break;
  207.         }
  208.         case AN0_Vref_AN3_AN2:
  209.         {
  210.             PCFG3=1;
  211.             PCFG2=1;
  212.             PCFG1=1;
  213.             PCFG0=1;
  214.             break;
  215.         }
  216.         default:break;
  217.     }
  218. }
Add Comment
Please, Sign In to add comment