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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2295|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

如何讓單片機(jī)在采集AD信號(hào)時(shí)(ADC是查詢方式),通過(guò)中斷串口控制單片機(jī)1.3和1.5管...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:973635 發(fā)表于 2021-10-20 17:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如何讓單片機(jī)在采集AD信號(hào)時(shí)(ADC是查詢方式),通過(guò)中斷串口控制單片機(jī)1.3和1.5管腳的燈的亮滅。單獨(dú)測(cè)試ADC可以,加入中斷就沒(méi)反應(yīng)了。代碼如下如何讓單片機(jī)在采集AD信號(hào)時(shí)(ADC是查詢方式),通過(guò)中斷串口控制單片機(jī)1.3和1.5管腳的燈的亮滅。單獨(dú)測(cè)試ADC可以,加入中斷就沒(méi)反應(yīng)了。代碼如下
  1. #include <stc15w408as.h>
  2. #include <intrins.h>
  3. #define FOSC    11059200L
  4. #define BAUD    9600

  5. typedef unsigned char BYTE;
  6. typedef unsigned int WORD;

  7. #define     URMD    0           //0:使用定時(shí)器2作為波特率發(fā)生器
  8.                                 //1:使用定時(shí)器1的模式0(16位自動(dòng)重載模式)作為波特率發(fā)生器                                //2:使用定時(shí)器1的模式2(8位自動(dòng)重載模式)作為波特率發(fā)生器                        
  9. sfr ADC_LOW2    =   0xBE;           //ADC低2位結(jié)果

  10. #define ADC_POWER   0x80            //ADC電源控制位
  11. #define ADC_FLAG    0x10            //ADC完成標(biāo)志
  12. #define ADC_START   0x08            //ADC起始控制位
  13. #define ADC_SPEEDLL 0x00            //540個(gè)時(shí)鐘
  14. #define ADC_SPEEDL  0x20            //360個(gè)時(shí)鐘
  15. #define ADC_SPEEDH  0x40            //180個(gè)時(shí)鐘
  16. #define ADC_SPEEDHH 0x60            //90個(gè)時(shí)鐘

  17. sbit addA = P1^3;
  18. sbit addB = P1^5;
  19. BYTE ch = 0;
  20. void InitUart();
  21. void InitADC();
  22. void SendData(BYTE dat);
  23. BYTE GetADCResult(BYTE ch);
  24. void Delay(WORD n);
  25. void ShowResult(BYTE ch);

  26. void main()
  27. {
  28.     InitUart();                     //初始化串口
  29.     InitADC();                      //初始化ADC
  30.     while (1)
  31.     {
  32.              ShowResult(0);              //顯示通道0
  33.     }
  34. }

  35. /*----------------------------發(fā)送ADC結(jié)果到PC----------------------------*/
  36. void ShowResult(BYTE ch)
  37. {
  38. //    SendData(ch);                   //顯示通道號(hào)
  39.     SendData(GetADCResult(ch));     //顯示ADC高8位結(jié)果

  40. //    SendData(ADC_LOW2);           //顯示低2位結(jié)果
  41. }

  42. /*----------------------------讀取ADC結(jié)果----------------------------*/
  43. BYTE GetADCResult(BYTE ch)
  44. {
  45.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  46.     _nop_();                        //等待4個(gè)NOP
  47.     _nop_();
  48.     _nop_();
  49.     _nop_();
  50.     while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成
  51.     ADC_CONTR &= ~ADC_FLAG;         //Close ADC

  52.     return ADC_RES;                 //返回ADC結(jié)果
  53. }

  54. /*----------------------------初始化串口----------------------------*/
  55. void InitUart()
  56. {
  57.     SCON = 0x5a;                //設(shè)置串口為8位可變波特率
  58.     T2L = (65536 - (FOSC/4/BAUD));
  59.     T2H = (65536 - (FOSC/4/BAUD)) >> 8;
  60.     AUXR = 0x14;                //T2為1T模式, 并啟動(dòng)定時(shí)器2
  61.     AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
  62.       EA = 1;
  63.       ES = 1;
  64. }

  65. /*----------------------------初始化ADC----------------------------*/
  66. void InitADC()
  67. {
  68.     P1ASF = 0xff;                   //設(shè)置P1口為AD口
  69.     ADC_RES = 0;                    //清除結(jié)果寄存器
  70.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  71.     Delay(2);                       //ADC上電并延時(shí)
  72. }

  73. /*----------------------------發(fā)送串口數(shù)據(jù)----------------------------*/
  74. void SendData(BYTE dat)
  75. {
  76.     while (!TI);                    //等待前一個(gè)數(shù)據(jù)發(fā)送完成
  77.     TI = 0;                         //清除發(fā)送標(biāo)志
  78.     SBUF = dat;                     //發(fā)送當(dāng)前數(shù)據(jù)
  79. }

  80. /*----------------------------軟件延時(shí)----------------------------*/
  81. void Delay(WORD n)
  82. {
  83.     WORD x;

  84.     while (n--)
  85.     {
  86.         x = 5000;
  87.         while (x--);
  88.     }
  89. }

  90. // 串口中斷處理函數(shù) (串口接收到數(shù)據(jù),發(fā)送數(shù)據(jù)完畢都可以引起串口中斷)
  91. void uart_interrupt(void) interrupt 4         //也叫串行中斷服務(wù)程序
  92. {
  93.     unsigned char recv_data;// 用來(lái)存放接收到的數(shù)據(jù)
  94.    
  95.     if(RI) //接收數(shù)據(jù)(1字節(jié))完畢,RI會(huì)被硬件置1
  96.     {
  97.         RI = 0;                    // 將接收中斷標(biāo)志位 清零(讓串口可以繼續(xù)接收數(shù)據(jù))
  98.         recv_data = SBUF;               //讀取接收到的數(shù)據(jù),并存放到data

  99.         if(recv_data == '1')//如果收到的字符是'0',就讓燈滅
  100.         {
  101. //            ShowResult(0);              //顯示通道4
  102.             addA = 1;
  103.             addB = 0; //  引腳低電平,LED燈1亮
  104.         }
  105.         else if(recv_data == '2')//如果收到的字符是'0',就讓燈滅
  106.         {
  107. //            ShowResult(0);
  108.             addA = 0;
  109.             addB = 1;//  引腳低電平,LED燈2亮
  110.         }
  111.     else if(recv_data == '3')//如果收到的字符是'0',就讓燈滅
  112.         {
  113. //            ShowResult(0);
  114.             addA = 1;
  115.             addB = 1;//  引腳低電平,LED燈3亮
  116.         }
  117.     }
  118.     if(TI)// 發(fā)送數(shù)據(jù)(1字節(jié))完畢
  119.     {
  120.         TI = 0;// 將 發(fā)送中斷標(biāo)志位 清零(讓串口可以繼續(xù)發(fā)送數(shù)據(jù))
  121.     }
  122. }
