欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

搜索

請(qǐng)教使用STC8H1K08單片機(jī)芯片測(cè)頻率問題

查看數(shù): 1153 | 評(píng)論數(shù): 5 | 收藏 2
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2024-12-10 22:22

正文摘要:

使用STC8H1K08芯片,進(jìn)行頻率采集并顯示在數(shù)碼管上,被采集的為霍爾元件產(chǎn)生的方波信號(hào),現(xiàn)在輸出的信號(hào)無法正常顯示在數(shù)碼管上,各位大佬幫我看看哪里不對(duì)。頻率范圍0-300Hz,用示波器能正常顯示方波,霍爾正常產(chǎn)生 ...

回復(fù)

ID:161164 發(fā)表于 2024-12-13 09:46
眼小自然萌 發(fā)表于 2024-12-12 22:40
就是,顯示出來的是正常的頻率,是亂跳的數(shù)字,

看代碼
定時(shí)器1定時(shí)1ms
定時(shí)器0計(jì)數(shù)模式
定時(shí)器1累計(jì)5秒后計(jì)算定時(shí)器0的計(jì)數(shù)
你打開了定時(shí)器0的中斷但又沒有中斷函數(shù)
有沒有可能五秒內(nèi)定時(shí)器0溢出了
結(jié)果程序跑飛了?
ID:1130621 發(fā)表于 2024-12-12 22:40

就是,顯示出來的是正常的頻率,是亂跳的數(shù)字,
ID:161164 發(fā)表于 2024-12-12 15:49
47行或了個(gè)寂
但沒關(guān)系,P35~P37也配置為推挽模式

什么叫"無法正常顯示在數(shù)碼管上"?
ID:1133081 發(fā)表于 2024-12-11 11:09
給你一個(gè)成熟的頻率表電路和程序參考,結(jié)構(gòu)簡單,也可以用于STC8H1K08-20單片機(jī)
數(shù)顯頻率表程序.rar (22.12 KB, 下載次數(shù): 0)





