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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這個超聲波程序 怎么沒有中斷呀,有時候有,有時候沒有,苦呀!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:299872 發(fā)表于 2018-4-13 00:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
超聲波程序,
程序大概就是這樣的,開始的時候,反復(fù)重啟,反復(fù)重寫,有時候可以正常工作。
后來我想找出原因,現(xiàn)在程序成這樣了,沒一次正常了。
找到的原因是
while(flag==0);
這一句死循環(huán)了,跳不出去!!!!
應(yīng)該是中斷出了什么問題嗎????
或者是10NS那個,計算的問題引起的中斷沒成功???



#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar dat_buffer[2]={0};
uint distime;
uint distance;
bit flag=0;
void delay_ms(uint ms)
{
uint ms1, ms2;
for(ms1=ms; ms1>0; ms1--)
for(ms2=110; ms2>0; ms2--);
}
void delay_us(uint us)
{
while(us--);
}
sbit TX=P3^7;
sbit RX=P3^6 ;
void main()
{
P1=0;P2=0;
IT0=1;
TMOD=0x01;
EA=1;
TX=0;
while(1)
{
TX=1;
delay_us(9);
TX=0;
while(RX==0);
flag=0;
ET0=1;
TH0=0;
TL0=0;
TR0=1;
EX0=1;
while(flag==0);      這一句的時候出問題了!!!!
if(flag==1)
{
distime=dat_buffer[1]*256+dat_buffer[0];
distance=(uint)(distime*0.172/10);
P1=distance%256;
P2=distance/256;
delay_ms(400) ;  
}
else
{
distime=0;
}
}
}
void INT0_() interrupt 0
{
dat_buffer[1]=TH0;
dat_buffer[0]=TL0;
flag=1;
EX0=0;
TR0=0;
}

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

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2018-4-13 01:28 | 只看該作者
程序中的死循環(huán),主可以被中斷打斷的!
中斷中的死循環(huán),主可以被更高級的中斷打斷的!
“沒有中斷”:
1、要查你的中斷源有沒有動作。
2、是不是本身中斷后,死在中斷服務(wù)程序中。無法被下次中斷打斷。
回復(fù)

使用道具 舉報

板凳
ID:299872 發(fā)表于 2018-4-13 02:17 來自觸屏版 | 只看該作者
yzwzfyz 發(fā)表于 2018-4-13 01:28
程序中的死循環(huán),主可以被中斷打斷的!
中斷中的死循環(huán),主可以被更高級的中斷打斷的!
“沒有中斷”:

這程序,有時候可以工作,有時候又不行,今天,我改了幾個參數(shù),就徹底不能運行了,改回去都不行。
回復(fù)

使用道具 舉報

地板
ID:299872 發(fā)表于 2018-4-13 02:18 來自觸屏版 | 只看該作者
yzwzfyz 發(fā)表于 2018-4-13 01:28
程序中的死循環(huán),主可以被中斷打斷的!
中斷中的死循環(huán),主可以被更高級的中斷打斷的!
“沒有中斷”:

根據(jù)我的排除,還沒有進中斷。就死在哪里了!
回復(fù)

使用道具 舉報

5#
ID:299872 發(fā)表于 2018-4-13 02:24 來自觸屏版 | 只看該作者
yzwzfyz 發(fā)表于 2018-4-13 01:28
程序中的死循環(huán),主可以被中斷打斷的!
中斷中的死循環(huán),主可以被更高級的中斷打斷的!
“沒有中斷”:

謝謝,仔細看了一下,你的留言。問題是中斷沒運行???語法錯誤,硬件故障??
回復(fù)

使用道具 舉報

6#
ID:123289 發(fā)表于 2018-4-13 03:33 | 只看該作者
調(diào)試一下,就知道了,很簡單。
讓運行中斷,這是查看一下相關(guān)你所用的中斷寄存器:如TR0、ET0等等是否正常。
回復(fù)

使用道具 舉報

