单片机串口中断问题
#include<REG51.H>#defineucharunsignedchar#defineuintunsignedintucharcodeSEG7[10]={0x3...
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code ACT[4]={0xfe,0xfd,0xfb,0xf7};
/*************************************************************/
uchar code as[]=" Receving Data:\0";
uchar a=0x30,b;
//****************************************************
void init(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
}
//************************
void delay(uint k)
{
uint data i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++){;}
}
}
//**************************************
void main(void)
{ uchar i;
init();
while(1)
{
P0=SEG7[(a-0x30)/10];
P2=ACT[1];
delay(1);
P0=SEG7[(a-0x30)%10];
P2=ACT[0];
delay(1);
if(RI)
{
RI=0;i=0;
while(as[i]!='\0'){SBUF=as[i];while(!TI);TI=0;i++;}
SBUF=b;while(!TI);TI=0;
EA=1;
}
}
}
//*****************************************
void serial_serve(void) interrupt 4
{
a=SBUF;
b=a;
EA=0;
}
各位大哥:
1. 请问是否RI置1的时候第一时间就入中断服务子程序( void serial_serve(void) interrupt 4 )?
2. 会不会先入了if(RI)中,被清0的?
3. 当执行到主程序时,到
P2=ACT[0];
delay(1);
if(RI)
执行delay(1)之后,如RI不是1时,会否在delay处停留,不然的话,按道理是无限循环的,那么a就狂减0x30。(应该不是,本人菜鸟,看不懂)
4.可不可讲述下程序的主要运行顺序小弟听听………如可以的话小弟会加分…万分感谢………………
5.sbuf其实是不是同一个物理地址?怎样知道它是发送还是接收? 展开
#define uchar unsigned char
#define uint unsigned int
uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code ACT[4]={0xfe,0xfd,0xfb,0xf7};
/*************************************************************/
uchar code as[]=" Receving Data:\0";
uchar a=0x30,b;
//****************************************************
void init(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
}
//************************
void delay(uint k)
{
uint data i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++){;}
}
}
//**************************************
void main(void)
{ uchar i;
init();
while(1)
{
P0=SEG7[(a-0x30)/10];
P2=ACT[1];
delay(1);
P0=SEG7[(a-0x30)%10];
P2=ACT[0];
delay(1);
if(RI)
{
RI=0;i=0;
while(as[i]!='\0'){SBUF=as[i];while(!TI);TI=0;i++;}
SBUF=b;while(!TI);TI=0;
EA=1;
}
}
}
//*****************************************
void serial_serve(void) interrupt 4
{
a=SBUF;
b=a;
EA=0;
}
各位大哥:
1. 请问是否RI置1的时候第一时间就入中断服务子程序( void serial_serve(void) interrupt 4 )?
2. 会不会先入了if(RI)中,被清0的?
3. 当执行到主程序时,到
P2=ACT[0];
delay(1);
if(RI)
执行delay(1)之后,如RI不是1时,会否在delay处停留,不然的话,按道理是无限循环的,那么a就狂减0x30。(应该不是,本人菜鸟,看不懂)
4.可不可讲述下程序的主要运行顺序小弟听听………如可以的话小弟会加分…万分感谢………………
5.sbuf其实是不是同一个物理地址?怎样知道它是发送还是接收? 展开
3个回答
展开全部
执行delay(1)之后,如RI不是1时,会否在delay处停留,不然的话,按道理是无限循环的,那么a就狂减0x30。(应该不是,本人菜鸟,看不懂)
不是的
a-0x30没有对a进行赋值的 也就是减法运算过程的出口并不在a上 这点和汇编不同
不是的
a-0x30没有对a进行赋值的 也就是减法运算过程的出口并不在a上 这点和汇编不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
牛人一个。我根本看不懂。。。大哥。。哪天教教我啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询