void ComInStr() interrupt 4 //串行口中断 { if(RI) { if (ReceiveCount > 4) //从电脑接收 5 个字符 { ReceiveCount = 0; } ReceiveBuf[ReceiveCount] = SBUF; //用来接收电脑发过来的字符 ReceiveCount++; //串口接收的字符个数 if (ReceiveCount > 4) { ReceiveFlag = 1; //接收标志置位 表示是否接收完了 } RI=0; }//if(RI) }
void timer0(void) interrupt 1 // { TH0 = 0xdc; //重载计数初值 每 3ms 中断一次 (原先是 20ms) TL0 = 0x00; }
void main() { EA = 0; TMOD = 0x21; //定时器1模式1 定时器0模式1 //---------------------------处理串口中断--------------------------------------- SCON = 0x50; //串行口工作方式1, 10 位异步收发,波特率由定时器控制 PCON |= 0x00; TL1 = 0xFA; TH1 = 0xFA; //22.1184M晶振 波特率9600 //---------------------------处理串口中断--------------------------------------- //------------------------------处理中断喂狗------------------------------------ TH0 =0xdc; //预置计数初值,每 5 ms 中断一次 晶振 22.1184 TL0 =0x00; //------------------------------处理中断喂狗------------------------------------ EA = 1 ; //允许中断 ES = 1 ; //允许串行中断 ET0 = 1; //T/C0 开中断(定时器0/计数器0) ET1 = 0; //T/C0 开中断(定时器0/计数器0) TR1=1; //启动定时器1/计数器1 TR0 = 1; //启动定时器0/计数器0 while(1) { ; } }
1: 当上位机向单片机发送数据,假设要发 5 个字节下来 当下位机收到第一个字符(则说明有上位机发数据来了) 如果过了 X 时间还没有收到第2个数据,则说明上位机发送 错误,可以这样理解吗?
各位大哥,在这里是怎么处理的?
2: 上位机 m_comm.SetSettings("4800,n,8,1"); /*串口参数设置*/ (N无校验,E偶校验,O奇校验)
这里的 E偶校验,O奇校验 是什么意思? 是对收到下位机的数据进行效验,还是对上位机将要发出去的数据进行效验 假设下位机发送的数据是: aa[0]='a'; aa[1]='1'; aa[2]='e';
那么如果 m_comm.SetSettings("4800,e,8,1"); /*串口参数设置*/
那是怎么的结果呢? 和 m_comm.SetSettings("4800,n,8,1"); /*串口参数设置*/
有什么不同
3: 当上位机收到 'a' 隔了一段时间还没有收到 '1' 就表示下位机发送数据失败,是这样吗?
各位大哥,这里是怎么处理的啊?
谢谢! |