你说我这么写对不
void ser() interrupt 4
{
RI=0;
b[i]=SBUF;
i++;
if(i==1)
{
IAP_SectorErase(0);
IAP_Program(0,b[1]);
i=0;
}
}
在中断中不要长时间占用CPU,否则,会丢数据或者死机。不知道你这两个函数是否时间很长,如果时间长,就不行
追问大概在100us左右 请问这么写对吗
void ser() interrupt 4
{
if(RI)
{
b[i]=SBUF;
if(i==1)
{
IAP_SectorErase(0);
IAP_Program(0,b[1]);
}
i++;
if(i==2)
{
i=0;
}
RI=0;
}
}
我只想把连续发送的两个字节的第二个字节存下来 你说我这么写对吗
看程序应该是没问题了
追问问题出在
IAP_SectorErase(0);
IAP_Program(0,b[1]);
这两个函数的时间太长了 所以中断不好使了
请问 你这个中断函数是不是只能接收两个字节的数据
num&=0x0f; //开辟16个字节的缓冲区
这句话有什么作用 请赐教
这个缓冲区可以保存16个字节的数据,num&=0x0f的意思是当指针加到15时,再往上又变为0了
追问你那个中断函数是不是可以连续接收16个字节的数据啊??是这样吗
那你说我想连续接收两个字节的数据应该怎么写
#include
unsigned char buf[2],num;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[num]=SBUF;
num++;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
ES=1;
EA=1;
TR=1;
num=0;
while(1)
{
if(num>=2) //如果接受了两个数据
{
num=0;
//插入你的处理程序
}
}
}