復(fù)制代碼




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

使用道具 舉報(bào)

沙發(fā)
ID:258566 發(fā)表于 2021-10-20 18:41 | 只看該作者
void SendData(BYTE dat)
{
    while (!TI);                    //等待前一個(gè)數(shù)據(jù)發(fā)送完成
    TI = 0;                         //清除發(fā)送標(biāo)志
    SBUF = dat;                     //發(fā)送當(dāng)前數(shù)據(jù)
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2021-10-20 20:47 | 只看該作者
樓主這個(gè)程序是在STC官方ADC示例的基礎(chǔ)上添加了串口接收中斷函數(shù)。ADC轉(zhuǎn)換結(jié)果通過(guò)串口發(fā)送上位機(jī),并不能通過(guò)串口中斷控制addA和addB亮滅。上位機(jī)必須下發(fā)'1'、'2'、'3'才能使單片機(jī)控制addA和addB亮滅。
回復(fù)

使用道具 舉報(bào)

地板
ID:973635 發(fā)表于 2021-10-20 20:47 | 只看該作者
cccc888 發(fā)表于 2021-10-20 18:41
void SendData(BYTE dat)
{
    while (!TI);                    //等待前一個(gè)數(shù)據(jù)發(fā)送完成

?什么意思呢
回復(fù)

使用道具 舉報(bào)

5#
ID:973635 發(fā)表于 2021-10-20 21:01 | 只看該作者
wulin 發(fā)表于 2021-10-20 20:47
樓主這個(gè)程序是在STC官方ADC示例的基礎(chǔ)上添加了串口接收中斷函數(shù)。ADC轉(zhuǎn)換結(jié)果通過(guò)串口發(fā)送上位機(jī),并不能 ...

對(duì)啊對(duì)啊那我應(yīng)該怎么改鴨,我比較小白
回復(fù)

使用道具 舉報(bào)

6#
ID:123289 發(fā)表于 2021-10-21 13:58 | 只看該作者
35.    while (1)
36.    {
37.             ShowResult(0);              //顯示通道0
38.    }
36,37之間增加一個(gè)標(biāo)記BJ1判斷,當(dāng)BJ1為真時(shí),再做 ShowResult(0),否則不做。理由:
1、當(dāng)數(shù)據(jù)無(wú)變化時(shí),多次顯示同樣的數(shù)據(jù)無(wú)意義。
2、如果數(shù)據(jù)變化未穩(wěn)定,則顯示異常。
3、在需要顯示的時(shí)候(如:ADC有變化了),置位BJ1,是可以辦到的。              
回復(fù)

使用道具 舉報(bào)

7#
ID:123289 發(fā)表于 2021-10-21 14:07 | 只看該作者
58.    while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉(zhuǎn)換完成
如果發(fā)生意外,等不到,則會(huì)死機(jī)。這是替在的危險(xiǎn),而且極不易查出來(lái)。
回復(fù)

使用道具 舉報(bào)

8#
ID:123289 發(fā)表于 2021-10-21 14:11 | 只看該作者
86.void SendData(BYTE dat)
87.{
88.    while (!TI);                    //等待前一個(gè)數(shù)據(jù)發(fā)送完成
89.    TI = 0;                         //清除發(fā)送標(biāo)志
90.    SBUF = dat;                     //發(fā)送當(dāng)前數(shù)據(jù)
程序有死在88句的危險(xiǎn)!
91.}
回復(fù)

使用道具 舉報(bào)

9#
ID:973635 發(fā)表于 2021-10-21 16:26 | 只看該作者
yzwzfyz 發(fā)表于 2021-10-21 14:11
86.void SendData(BYTE dat)
87.{
88.    while (!TI);                    //等待前一個(gè)數(shù)據(jù)發(fā)送完成

為什么燈在打開(kāi)串口的時(shí)候不亮了呢,串口中斷無(wú)法控制1.3和1.5管腳的高低電平
回復(fù)

使用道具 舉報(bào)

10#
ID:973635 發(fā)表于 2021-10-21 16:27 | 只看該作者
yzwzfyz 發(fā)表于 2021-10-21 14:11
86.void SendData(BYTE dat)
87.{
88.    while (!TI);                    //等待前一個(gè)數(shù)據(jù)發(fā)送完成

因?yàn)槲抑坝袉为?dú)用串口中斷控制led燈亮滅的,加了ADC采集就不行了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 777zyz色资源站在线观看 | 99riav国产一区二区三区 | 天天草av | 四虎影视一区二区 | 亚洲精品成人免费 | 亚洲大片 | 久久久久国产精品 | 香蕉一区 | 老外几下就让我高潮了 | 毛片免费观看视频 | 国产中文视频 | 国产在线资源 | 国产成人综合一区二区三区 | 国产精品久久久一区二区三区 | 久久久久久久久久久久一区二区 | 亚洲精品乱码 | 嫩草视频网 | 精品一区二区三区在线播放 | 欧美1—12sexvideos | 日本国产精品视频 | 国产精品国产三级国产aⅴ中文 | 久久久国产一区二区三区 | 国产一区二区精华 | 一区二区三区精品视频 | 夜夜草| 国产精品婷婷 | 成人午夜在线 | 欧美嘿咻 | 国产国产精品 | 成人福利在线观看 | 午夜视频精品 | 亚洲性在线 | 国产日韩欧美综合 | 亚洲精品视频免费看 | 亚洲免费精品 | 亚洲欧美视频一区 | 国产有码| 99久久婷婷国产亚洲终合精品 | avmans最新导航地址 | 久久最新精品视频 | 久久精品亚洲精品国产欧美 |