本帖最后由 bhsdlmj 于 2009-12-15 08:04 编辑
采用仿照MODBUS方法!
编译器用的是keil
把接收到的1帧(帧的长度固定)放到结构体Frame里面(结构体里面的成员都是8字节的)
全局变量 bit Flag_reveivedatamanymany = FALSE;
void main (void)
{
if (Flag_reveivedatamanymany) {
//do something
}
}
void UART_IRQHandler(void) interrupt PI_Order_UART
{
static uint8_t *ptr = 结构体的首字节地址;
static bit pointerValid_OK = FALSE;//指针有效的含义就是指针指向了结构体的内部
if (RI) {
RI = FALSE;
if (定时器停止计数) {
ptr = 结构体的首字节地址;
}
pointerValid_OK = (结构体首字节地址 <= ptr <= 结构体末尾字节地址)
if (pointerValid_OK) {
pointerValid_OK = FALSE;
*ptr = SBUF;
ptr++;
}
装载计数器初值;
启动定时器;
}
else if (TI) {
TI = FALSE;
}
}
void TIM_IRQHandler(void) interrupt PI_Order_TIM
{
if (TF) {
TF = 0;
停止定时器;
Flag_reveivedatamanymany = TRUE;
}
}
大家帮忙看看我写的有没有什么漏洞或需要改进的地方? |