7#
ID:164602 發(fā)表于 2018-4-13 09:59 | 只看該作者
給你一個可以正常工作的,I/O口自己改。
#include"reg51.h"
#include <intrins.h>

sbit RX=P1^1;//連接Echo
sbit TX=P1^0;//連接Trig

#define GPIO_DIG P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

unsigned int  time=0;
unsigned int  timer=0;
unsigned long S=0;
bit flag=0;

unsigned char code DIG_CODE[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char disbuff[4]={0,0,0,0};

void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case(0):
                                LSC=0;LSB=0;LSA=0; break;
                        case(1):
                                LSC=0;LSB=0;LSA=1; break;
                        case(2):
                                LSC=0;LSB=1;LSA=0; break;
                        case(3):
                                LSC=0;LSB=1;LSA=1; break;
                }
                GPIO_DIG=disbuff[i];
                j=20;
                while(j--);       
                GPIO_DIG=0x00;
        }
}

void Conut(void)
{
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
       
        S=(long)(time*0.17);
        if((S>=4000)||flag==1)
        {         
                flag=0;
                disbuff[0]=0x5c;//“o”
                disbuff[1]=0x72;//“r”
                disbuff[2]=0x72;//“r”
                disbuff[3]=0x79;//“E”
        }
        else
        {
                disbuff[3]=DIG_CODE[S%10000/1000];
                disbuff[2]=DIG_CODE[S%1000/100];
                disbuff[1]=DIG_CODE[S%100/10];
                disbuff[0]=DIG_CODE[S%10/1];
        }
}

void zd1() interrupt 1
{
        flag=1;
}

void zd3() interrupt 3
{
        TH1=0xf8;
        TL1=0x30;
        DigDisplay();
        timer++;
        if(timer>=50)
        {
                timer=0;
                TX=1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                TX=0;
        }
}

void  main(  void  )
{  
        TMOD=0x11;
        TH0=0;
        TL0=0;         
        TH1=0xf8;
        TL1=0x30;
        ET0=1;
        ET1=1;
        TR1=1;
        EA=1;
        while(1)
        {
                while(!RX);
                TR0=1;
                while(RX);
                TR0=0;
                Conut();
        }
}

回復(fù)

使用道具 舉報

8#
ID:213173 發(fā)表于 2018-4-13 13:45 | 只看該作者
【Realplay】HC-SR04 超聲波模塊 測距模塊 超聲波 傳感器 送資料.rar (1.67 MB, 下載次數(shù): 8)
回復(fù)

使用道具 舉報

9#
ID:299872 發(fā)表于 2018-4-13 18:10 來自觸屏版 | 只看該作者
這程序吐血的地方是有時候,可以正常運行,有時候又不行!!開始我還懷疑過硬件問題,我買的1.99一個的最小系統(tǒng)板。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产69精品久久99不卡免费版 | 日本精品一区二区三区四区 | 久久久一区二区三区四区 | 久久99精品久久 | 国产精品一区二区福利视频 | 丁香六月伊人 | 国产精品综合一区二区 | www国产成人免费观看视频,深夜成人网 | 自拍视频一区二区三区 | 久草在线高清 | 黄色欧美视频 | 国产激情精品 | 日产久久 | 丁香六月激情 | 99精品久久 | 久久国产成人 | 成人在线视频观看 | 国产成人99久久亚洲综合精品 | 国产精品久久久久久久久久久久久久 | 麻豆久久久久久 | 亚洲天堂色 | 久久大全 | 一区二区三区四区国产 | 午夜日韩 | 中文字幕在线一区二区三区 | 欧美国产日韩一区 | 日本免费在线看 | 欧美激情一区二区三区 | 久久伊人一区 | 日一区二区| 国产毛片av| 日本精品在线观看 | 国产精品揄拍一区二区久久国内亚洲精 | 在线精品一区二区三区 | 免费视频一区 | 国产精品一区久久久久 | 免费欧美视频 | 在线区| 日日摸日日碰夜夜爽2015电影 | 亚洲一二三区在线观看 | 九色视频网站 |