ID:1130621 發(fā)表于 2024-12-10 22:58
  1. #include <reg52.h>
  2. #include<intrins.h>
  3. sfr  P1M0 = 0x92; //P1口IO模式控制寄存器M0
  4. sfr  P1M1 = 0x91; //P1口IO模式控制寄存器M1
  5. sfr  P3M0 = 0xb2; //P3口IO模式控制寄存器M0
  6. sfr  P3M1 = 0xb1; //P3口IO模式控制寄存器M1
  7. sbit DIG1 = P3^5; //位選1
  8. sbit DIG2 = P3^6; //位選2
  9. sbit DIG3 = P3^7; //位選3

  10. bit flag1s = 0; //1s定時(shí)標(biāo)志
  11. bit Dlflag = 0;        //開始計(jì)時(shí)標(biāo)志位
  12. unsigned char T1RH = 0;  //T0重載值的高字節(jié)
  13. unsigned char T1RL = 0;  //T0重載值的低字節(jié)
  14. void  GetFrequency(); //獲取方波脈沖函數(shù)
  15. void ConfigTimer1(unsigned int ms); //配置T1定時(shí)器中斷
  16. unsigned char code LedChar[]={
  17.         0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  18.         0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  19.         };
  20. unsigned char LedBuff[3]={
  21.         0xc0, 0xc0, 0xc0
  22.         };
  23. /*500ms延時(shí)函數(shù)*/
  24. void Delay500ms()                //@24.000MHz
  25. {
  26.         unsigned char i, j, k;

  27.         _nop_();
  28.         _nop_();
  29.         i = 61;
  30.         j = 225;
  31.         k = 62;
  32.         do
  33.         {
  34.                 do
  35.                 {
  36.                         while (--k);
  37.                 } while (--j);
  38.         } while (--i);
  39. }
  40. /** 主函數(shù) **/
  41. void main()
  42. {
  43.     P1M0 = 0x00; //配置P1口為雙向IO
  44.         P1M1 = 0x00;
  45.         P3M0 |= 0x00; //配置P3.5 P3.7 P3.7為雙向IO,其他為高阻輸入
  46.         P3M1 &= 0x1f;

  47.         TMOD &= 0xf0; //清零T0的控制位
  48.     TMOD |= 0x05; //設(shè)置T0為計(jì)數(shù)器  工作模式1 用P3^4/T0進(jìn)行脈沖計(jì)數(shù)
  49.     EA = 1;
  50.         ConfigTimer1(2); //2ms定時(shí)器1中斷

  51.     while (1)
  52.     {
  53.             GetFrequency();
  54.             Delay500ms();
  55.     }
  56.        
  57. }
  58. void  GetFrequency()
  59. {
  60.     unsigned char th1,th2,tl; //用于TH0,TL0值的存放
  61.     unsigned int num,temp2;        //num保存脈沖數(shù),temp2計(jì)算顯示用
  62.         float temp = 0; //浮點(diǎn)數(shù)

  63.     flag1s = 0;
  64.         Dlflag = 1;
  65.         TH0 = 0; //清零TH0準(zhǔn)備計(jì)數(shù)
  66.         TL0 = 0; //清零TL0準(zhǔn)備計(jì)數(shù)
  67.         IT0 = 1; //設(shè)置T0低電平計(jì)數(shù)
  68.         ET0 = 1; //打開T0使能中斷
  69.         TF1 = 1; //進(jìn)入T1中斷
  70.     TR0 = 1; //啟動(dòng)T0開始計(jì)數(shù)
  71.         while(!flag1s)//flag1s標(biāo)記位
  72.         ET0 = 0; //關(guān)閉T0使能中斷
  73.     TR0 = 0; //關(guān)閉T0
  74.         while(1)
  75.         {
  76.            th1 = TH0;        //讀取TH0值
  77.            tl = TL0;        //讀取TL0值
  78.            th2 = TH0;        //再次讀取TH0值          
  79.            if(th1 == th2) //對(duì)比讀取的2次TH0值,確保沒TL0沒進(jìn)位后退出
  80.            {
  81.                      break;
  82.            }
  83.           
  84.         }
  85.         //關(guān)中斷防止計(jì)算出錯(cuò)
  86.         EA = 0;
  87.         num = th1*256 + tl; //計(jì)算脈沖數(shù)
  88.         temp = num;

  89.         if(temp<1000)
  90.         {
  91.            temp2 = temp;
  92.            LedBuff[2] = LedChar[temp2%10];
  93.            LedBuff[1] = LedChar[temp2/10%10];
  94.            LedBuff[0] = LedChar[temp2/100%10];
  95.         }
  96.         else
  97.         {
  98.           temp = temp/10;
  99.           if(temp < 1000)
  100.           {
  101.                   temp2 = temp;
  102.                 LedBuff[2] = LedChar[temp2%10];
  103.             LedBuff[1] = LedChar[temp2/10%10];
  104.             LedBuff[0] = LedChar[temp2/100%10];
  105.                 LedBuff[0] &= 0x7f;
  106.           }
  107.           else
  108.           {
  109.                   temp2 = temp/10;
  110.                 LedBuff[2] = LedChar[temp2%10];
  111.             LedBuff[1] = LedChar[temp2/10%10];
  112.             LedBuff[0] = LedChar[temp2/100%10];
  113.                 LedBuff[1] &= 0x7f;
  114.           }
  115.         }
  116.         EA = 1;
  117.        
  118. }
  119. /* 配置并啟動(dòng)T1,ms-T0定時(shí)時(shí)間 */
  120. void ConfigTimer1(unsigned int ms)
  121. {
  122.     unsigned long tmp;  //臨時(shí)變量
  123.    
  124.     tmp = 24000000 / 12;      //12T定時(shí)器
  125.     tmp = (tmp * ms) / 1000;  //計(jì)算所需的計(jì)數(shù)值
  126.     tmp = 65536 - tmp;        //計(jì)算定時(shí)器重載值
  127.     tmp = tmp;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
  128.     T1RH = (unsigned char)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
  129.     T1RL = (unsigned char)tmp;
  130.     TMOD &= 0x0f;   //清零T1的控制位
  131.     TMOD |= 0x10;   //配置T1為模式1
  132.     TH1 = T1RH;     //加載T0重載值
  133.     TL1 = T1RL;
  134.     ET1 = 1;        //使能T0中斷
  135.     TR1 = 1;        //啟動(dòng)T0
  136. }
  137. /*數(shù)碼管掃描*/
  138. void LedScan()
  139. {
  140.         static unsigned char i = 0;
  141.        
  142.         P1 = 0xff;
  143.         switch(i)
  144.         {
  145.           case 0:  DIG1 = 0; DIG2 = 1; DIG3 = 1; i++; P1 = LedBuff[0]; break;
  146.           case 1:  DIG1 = 1; DIG2 = 0; DIG3 = 1; i++; P1 = LedBuff[1]; break;
  147.           case 2:  DIG1 = 1; DIG2 = 1; DIG3 = 0; i=0; P1 = LedBuff[2]; break;
  148.           default: break;
  149.         }
  150. }
  151. /*定時(shí)器1中斷*/
  152. void InterruptTimer1() interrupt 3
  153. {   
  154.         static unsigned int tc = 0;
  155.         TH1 = T1RH;
  156.         TL1 = T1RL;
  157.                                                                                                                                                                                                               
  158.         LedScan();
  159.         if(Dlflag)
  160.         {
  161.                    tc++;
  162.                 if(tc >= 500)
  163.                 {
  164.                    tc = 0;
  165.                    Dlflag = 0;
  166.                    flag1s = 1;
  167.                 }
  168.         }
  169. }
復(fù)制代碼

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

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

快速回復(fù) 返回頂部 返回列表