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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教STC15單片機串口4的發送數據的程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:899981 發表于 2022-6-27 15:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題,只發一次就不發了。單片機代碼如下:

void serial_port4_initial(){

        S4CON = 0x10;                //8位數據,可變波特率
        S4CON |= 0x40;                //串口4選擇定時器4為波特率發生器
        T4T3M &= 0xDF;                //定時器時鐘12T模式
        T4L = 0xDD;                //設置定時初始值
        T4H = 0xFF;                //設置定時初始值
        T4T3M |= 0x80;                //定時器4開始計時

        IE2 |= 0x10;         //ES4 = 1;
        P_SW2=0x04;         //串口2、3、4的位置
        EA = 1;

}


void send_UART4(uchar dat)
{
         uchar temp = 0;
        

        S4CON = S4CON & 0xfd;  //S4TI = 0;

                S4BUF = dat;
                do
                {
                        temp = S4CON;
                        temp = temp & 0x02;                //temp=S2TI
                }while(temp == 0);
                S4CON = S4CON & 0xfd;            //S4TI = 0;
        

}

主函數:
serial_port4_initial();
        while(1)
        {        


                delayms(500);
        
                send_UART4(0X28);
               
        }        
意思是500毫秒發一次,結果發一次就不發了。  
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:913577 發表于 2022-6-27 16:34 | 只看該作者
看下delayms函數,可能是這個函數的問題
回復

使用道具 舉報

板凳
ID:899981 發表于 2022-6-27 17:37 | 只看該作者
mornbin 發表于 2022-6-27 16:34
看下delayms函數,可能是這個函數的問題

謝謝,是這里問題:
void Usart4() interrupt 18
{
        UART4_INT_DISABLE();       
        if(RI4)
        {
                CLR_RI4();                               //清除RI位
               
        }
        void Usart4() interrupt 18
{
        UART4_INT_DISABLE();       
        if(RI4)
        {
                CLR_RI4();                               //清除RI位
               
        }
        UART4_INT_ENABLE();       
}       
}要把這個加上,但現在是報警告,UART4_INT_ENABLE();UART4_INT_DISABLE();        這兩個警告不管能發,然后定義這兩個就不能發。 //#define                UART4_INT_DISABLE()                IE2 &= ~(1<<4)        //允許串口3中斷
回復

使用道具 舉報

地板
ID:161164 發表于 2022-6-27 17:49 | 只看該作者
定義運算,要加";"號于結尾
#define  UART4_INT_DISABLE() IE2 &= ~(1<<4);        //允許串口3中斷
回復

使用道具 舉報

5#
ID:899981 發表于 2022-6-27 18:52 | 只看該作者
lkc8210 發表于 2022-6-27 17:49
定義運算,要加";"號于結尾
#define  UART4_INT_DISABLE() IE2 &= ~(1

謝謝,加不加這個好像不影響。
回復

使用道具 舉報

6#
ID:401564 發表于 2022-6-27 20:29 | 只看該作者
既然串口用了中斷,就不用再在發送函數中等待發送完成
因為,一旦發送完成,優先是進入中斷的,我不知道中斷觸發后,不清除中斷標志位(S4TI),程序會不會是一直卡在中斷中
個人感覺就是因為S4TI沒有清除,而你又開了中斷,所以,程序是發送一次之后,中斷觸發了,就一直卡在中斷中出不來了
推薦增加一個中斷標志位,然后在中斷觸發后清除
while(busy);busy=1;S4BUF = dat;


busy在串口中斷觸發后,在中斷中清除,并清除S4TI
這樣可以提高中斷的效率
回復

使用道具 舉報

7#
ID:899981 發表于 2022-6-28 10:09 | 只看該作者
本帖最后由 ZHAOBAO511 于 2022-6-28 10:16 編輯
Y_G_G 發表于 2022-6-27 20:29
既然串口用了中斷,就不用再在發送函數中等待發送完成
因為,一旦發送完成,優先是進入中斷的,我不知道中斷觸 ...

謝謝,您這個方法可以,已正常運行,謝謝。
回復

使用道具 舉報

