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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么單片機串口發送之后TI不會自動置位?

[復制鏈接]
跳轉到指定樓層
樓主
ID:323998 發表于 2018-9-20 11:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  求助,我使用的是STC15W408AS單片機,然后現在進行雙機串口通信,一直沒有通信,于是我就進行查詢了,不知道是不是軟件出現問題了。程序如下:


實驗的結果是,一通電,蜂鳴器鳴響一下,然后就一直長鳴了。
那就是TI沒有置位,虛心請教,這是什么原因?


#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;

sbit BEE=P2^0;   //蜂鳴器

void Delay100ms()        
{
        uchar i, j, k;

        _nop_();
        _nop_();
        i = 5;
        j = 52;
        k = 195;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}


void UartInit()   //串口初始化
{
        TMOD=0x20;
        TH1=0xF3;
        TL1=0xF3;
        SCON=0x50;
        PCON=0x80;
        TR1=1;
}


void main(void)
{
         UartInit();
        BEE=1;                                                                                
        Delay1000ms();
        BEE=0;
        Delay1000ms();                                                        //蜂鳴器開機鳴響一下,意味著到了這一步。

                SBUF=0xA0;                                                                //發送數據,稍微延時一下等待檢測。
                Delay100ms();                                                                        
                //if(TI==1)
                        
                while(TI==0)                                                        //如果一直發送成功,那就蜂鳴器長響。 發送成功則關閉
                BEE=1;
                 TI=0;                                                                                
               
                BEE=0;
                while(1);                                                        //卡住它 不讓執行第二次

}





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

使用道具 舉報

沙發
ID:388197 發表于 2018-9-20 12:28 | 只看該作者
總中斷EA 串口中斷ES沒打開,另外SBUF發送后面的那個DELAY可以去掉
回復

使用道具 舉報

板凳
ID:323998 發表于 2018-9-20 13:03 | 只看該作者
cjm82 發表于 2018-9-20 12:28
總中斷EA 串口中斷ES沒打開,另外SBUF發送后面的那個DELAY可以去掉

剛嘗試了一下,按你所說的,我加上ES=1,EA=1,并把那個延時去掉,TI還是沒有自動置位。
回復

使用道具 舉報

地板
ID:398663 發表于 2018-9-20 13:16 | 只看該作者
一般蜂鳴器低電平是啟動。
回復

使用道具 舉報

5#
ID:304235 發表于 2018-9-20 14:14 | 只看該作者
你程序里只有發送的程序沒有接受的程序  接受的程序是在串口中斷ES進行的 也就是說你要在設置好串口波特率之后開啟總中斷EA 串口終端ES  while(TI==0)上面那個延時不需要 直接更while(TI==0)就可以了。
回復

使用道具 舉報

6#
ID:149144 發表于 2018-9-20 15:23 | 只看該作者
先把中斷打開,再看看硬件的連接有沒有錯  R->T    T->R
回復

使用道具 舉報

7#
ID:400565 發表于 2018-9-20 15:41 | 只看該作者
軟件運行起來看這個位有沒有置位啊
回復

使用道具 舉報

8#
ID:388197 發表于 2018-9-20 16:22 | 只看該作者
wauuvs 發表于 2018-9-20 13:03
剛嘗試了一下,按你所說的,我加上ES=1,EA=1,并把那個延時去掉,TI還是沒有自動置位。

我把我自己整理的串口發送的一些函數貼出來,你可以參考下
也可以復制下來直接調用里面的函數,不同的波特率和晶振只需要改下UART.H里面兩個DEFINE后面的數字即可有注釋說明
//----------uart.c文件-------------------------------
//------------------------------------------------------
//-----------------------------------------------------
//****************************************************************************************
#include "uart.h"

char Uart_get_char;

void UartIsr() interrupt 4
{
        RI = 0;
        Uart_get_char = SBUF;           //讀
}

void UartInit()
{
        SCON = 0x50;
        T2L = BRT;                 //波特率設置
        T2H = BRT>>8;
        AUXR = 0x15;
        ES = 1;
        EA = 1;
}

void UartSend(char dat)      //送1個字節
{
        SBUF = dat;
        while(!TI);
        TI = 0;
}

void SendUint(unsigned int value)  //送U16數據
{
        unsigned char valueH = 0;
        unsigned char valueL = 0;
        valueL |= value;
        valueH |= value >> 8;
        UartSend(valueL);
        UartSend(valueH);
       
}

void SendFloat(float_data* float_union)  //送float數據
{
        UartSend(float_union->byte[3]);
        UartSend(float_union->byte[2]);
        UartSend(float_union->byte[1]);
        UartSend(float_union->byte[0]);
}
//***********************************************************************************************
//UART.H----------------------------------------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
//***********************************************************************************************
#ifndef __UART_H_
#define __UART_H_
#include <stc8f.h>
#include <intrins.h>
typedef union                                   //float公用體
{
        float value;
        unsigned char byte[4];
}float_data;

#define FOSC 11059200UL                         //晶振頻率
#define BRT (65536-FOSC/9600/4)                 //波特率設置

void UartInit();
void UartSend(char dat);
void SendUint(unsigned int value);
void UartSendStr(char *p);
void SendFloat(float_data* float_union);

#endif

//---------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//********************************************************************************************************
//這個是100K 3950熱敏電阻經AD轉換發送到串口圖表軟件的程序段,運行完全正常,你可以參考下
        while(1)
        {
                ADC_number = Start_Adc();                                                                                        //讀取AD口的電壓值
                Ohms = ((float)ADC_number/(4096-(float)ADC_number))*1000;                                     //將電壓值轉換成歐姆數
                to_save_float.value = (1/(((log((float)Ohms/100000))/3950)+(1/298.15)))-273.15;                //歐姆數轉攝氏度
                SendFloat(&to_save_float);                                                                                         //串口發送溫度float變量
                Delay100ms();
        }
}
//**********************************************************************************************************
//STC8F.H可以用STC下載軟件里面的頭文件工具導出
回復

使用道具 舉報

9#
ID:387733 發表于 2018-9-21 07:04 | 只看該作者
              while(TI==0)                                   //如果一直發送成功,那就蜂鳴器長響。 發送成功則關閉
這條語句后面缺少“;”,于是沒有循環等待,很快向下運行到死循環,蜂鳴器自然就長鳴了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品色一区二区三区 | 亚洲国产成人精品在线 | 日韩五月天 | 久久国产一区二区 | 丁香婷婷综合激情五月色 | 久久这里只有精品首页 | 日韩在线视频一区二区三区 | 国产精品一区二区三 | 一级黄色片免费在线观看 | 国产欧美一区二区三区久久手机版 | 韩日一区二区三区 | 狠狠撸在线视频 | www.99热.com | 一级毛片在线播放 | 欧美一级淫片免费视频黄 | 国产成人精品久久二区二区91 | 国产99久久 | 色综合天天天天做夜夜夜夜做 | av一级 | aa级毛片毛片免费观看久 | 欧美中文字幕一区 | 台湾佬久久 | 一级黄色大片 | 欧美一二三| 中文字幕在线观看 | 人人干免费| 91.com在线观看| 国产精品一区二区免费看 | 激情五月婷婷综合 | 精品国产乱码久久久 | 国产一区免费 | 久久亚洲精品国产精品紫薇 | 免费在线黄色av | 欧美一区二区三区的 | 97精品超碰一区二区三区 | 国产成人在线视频 | 日韩有码一区 | 成人免费视频网站在线看 | 久久九九色 | 欧美精品欧美精品系列 | 插插宗合网 |