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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

小白請教單片機測量兩個脈沖產生前后間隔問題,請大神們指點

[復制鏈接]
跳轉到指定樓層
樓主
大家好,我最近自學51單片機,新手小白一個。我想用89C52實現下面功能:利用單89C52兩個外部中斷測輸入的兩個先后產生的單脈沖發生產間隔,也就是圖中CH1輸入脈沖到CH2輸入脈沖的間隔時間,利用數碼管顯示出來,兩個脈沖的間隔時間大概在0.1ms-1s之間。基本原理是利用定時器定時100us,CH1脈沖輸入后,INT0中斷,啟動定時器,并對產生100us定時次數進行計數,CH2輸入脈沖后,停止定時器,統計計數次數,也就是發生多少個100us,計算出兩個脈沖產生的間隔時間。試了好久也沒成功。請大神們指點,最好有代碼。我是小白一個,在網上找了一些代碼試了試了也沒成功,請大神們幫忙看看,先謝謝大神們。
下面是我改的代碼,但是不能實現,連顯示都不正常
----------------------------
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit P10=P2^4;
sbit P11=P2^5;  //位碼口
sbit P12=P2^6;
sbit P13=P2^7;
unsigned char code Duan[]={
//0x3F,0x06,0x5b,0x4f,0x66,
//0x6D,0x7D,0x07,0x7F,0x6F
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
};         //對應0-9
unsigned char Data_buffer[4]=//{0xff,0xff,0xff,0xff};
               {0,0,0,0}; //存放統計數據,單位為(100us)
uint time=0;
void fenge()  //分割數據,以便于統計較大間隔
{
Data_buffer[0]=time/1000;
Data_buffer[1]=time/100%10;
Data_buffer[2]=time/10%10;
Data_buffer[3]=time/10;
}
void display()  //用于四個數碼管顯示數據,
{
uchar Bit=0;
while(1)
{
  Bit++;
  if(Bit>=4)
   Bit=0;
  P0=Duan[Data_buffer[Bit]];
  switch(Bit)  //開位碼
  {
   case 0:P10=0;break;
   case 1:P10=1;break;
   case 2:P10=2;break;
   case 3:P10=3;break;
  }
}
}
void main()
{
EX0=0;
EA=1;
IT0=0;    //低電平有效
TMOD=0x02;  //設置為自動重載方式
TH0=0x92;   //設置為100us的計數
TL0=0x92;
TR0=0;
while(1)
{
  fenge();
  display();
  time=0;   //當前顯示完畢后,清當前time的值
  EX0=1;   //開啟外部中斷
}
}
void zhongduan1()interrupt 0
{
TF0=1;
if(TF0==1)//100us定時器溢出
{
  time++;//統計兩個脈沖的時間
  TH0=0;
}
  EX0=0;
  EX1=1;
}
void zhongduan2()interrupt 2
{
TR0=0;
EX0=1;
EX1=0;
}

2020-5-30 18-55-49.png (40.31 KB, 下載次數: 77)

2020-5-30 18-55-49.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:18297 發表于 2020-5-31 12:00 | 只看該作者
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
                                                                                                //        0    1    2    3    4     5   6    7    8   9  
uchar code Duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};         //??0-9
uchar code wei[]={1,2,4,8};  //
uchar Data_buffer[4];
uchar disp_num=0;
uint time=0;
uint time_count=0;
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
       for(y=110;y>0;y--);
}
void disp_change(uint data_change)  
{
        Data_buffer[0]=data_change/1000;
        Data_buffer[1]=data_change/100%10;
        Data_buffer[2]=data_change/10%10;
        Data_buffer[3]=data_change%10;
}
void display()  
{
        if(disp_num==0)disp_change(time);
        P1=0;
        P2=wei[disp_num];
        P1=Duan[Data_buffer[disp_num]];
        if(disp_num==3)disp_num=0;
        else disp_num++;       
}
void main()
{
        EX0=0;
        EX1=0;
        EA=1;
        IT0=1;            //
        IT1=1;
        TMOD=0x01;  //
        TH0=0x0;   //100us???
        TL0=0x0;
        TR0=0;
        time=1234;
        EX0=1;
        ET0=1;
        while(1)
        {
                display();
                delay(100);               
        }
}
void zhongduan1()interrupt 0
{
        TR0=1;
        time_count=0;
        EX0=0;
        EX1=1;
}
void zhongduan2()interrupt 2
{
        TR0=0;
        time=TH0*256+TL0-15;
        TH0=0;
        TL0=1;
        EX0=1;
        EX1=0;
}
回復

使用道具 舉報

板凳
ID:18297 發表于 2020-5-31 12:03 | 只看該作者
1、采用的共陽極數碼管,P1是段碼,P2是位選。
2、檢測INT0,INT1的下降沿間隔。輸出數字,100us輸出100,使用定時器0檢測間隔時間。最大檢測65535us
回復

使用道具 舉報

地板
ID:104797 發表于 2020-5-31 21:43 | 只看該作者
zjjhtony 發表于 2020-5-31 12:03
1、采用的共陽極數碼管,P1是段碼,P2是位選。
2、檢測INT0,INT1的下降沿間隔。輸出數字,100us輸出100, ...

你好,謝謝大神的代碼,我學習一下代碼,有幾個問題想請教一下:
1.void zhongduan1()interrupt 0 函數中的time_count=0是作什么用的?
2.void zhongduan2()interrupt 2函數中的TL0=1;是作什么用的?
3.void main()函數中的time=1234;是作什么用的,是測試顯示用的嗎?
4.我想測量1s的時間,應該怎樣做,大神給個思路
再弱弱的問一下:void disp_change(uint data_change) 函數中的data_change是怎樣和time聯系起來
的?
我用proteus仿真了一下,為什么顯示出來的數字是一個一個的跳出來,我應該修改哪里?
問題有點多,請大神諒解。我剛接觸不久,還弄不太明白。謝謝!

2020-5-31 21-23-42.png (20.65 KB, 下載次數: 73)

2020-5-31 21-23-42.png
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线观看免费视频 | 97视频精品| 91就要激情 | 91视频大全| 艹逼网 | 午夜视频一区二区三区 | 欧美福利视频一区 | 成年人在线观看视频 | 久久人人爽人人爽 | 久久一 | 新av在线| 亚洲中字在线 | 91免费视频观看 | 国产乱精品一区二区三区 | 亚洲天堂男人的天堂 | 成人综合久久 | aaaaaaa片毛片免费观看 | 免费看国产精品视频 | 国产免费va| 91成人午夜性a一级毛片 | 国产精品自拍视频网站 | 亚洲欧美一区二区三区视频 | 国产欧美精品一区二区 | www.久久久| 妞干网av | 免费观看成人性生生活片 | 日日做夜夜爽毛片麻豆 | 蜜桃视频在线观看免费视频网站www | 91精品久久久 | 国产电影一区二区三区爱妃记 | 天天操夜夜操 | a黄在线观看 | 欧美日韩国产一区二区三区 | 欧洲毛片 | 综合久久久 | 99在线免费视频 | 欧美一级久久 | 一区二区三区不卡视频 | 九九热这里 | 97久久国产 | 鲁大师一区影视 |