8#
ID:1080312 發表于 2023-5-28 00:06 | 只看該作者
mornbin 發表于 2022-6-27 16:34
看下delayms函數,可能是這個函數的問題

能幫我看看嗎?我用的是串口3進行數據收發。但串口3只能發,外面的數據讀進不了單片機中。
void UART3_Init()
{       
    P_SW2 &= ~S3_S0;                  //切換到 P0.0\P0.1
        S3CON = 0x10;                //8位數據,可變波特率;允許接收
        //S3CON &= 0xBF;                //串口3選擇定時器2為波特率發生器
        T2L = 0xE0;                   //設置定時初始值
        T2H = 0xFE;                   //設置定時初始值
    AUXR = 0x14;       //T2為1T模式, 并啟動定時器2
    IE2 = 0x08;         //使能串口3中斷
    EA = 1;
}

void uart3_inte() interrupt 17
{
   unsigned char num=0;
    //接收
   if(S3CON & 0x02)                   //發送中斷標志S3TI=1
   {
      S3CON &=0xFD;;           //發送中斷標志清零S3TI=0
     
          if (S3CON & 0x01)
      {
        S3CON &=0xFE;        //清除S3TI位
                //R_table[count]=S3BUF;    //busy=0;
                num = S3BUF;
                num++;
                S3BUF = num;                                //返回數值
      }           
   }
}
回復

使用道具 舉報

9#
ID:1080312 發表于 2023-5-28 00:09 | 只看該作者
lkc8210 發表于 2022-6-27 17:49
定義運算,要加";"號于結尾
#define  UART4_INT_DISABLE() IE2 &= ~(1

大佬,我這個用串口3收發數據,但現在只能收,發的單片機讀不進去。現在不知道啥原因?求教
void UART3_Init()
{       
    P_SW2 &= ~S3_S0;                  //切換到 P0.0\P0.1
        S3CON = 0x10;                //8位數據,可變波特率;允許接收
        //S3CON &= 0xBF;                //串口3選擇定時器2為波特率發生器
        T2L = 0xE0;                   //設置定時初始值
        T2H = 0xFE;                   //設置定時初始值
    AUXR = 0x14;       //T2為1T模式, 并啟動定時器2
    IE2 = 0x08;         //使能串口3中斷
    EA = 1;
}

void uart3_inte() interrupt 17
{
   unsigned char num=0;
    //接收
   if(S3CON & 0x02)                   //發送中斷標志S3TI=1
   {
      S3CON &=0xFD;;           //發送中斷標志清零S3TI=0
     
          if (S3CON & 0x01)
      {
        S3CON &=0xFE;        //清除S3TI位
                //R_table[count]=S3BUF;    //busy=0;
                num = S3BUF;
                num++;
                S3BUF = num;                                //返回數值
      }           
   }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品久久人人爱 | 国产一区二区在线免费播放 | 91九色porny首页最多播放 | 国产精品一区二区三区四区 | 欧美一区二区三区在线观看 | 久久久久久高潮国产精品视 | 国产精品中文字幕一区二区三区 | 在线看一区二区 | 美女天天操 | 成人精品 | 精品国产乱码久久久久久影片 | 国产在线精品一区二区 | 天天躁天天操 | 国内精品在线视频 | 国产精品久久久久久久久污网站 | 久久成人国产 | aaa国产大片 | 91精品国产综合久久香蕉922 | 久久高清免费视频 | 国产成人福利 | 黄色成人在线观看 | 365夜爽爽欧美性午夜免费视频 | 国产成人精品一区二 | 在线视频一区二区 | 一区日韩 | 国产欧美精品一区二区色综合朱莉 | 免费在线观看成年人视频 | 日本中文字幕一区 | 色综合美女 | 日日干日日操 | 欧美精品被| 亚洲一区二区久久 | 亚洲精品乱码久久久久v最新版 | 亚洲国产精品久久 | 亚洲国产成人精品久久久国产成人一区 | 免费一区 | 一区二区三区精品视频 | 中日韩欧美一级片 | 少妇精品久久久久久久久久 | 久久99一区二区 | 欧美午夜一区 |