本帖最后由 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;
- }
- }
大家帮忙看看我写的有没有什么漏洞或需要改进的地方?
|