欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于51單片機串口中斷的問題 RI TI寄存器設置

[復制鏈接]
跳轉到指定樓層
樓主
ID:798835 發表于 2020-7-7 09:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大佬好,我是新人
最近學51單片機有一個問題一直困惑著我,就是關于串口中斷函數何時進入的問題,如下面代碼
  1. void Usart() interrupt 4
  2. {
  3.         u8 receiveData;

  4.         receiveData=SBUF;
  5.         RI = 0;
  6.         SBUF=receiveData;
  7.         while(!TI);
  8.         TI=0;
  9. }
復制代碼
上面的串口中斷函數應該是在RI或TI置一的時候進入,上面的中斷函數初次進入是RI=1,但是運行到SBUF=receiveData的時候,此時TI應該置0,等待TI置1,那假如在這個程序中,TI在中斷程序中變成1,那中斷程序是直接運行到末尾還是重新從頭運行,畢竟TI=1觸發了中斷,應該重頭再次運行。


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

使用道具 舉報

沙發
ID:739545 發表于 2020-7-7 16:03 | 只看該作者
當TI=0的時候一直在while(!Ti中循環),當TI接受結束或者置1的時候,直接向下運行,把TI重新復位TI=1,在中斷中運行的時候不會二次觸發中斷,除非有其他優先級更高的中斷進行觸發。
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-7-7 19:28 | 只看該作者
//收到上位機一個字節,MCU硬件自動置RI=1,產生中斷請求。
void Usart() interrupt 4 //CPU響應中斷請求進入中斷
{
        u8 receiveData;       
        receiveData=SBUF;//讀取SBUF寄存器收到的數據
        RI = 0;                     //軟件清RI=0
        SBUF=receiveData;//向上位機發送收到的數據
        while(!TI);      //等待發送完成        硬件置TI=1
        TI=0;                          //軟件清TI=0
}//收、發SBUF寄存器是相同地址的兩個物理寄存器
回復

使用道具 舉報

無效樓層,該帖已經被刪除
5#
ID:797834 發表于 2020-7-7 21:58 | 只看該作者
void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;
        RI = 0;
        SBUF=receiveData;
        while(!TI);
        TI=0;
}

哥,你是電子194還是電子192的,大佬!期末指導指導小弟!哥!!!
回復

使用道具 舉報

6#
ID:795361 發表于 2020-7-8 11:45 來自觸屏版 | 只看該作者
這個肯定從進入中斷開始程序執行,這個是接受到數據之后再發送接收到的數據程序
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表