久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1990|回復: 2
打印 上一主題 下一主題
收起左側

Stc8h3K單片機ADC結果,串口助手如何打印顯示?

[復制鏈接]
跳轉到指定樓層
樓主
ID:686513 發表于 2022-2-27 18:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 zhth1979 于 2022-2-27 18:52 編輯

#include "adc.h"
#include "delay.h"

typedef unsigned char u8;
typedef unsigned int u16;

unsigned int line_bat_0;                //通道0的ADC結果,送顯示用的
unsigned int line_bat_1;                //通道1的ADC結果,送顯示用的
unsigned int line_bat_2;                //通道2的ADC結果,送顯示用的

unsigned long int ADC_DATA0;        //           ADC0數據
unsigned long int ADC_DATA1;        //           ADC1數據
unsigned long int ADC_DATA2;        //           ADC2數據

u8  count0;          //        ADC通道0轉換次數記錄
u8  count1;          //        ADC通道1轉換次數記錄
u8  count2;          //        ADC通道2轉換次數記錄
u8  ADC_LINE;        //        ADC通道記錄

//ADC口初始化
void STC8ADC_INIT()                         //STC8ADC初始化
{
  P1M0=0x00;
  P1M1=0x07;             //設定P1.4567通道為高阻
         P_SW2|=0X80;    //打開特殊功能寄存器
   ADCTIM=0X3F;    //設置ADC內部時序
   P_SW2&=0X7F;    //關閉特殊功能寄存器
  ADCCFG=0x2f;             //設置ADC的時鐘和轉換結果存放格式
  ADC_CONTR=0x80;    //使能ADC模塊
  ADC_LINE=0x80;     //通道0
  DelayXms(5);      //等待5ms
  ADC_CONTR=ADC_CONTR|0x40;        //啟動ADC
  EADC=1;            //打開ADC中斷開關
}               

void ADC_ISR()interrupt 5
{        
        //ADC_CONTR&=~0x20;
        ADC_CONTR=ADC_CONTR&0xdf;        //清除中斷標志位
//=============================================================================================================
        if(ADC_LINE==0x80)        //選擇通道0
                {  
                if(count0>=100)          //如果通道0轉換次數小于32
                        {        
                          line_bat_0=ADC_DATA0/100;        
                                 ADC_DATA0=0x00;    //ADC0數據清零
                                 count0=0x00;       //通道0轉換次數清零
                        }
                        ADC_DATA0=ADC_DATA0+(ADC_RES*256+ADC_RESL);        //ADC結果處理
                        count0++;            //通道0轉換次數加1
                        ADC_LINE=0x81;       //切換下一通道(通道1)
                        ADC_CONTR=ADC_LINE;   //下一通道值賦給控制寄存器
                }
//====================================================================
else if(ADC_LINE==0x81)      //選擇通道1
                {  
                if(count1>=100)            //如果通道1轉換次數小于32
                        {
                                line_bat_1=ADC_DATA1/100;
                                 ADC_DATA1=0x00;      //ADC1數據清零
                                 count1=0x00;         //通道1轉換次數清零
                        }
                        ADC_DATA1=ADC_DATA1+(ADC_RES*256+ADC_RESL);        //ADC結果處理
                        count1++;                //通道1轉換次數加1
                        ADC_LINE=0x82;           //切換下一通道(通道2)
                        ADC_CONTR=ADC_LINE;      //下一通道值賦給控制寄存器
                }
//=====================================================================
else if(ADC_LINE==0x82)     //選擇通道2
                {  
                if(count2<100)            //如果通道2轉換次數小于32
                        {
                                line_bat_2=ADC_DATA2/100;
                                 ADC_DATA2=0x00;      //ADC2數據清零
                                 count2=0x00;         //通道2轉換次數清零
                        }
                        ADC_DATA2=ADC_DATA2+(ADC_RES*256+ADC_RESL);        //ADC結果處理
                        count2++;              //通道2轉換次數加1
                        ADC_LINE=0x80;         //切換下一通道(通道0)
                        ADC_CONTR=ADC_LINE;    //下一通道值賦給控制寄存器
                }

//=============================================================================================================                                   
        ADC_CONTR=ADC_CONTR|0x40;        //啟動ADC
}
//=========================================================================================



上面是中斷方式獲取的ADC結果,下面是串口打印程序如何修改才能在串口助手里查看ADC結果?
#include  "stc8hxx.h"
#include "adc.h"
#include "intrins.h"


void main()
{
        STC8ADC_INIT();
        
    SCON = 0x50;
    T2L = 0xe8;                                 //65536-11059200/115200/4=0FFE8H
    T2H = 0xff;
    AUXR = 0x15;                                //啟動定時器
    ES = 1;                                     //使能串口中斷
    EA = 1;
   
}


