1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標(biāo)題:
單片機(jī)乙機(jī)程序用全局變量i,如何保證剛進(jìn)入中斷時(shí)的i就是0
[打印本頁]
作者:
Carlohy
時(shí)間:
2020-5-4 18:23
標(biāo)題:
單片機(jī)乙機(jī)程序用全局變量i,如何保證剛進(jìn)入中斷時(shí)的i就是0
想問下鏈接中單片機(jī)串口雙機(jī)通信的接收方程序的全局變量問題,甲機(jī)會(huì)發(fā)送9,3,2,4,5,1給乙機(jī),發(fā)送一個(gè)數(shù)等待TI=1后才發(fā)下一個(gè)數(shù)。乙機(jī)程序用全局變量i,如何保證剛進(jìn)入中斷時(shí)的i就是0?如果不是0,甲機(jī)發(fā)來的9就不是存在buffer[0]了,乙機(jī)顯示的順序就會(huì)不對(duì)??而實(shí)際上顯示是正常的??所以我很迷,這里特別用全局變量來做,而不是在顯示函數(shù)和中斷函數(shù)分別定義i,這樣順序才不會(huì)錯(cuò)。。
另外中斷函數(shù)是會(huì)改變?nèi)肿兞康闹蛋桑?br />
作者:
Carlohy
時(shí)間:
2020-5-4 19:06
//程序:ex6_5.c
//功能:乙機(jī)接收程序,采用中斷方式實(shí)現(xiàn)
#include<reg51.h> //包含頭文件reg51.h,定義51單片機(jī)的專用寄存器
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};//定義接收數(shù)據(jù)緩沖區(qū)
unsigned char i; //定義全局變量i
//函數(shù)名:disp
//函數(shù)功能:在6個(gè)LED上顯示buffer中的6個(gè)數(shù)
//入口參數(shù):無
//出口參數(shù):無
void disp()
{
unsigned char w,i,j;
w=0x01; //位碼賦初值
for(i=0;i<6;i++)
{
P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數(shù)組分量的下標(biāo)
P2=~w; // 送反相后的位碼
for(j=0;j<100;j++);// 顯示延時(shí)
w<<=1; // w左移一位
}
}
void main() //主函數(shù)
{
TMOD=0x20; //定時(shí)器T1工作于方式2
TL1=0xf4; //波特率定義
TH1=0xf4;
TR1=1;
SCON=0x40; //定義串行口工作于方式1
REN=1; //接收允許
ES=1; //開串行口中斷
EA=1; //開總中斷允許位
i=0;
while(1)disp();
}
//函數(shù)名:serial
//函數(shù)功能:串行口中斷接收數(shù)據(jù)
//形式參數(shù):無
//返回值:無
void serial()interrupt 4 //串口中斷類型號(hào)為4
{
EA=0; //關(guān)中斷
RI=0; //軟件清除中斷標(biāo)志位
buffer[i]=SBUF; //接收數(shù)據(jù)
i++;
if(i==6)i=0;
EA=1; //開中斷允許位
}
作者:
wulin
時(shí)間:
2020-5-4 21:01
驗(yàn)證數(shù)據(jù)頭正確,否則覆蓋掉。
unsigned char i=0;
bit flag=0;
void UARTInterrupt() interrupt 4
{
RI=0; //接收中斷請(qǐng)求標(biāo)志位清0
buffer[i]=SBUF; //接收到的數(shù)據(jù)串保存在緩存數(shù)組
if(buffer[0]=='9') //驗(yàn)證數(shù)據(jù)頭(起始位)
{
i++;
if(i>=6)
{
flag=1; //接收完成標(biāo)志置1
i=0; //計(jì)數(shù)變量清0
}
}
}
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1