微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请高手解释以下STC内部adc转换中断服务程序什么意思

请高手解释以下STC内部adc转换中断服务程序什么意思

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>

  2. sfr ADC_CONTR=0xbc;
  3. sfr P1ASF=0x9d;
  4. sfr        ADC_RES=0xbd;
  5. #define ADC_POWER         0x80
  6. #define ADC_FLAG        0x10
  7. #define ADC_START        0x08
  8. #define ADC_SPEEDLL        0x00
  9. #define ADC_SPEEDL        0x20
  10. #define ADC_SPEEDH        0x40
  11. #define ADC_SPEEDHH        0x60
  12. #define ADC_POSITION   1                //AD通道位置0-7
  13. #define NUX_DATA         P0                        //数码管段选
  14. #define NUX_SEG                P2                        //数码管位选
  15. void Delay_ms(unsigned int ms);        //延时函数
  16. void InitADC();                                    //初始化AD功能

  17. unsigned int code Ttable[42][2]={// 热敏电阻的温度值(从2-43摄氏度),2℃对应25.7K;
  18. {2,257},{3,246},{4,236},{5,225},{6,216},
  19. {7,207},{8,198},{9,190},{10,182},{11,174},
  20. {12,167},{13,160},{14,154},{15,148},{16,142},
  21. {17,136},{18,131},{19,126},{20,121},{21,116},
  22. {22,112},{23,107},{24,103},{25,100},{26,96},
  23. {27,92},{28,89},{29,86},{30,82},{31,80},{32,77},
  24. {33,74},{34,71},{35,69},{36,66},{37,64},{38,62},
  25. {39,60},{40,58},{41,56},{42,54},{43,52}};   
  26. unsigned char code TableDATA[13]={
  27. 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D, 0x07, 0x7F, 0x6F/*0-9*/, 0x00/*无*/, 0x02, 0x39};
  28. unsigned char code TableSEG [4]={0xEF,0xDF,0xBF,0x7F};
  29. //数码管位置0-3
  30. unsigned char  show[4];

  31. void Delay_ms(unsigned int ms)
  32. {
  33.         for(;ms>0;ms--);
  34. }

  35. <font color="red">void Adc_isr() interrupt 5
  36. {
  37.         unsigned char i;
  38.         unsigned int m;
  39.         m=ADC_RES;
  40. //计算此时热敏电阻阻值
  41.         m=(100*m)/(255-m);
  42. //计算此时的温度值
  43.         for(i=41;i<42;i--)
  44.         {
  45.                  if(m >= Ttable[i][1] && m < Ttable[i-1][1])
  46.                 {
  47.                         show[0]=(Ttable[i][0]+1)/10;
  48.                         show[1]=(Ttable[i][0]+1)%10;
  49.                         show[2]=11;
  50.                         show[3]=12;
  51.                         break;
  52.                 }                       
  53.         }
  54.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ADC_POSITION;        //重新使能AD转换       
  55. }</font>

  56. void InitADC()
  57. {
  58.         P1ASF=0xff;
  59.         ADC_RES=0;
  60.         ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|1;                                        //使能P11为AD输入
  61.         IE=0xa0;
  62.         Delay_ms(20);
  63. }
  64. main()
  65. {
  66.         unsigned char i,j;
  67.         InitADC();
  68.         while(1)
  69.         {
  70.                 for(j=255;j>0;j--)
  71.                 {
  72.                         for(i=0;i<4;i++)
  73.                         {       
  74.                                 NUX_SEG =TableSEG[3-i];
  75.                                 NUX_DATA =TableDATA[show[i]];
  76.                                 Delay_ms(100);
  77.                                 NUX_DATA =0x00;
  78.                         }
  79.                 }
  80.                        
  81.         }
  82. }

复制代码


补充原理图如下!

stc12c5a60s2


我发现这个论坛没人回帖!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top