2020-02-05 09:03发布
eduhf_123 发表于 2012-6-14 11:49 这个不一定的,要看中断服务程序是怎么写的。 如果中断服务程序中是读完SBUF就清空RI标志并退出,那么就 ...
nydns 发表于 2012-6-14 13:24 void main(void) { InitUART();//初使化串口 while(1) { if(flag==1)//接收到的数据发到电脑PC串口上. { ES=0;//串口中断 关了 flag=0;//标位清0 SendOneByte(a);//把接收到的数据发送到PC机串口上 ES=1;//串口中断 手动打开 } } }void UARTInterrupt(void) interrupt 4 //串口中断号为4 { if(RI) { t[j]=SBUF; //a=t[j];//反回PC串口 j++; if(j >= 64)j=0; RI = 0; //手动清0 退出 flag=1;//标质位等于1,说明接收到数据 } else TI = 0; } 我的代码 那我想产生一次中断接收所有数据.应该如何写呢...
eduhf_123 发表于 2012-6-14 19:47
最多设置5个标签!
void main(void)
{
InitUART();//初使化串口
while(1)
{
if(flag==1)//接收到的数据发到电脑PC串口上.
{
ES=0;//串口中断 关了
flag=0;//标位清0
SendOneByte(a);//把接收到的数据发送到PC机串口上
ES=1;//串口中断 手动打开
}
}
}
void UARTInterrupt(void) interrupt 4 //串口中断号为4
{
if(RI)
{
t[j]=SBUF;
//a=t[j];//反回PC串口
j++;
if(j >= 64)j=0;
RI = 0; //手动清0 退出
flag=1;//标质位等于1,说明接收到数据
}
else
TI = 0;
}
我的代码
那我想产生一次中断接收所有数据.应该如何写呢...
- {
- if(RI)
- {
- unsigned char i = 3;
- do
- {
- t[j++]=SBUF;
- RI = 0;
- if(j >= 64)
- {
- j=0;
- }
- }while(--i);
- flag=1;
- }
- else
- {
- TI = 0;
- }
- }
复制代码while(--i);
这个是 循环3次吧.
我试了一下 一个字节被输出了3次啊.
SBUF长度不固定呢.
buf[j++]=SBUF;
PC串口发送A,1,22(字符型)
那
buf[0]为A
buf[1]为,(豆号)
buf[2]为1
buf[3]为,(豆号)
buf[4]为2
buf[5]为2
现在接收了6个字节的数据在buf[]数组中.但这不是我要的数组
我要的是
buf[0]为A
buf[1]为1
buf[2]为22
应该如何处理好呢?
这个代码咋写啊
一周热门 更多>