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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機乙機程序用全局變量i,如何保證剛進入中斷時的i就是0

[復制鏈接]
跳轉到指定樓層
樓主
ID:744060 發表于 2020-5-4 18:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
想問下鏈接中單片機串口雙機通信的接收方程序的全局變量問題,甲機會發送9,3,2,4,5,1給乙機,發送一個數等待TI=1后才發下一個數。乙機程序用全局變量i,如何保證剛進入中斷時的i就是0?如果不是0,甲機發來的9就不是存在buffer[0]了,乙機顯示的順序就會不對??而實際上顯示是正常的??所以我很迷,這里特別用全局變量來做,而不是在顯示函數和中斷函數分別定義i,這樣順序才不會錯。。
另外中斷函數是會改變全局變量的值吧?


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

使用道具 舉報

沙發
ID:744060 發表于 2020-5-4 19:06 | 只看該作者
//程序:ex6_5.c
//功能:乙機接收程序,采用中斷方式實現
#include<reg51.h>       //包含頭文件reg51.h,定義51單片機的專用寄存器
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                        //定義0~9共陽極顯示字型碼
unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定義接收數據緩沖區
unsigned char i;        //定義全局變量i
//函數名:disp
//函數功能:在6個LED上顯示buffer中的6個數
//入口參數:無
//出口參數:無
void disp()
{
   unsigned char w,i,j;
   w=0x01;              //位碼賦初值
   for(i=0;i<6;i++)
   {
     P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標
     P2=~w;             // 送反相后的位碼
     for(j=0;j<100;j++);// 顯示延時
     w<<=1;                 // w左移一位
   }
}
void main()                //主函數
{       
     TMOD=0x20;         //定時器T1工作于方式2
         TL1=0xf4;      //波特率定義
         TH1=0xf4;
         TR1=1;
     SCON=0x40;         //定義串行口工作于方式1
     REN=1;                         //接收允許
      ES=1;                         //開串行口中斷
      EA=1;                      //開總中斷允許位        
      i=0;
while(1)disp();
}
//函數名:serial
//函數功能:串行口中斷接收數據
//形式參數:無
//返回值:無
void serial()interrupt 4                //串口中斷類型號為4
{  
EA=0;                                        //關中斷
RI=0;                                       //軟件清除中斷標志位
        buffer[i]=SBUF;                 //接收數據
        i++;
    if(i==6)i=0;
EA=1;                                        //開中斷允許位
}
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-5-4 21:01 | 只看該作者
驗證數據頭正確,否則覆蓋掉。
unsigned char i=0;
bit flag=0;
void UARTInterrupt() interrupt 4
{
        RI=0;                                //接收中斷請求標志位清0
        buffer[i]=SBUF;                //接收到的數據串保存在緩存數組
        if(buffer[0]=='9')        //驗證數據頭(起始位)
        {
                i++;
                if(i>=6)
                {
                        flag=1;                        //接收完成標志置1
                        i=0;                        //計數變量清0
                }
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲午夜av| 中文字幕成人在线 | 人妖一区| 在线欧美小视频 | 综合二区 | 色综合久久88色综合天天 | 亚洲高清视频一区二区 | 黄色国产在线视频 | 久久99深爱久久99精品 | 亚洲精品九九 | 国产色片在线 | 国产成人一区二区 | 成人三级影院 | 欧美日韩电影一区 | 久久久91 | 精品国产免费一区二区三区演员表 | 免费黄色在线观看 | www.亚洲一区 | 亚洲国产精品久久久久秋霞不卡 | 久久久久亚洲av毛片大全 | 久久综合一区 | 日韩视频免费看 | 成人久久 | 在线观看亚洲精品视频 | 国产精品久久久久aaaa九色 | av一区二区三区四区 | 精品亚洲一区二区三区四区五区高 | 三区在线 | 国产成人99久久亚洲综合精品 | 亚洲免费精品 | 日韩免费av网站 | 国产女人与拘做受视频 | 亚洲免费在线观看 | 亚洲欧美久久 | www.色53色.com| 亚洲精品在线免费观看视频 | 精品美女 | 99av成人精品国语自产拍 | 狠狠影院 | 亚洲精品aⅴ | 波多野结衣一二三区 |