void UART1_Isr() interrupt 4
{
    if (TI)
    {
        TI = 0;                                 //清中斷標志
SBUF = line_bat_0;                                //發送測試數據
    }
    if (RI)
    {
        RI = 0;                                 //清中斷標志

    }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2022-2-27 21:50 | 只看該作者
給你一個思路
  1. #include "stc8hxx.h"
  2. #include "adc.h"
  3. #include "intrins.h"

  4. char line_bat_0_Str[] = {"0000"};
  5. void UartSend(char dat)
  6. {
  7.     while (busy);
  8.     busy = 1;
  9.     SBUF = dat;
  10. }

  11. void UartSendStr(char *p)
  12. {
  13.     while (*p)
  14.     {
  15.         UartSend(*p++);
  16.     }
  17. }
  18. void main()
  19. {
  20.     STC8ADC_INIT();
  21.         
  22.     SCON = 0x50;
  23.     T2L = 0xe8;                                 //65536-11059200/115200/4=0FFE8H
  24.     T2H = 0xff;
  25.     AUXR = 0x15;                                //啟動定時器
  26.     ES = 1;                                     //使能串口中斷
  27.     EA = 1;
  28.         if(line_bat_0)
  29.         {
  30.                 line_bat_0_Str[3] = line_bat_0 % 10 + '0';
  31.                 line_bat_0/= 10;
  32.                 line_bat_0_Str[2] = line_bat_0 % 10 + '0';
  33.                 line_bat_0/= 10;
  34.                 line_bat_0_Str[1] = line_bat_0 % 10 + '0';
  35.                 line_bat_0/= 10;
  36.                 line_bat_0_Str[0] = line_bat_0 % 10 + '0';
  37.                 line_bat_0/= 10;
  38.                 UartSendStr("Line bat 0: "};
  39.                 UartSendStr(line_bat_0_Str};
  40.                 UartSendStr("\r\n"};
  41.         }
  42. }

  43. void UART1_Isr() interrupt 4
  44. {
  45.     if (TI)
  46.     {
  47.         TI = 0;                                 //清中斷標志
  48.                 busy = 0;                     
  49.     }
  50.     if (RI)
  51.     {
  52.         RI = 0;                                 //清中斷標志

  53.     }
  54. }
復制代碼
回復

使用道具 舉報

板凳
ID:213173 發表于 2022-2-28 06:03 | 只看該作者
改這樣試試,未經驗證,自行完善。
  1. #include  "stc8hxx.h"
  2. #include "adc.h"
  3. #include "intrins.h"

  4. typedef unsigned char u8;
  5. typedef unsigned int u16;

  6. unsigned int line_bat_0;                //通道0的ADC結果,送顯示用的
  7. unsigned int line_bat_1;                //通道1的ADC結果,送顯示用的
  8. unsigned int line_bat_2;                //通道2的ADC結果,送顯示用的

  9. unsigned long int ADC_DATA0;        //           ADC0數據
  10. unsigned long int ADC_DATA1;        //           ADC1數據
  11. unsigned long int ADC_DATA2;        //           ADC2數據

  12. u8  count0;          //        ADC通道0轉換次數記錄
  13. u8  count1;          //        ADC通道1轉換次數記錄
  14. u8  count2;          //        ADC通道2轉換次數記錄
  15. u8  ADC_LINE;        //        ADC通道記錄

  16. //ADC口初始化
  17. void STC8ADC_INIT()                         //STC8ADC初始化
  18. {
  19.         P1M0=0x00;
  20.         P1M1=0x07;             //設定P1.4567通道為高阻
  21.         P_SW2|=0X80;    //打開特殊功能寄存器
  22.         ADCTIM=0X3F;    //設置ADC內部時序
  23.         P_SW2&=0X7F;    //關閉特殊功能寄存器
  24.         ADCCFG=0x2f;             //設置ADC的時鐘和轉換結果存放格式
  25.         ADC_CONTR=0x80;    //使能ADC模塊
  26.         ADC_LINE=0x80;     //通道0
  27.         DelayXms(5);      //等待5ms
  28.         ADC_CONTR=ADC_CONTR|0x40;        //啟動ADC
  29.         EADC=1;            //打開ADC中斷開關
  30. }               

  31. void UART1_Isr(unsigned char ADCch,unsigned char ADCcount,unsigned long int ADCadd)
  32. {       
  33.         unsigned char buf[8];
  34.         unsigned char i;
  35.         buf[0]=ADCch&0x0f;
  36.         buf[1]=ADCcount;
  37.         buf[2]=ADCadd>>24;
  38.         buf[3]=ADCadd>>16;
  39.         buf[4]=ADCadd>>8;
  40.         buf[5]=ADCadd;
  41.         for(i=0;i<6;i++)
  42.         {
  43.                 SBUF = buf[i];
  44.                 while(!TI);
  45.                 TI = 0;
  46.         }
  47. }

  48. void main()
  49. {
  50.         STC8ADC_INIT();
  51.         SCON = 0x50;
  52.         T2L = 0xe8;                                 //65536-11059200/115200/4=0FFE8H
  53.         T2H = 0xff;
  54.         AUXR = 0x15;                                //啟動定時器
  55. //        ES = 1;                                     //使能串口中斷
  56.         EA = 1;   
  57.         while(1);
  58. }

  59. void ADC_ISR()interrupt 5
  60. {        
  61.         //ADC_CONTR&=~0x20;
  62.         ADC_CONTR=ADC_CONTR&0xdf;        //清除中斷標志位
  63. //=============================================================================================================
  64.         if(ADC_LINE==0x80)        //選擇通道0
  65.         {  
  66.                 if(count0>=100)          //如果通道0轉換次數小于32
  67.                 {        
  68.                         line_bat_0=ADC_DATA0/100;        
  69.                         ADC_DATA0=0x00;    //ADC0數據清零
  70.                         count0=0x00;       //通道0轉換次數清零
  71.                 }
  72.                 ADC_DATA0=ADC_DATA0+(ADC_RES*256+ADC_RESL);        //ADC結果處理

  73.                 UART1_Isr(ADC_LINE,count0,ADC_DATA0);//串口發送數據

  74.                 count0++;            //通道0轉換次數加1
  75.                 ADC_LINE=0x81;       //切換下一通道(通道1)
  76.                 ADC_CONTR=ADC_LINE;   //下一通道值賦給控制寄存器
  77.         }
  78. //====================================================================
  79.         else if(ADC_LINE==0x81)      //選擇通道1
  80.         {  
  81.                 if(count1>=100)            //如果通道1轉換次數小于32
  82.                 {
  83.                         line_bat_1=ADC_DATA1/100;
  84.                         ADC_DATA1=0x00;      //ADC1數據清零
  85.                         count1=0x00;         //通道1轉換次數清零
  86.                 }
  87.                 ADC_DATA1=ADC_DATA1+(ADC_RES*256+ADC_RESL);        //ADC結果處理

  88.                 UART1_Isr(ADC_LINE,count1,ADC_DATA1);//串口發送數據

  89.                 count1++;                //通道1轉換次數加1
  90.                 ADC_LINE=0x82;           //切換下一通道(通道2)
  91.                 ADC_CONTR=ADC_LINE;      //下一通道值賦給控制寄存器
  92.         }
  93. //=====================================================================
  94.         else if(ADC_LINE==0x82)     //選擇通道2
  95.         {  
  96.                 if(count2<100)            //如果通道2轉換次數小于32
  97.                 {
  98.                         line_bat_2=ADC_DATA2/100;
  99.                         ADC_DATA2=0x00;      //ADC2數據清零
  100.                         count2=0x00;         //通道2轉換次數清零
  101.                 }
  102.                 ADC_DATA2=ADC_DATA2+(ADC_RES*256+ADC_RESL);        //ADC結果處理

  103.                 UART1_Isr(ADC_LINE,count2,ADC_DATA2);//串口發送數據

  104.                 count2++;              //通道2轉換次數加1
  105.                 ADC_LINE=0x80;         //切換下一通道(通道0)
  106.                 ADC_CONTR=ADC_LINE;    //下一通道值賦給控制寄存器
  107.         }
  108. //=============================================================================================================                                   
  109.         ADC_CONTR=ADC_CONTR|0x40;        //啟動ADC
  110. }
  111. //=========================================================================================
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人精品女人久久久 | 国产免费一二三区 | 午夜免费视频 | 成人国产精品免费观看视频 | 国产精品一区二区三级 | 日韩超碰 | 在线视频一区二区三区 | 亚洲成色777777在线观看影院 | 亚洲乱码一区二区三区在线观看 | 超碰成人av | 久久伊 | 免费观看毛片 | 日本一级淫片免费啪啪3 | 成人无遮挡毛片免费看 | 久久久人成影片免费观看 | 亚洲韩国精品 | 久久婷婷色 | 日本高清视频在线播放 | 亚洲不卡av在线 | 欧美影院 | 久久免费看 | 国产一区二区三区免费 | 中文字幕在线网 | 欧美日韩一区二区在线播放 | 欧美国产日本一区 | 视频二区在线观看 | 成人国产精品久久久 | www国产精| 亚洲成人免费 | 欧美综合一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 久久久一区二区三区四区 | 91一区二区 | 亚洲成人激情在线观看 | 成人在线视频免费播放 | 观看毛片 | 国产精彩视频在线观看 | 色性av | www.青娱乐| 久久精品| 国产精品久久久久久久久久久久午夜片 |