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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2646|回復: 6
收起左側

51單片機串口的接收,每次都可以接收到,但反應時間很長,有時要等10秒鐘,不知道原因

[復制鏈接]
ID:347721 發表于 2018-8-14 15:59 | 顯示全部樓層 |閱讀模式
上位機發1給單片機時,蜂鳴器以400ms頻率發聲,發2時以200ms頻率,發3時以100ms頻率,發4時關閉蜂鳴器#include<reg52.h>
#define uchar unsigned char
sbit beep=P1^5;
sbit led=P2^0;
uchar a;
uchar t;
uchar i,j;

void init()//初始化
{
        TMOD=0x21;
        SCON=0x50;
        TH1=0xf3;
        TL1=TH1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        PCON=0x00;
        
        EA=1;
        ES=1;
        ET0=1;
        
        TR0=1;
        TR1=1;
        t=0;
}
void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
        if(t==2)
        {
                t=0;
                i++;//每100ms,i加1
                if(i==j)
                {
                        i=0;
                        beep=~beep;
                        led=~led;
                        
                }
        }
        
}
void uart() interrupt 4
{
        
        if(RI)
        {
                RI=0;
                a=SBUF;
        }
        else
                TI=0;
}

void main()
{
        init();
        while(1)
        {
                switch(a)
                {
                        case 0x01:j=4;break;
                        case 0x02:j=2;break;
                        case 0x03:j=1;break;
                        case 0x04:TR0=0;led=1;break;
                }
        }
}

回復

使用道具 舉報

ID:221865 發表于 2018-8-14 19:57 | 顯示全部樓層
會不會是在switch里跑飛了,加個default看看。建議一些變量定義后初始化。
回復

使用道具 舉報

ID:123289 發表于 2018-8-14 23:32 | 顯示全部樓層
你思路不清,建議你畫個框圖看看。
回復

使用道具 舉報

ID:123289 發表于 2018-8-14 23:36 | 顯示全部樓層
例:當前I=3,你收到了一個2,會如何呢?
回復

使用道具 舉報

ID:347721 發表于 2018-8-15 06:45 | 顯示全部樓層
yzwzfyz 發表于 2018-8-14 23:36
例:當前I=3,你收到了一個2,會如何呢?

謝謝,你這樣一說我突然就明白了,就像你說的如果現在i=3,但收到信息后把j改成了2,那i 就肯定已經大于j了,i=j的條件就不會滿足,我把i=j改為i>=j后再測試就沒有問題了
回復

使用道具 舉報

ID:213173 發表于 2018-8-15 07:41 | 顯示全部樓層
你試試
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P1^5;
sbit led=P2^0;
uchar i,a=0;
uint j;
void init()//初始化
{
        PCON=0x00;
        SCON=0x50;
        TMOD=0x21;
        TH1=0xf3;
        TL1=0xf3;
        TH0=0xff;
        TL0=0xff;
        EA=1;
        ES=1;
        ET0=1;       
        TR0=0;
        TR1=1;
}
void timer0() interrupt 1
{
        TH0=(65536-j)/256;
        TL0=(65536-j)%256;
        beep=~beep;
        i++;
        if(i>=250)
        {
                i=0;
                led=~led;
        }
}
void uart() interrupt 4
{        
        RI=0;
        a=SBUF;
        switch(a)
        {
                case 0x01: j=65036;TR0=1;break;
                case 0x02: j=64536;TR0=1;break;
                case 0x03: j=63536;TR0=1;break;
                case 0x04: j=0;TR0=0;led=1;beep=1;break;
                default: break;
        }
}

void main()
{
        init();
        while(1);
}
回復

使用道具 舉報

ID:295874 發表于 2018-8-15 09:15 | 顯示全部樓層
喬陸騰 發表于 2018-8-15 06:45
謝謝,你這樣一說我突然就明白了,就像你說的如果現在i=3,但收到信息后把j改成了2,那i 就肯定已經大于j ...

改為i>=j雖然可以測試通過,但是不一定與你事先約定的時間對的上,建議還是使用i==j來進行判定,只不過每次串口中斷收到一次控制數據j,均將時間計數器i與t執行一次清零操作,使其時間基準歸零一次,可以準確做到你要求的400、200、100ms的要求。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 正在播放国产精品 | 欧美一二三| 成人做爰9片免费看网站 | 欧美日日日日bbbbb视频 | 中文字幕一区二区三区精彩视频 | 久久综合久久综合久久 | 免费欧美 | 青青草国产在线观看 | 成人免费三级电影 | 久久艹av| 91人人视频在线观看 | 精品网 | 国产毛片毛片 | 国产日韩精品视频 | 国产一区高清 | 日本午夜视频 | 日本一区二区三区四区 | 91视视频在线观看入口直接观看 | 久久久精品 | 国产一二三视频在线观看 | 欧美精品一二三区 | 国产成人一区二区三区电影 | 最新国产视频 | 国产一区二区激情视频 | 国产欧美精品一区二区色综合朱莉 | 天堂va在线 | 亚洲一区二区三区视频 | 欧美日韩久久 | 欧美中文字幕一区 | 欧美日韩亚洲国产综合 | 91精品国产综合久久福利软件 | 国产成人精品午夜视频免费 | 一区免费观看 | 久久高清 | 国产一区二区视频在线观看 | 日韩色视频 | 成人福利网 | 91精品亚洲 | 国产精品国产三级国产aⅴ无密码 | 国产精品免费一区二区 | 国产最好的av国产大片 |