微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第45节:主机的串口收发综合程序框架

第45节:主机的串口收发综合程序框架

时间:11-22 来源:互联网 点击:

  1. riveStep=1;//动态扫描数码管的步骤变量
  2. unsigned char ucWd1Update=1; //窗口1更新显示标志
  3. unsigned char ucWd2Update=0; //窗口2更新显示标志
  4. unsigned char ucWd3Update=0; //窗口3更新显示标志
  5. unsigned char ucWd4Update=0; //窗口4更新显示标志
  6. unsigned char ucWd=1;//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
  7. unsigned intuiSetData1=0;//本程序中需要被设置的参数1
  8. unsigned intuiSetData2=0;//本程序中需要被设置的参数2
  9. unsigned intuiSetData3=0;//本程序中需要被设置的参数3
  10. unsigned intuiSetData4=0;//本程序中需要被设置的参数4
  11. unsigned char ucTemp1=0;//中间过渡变量
  12. unsigned char ucTemp2=0;//中间过渡变量
  13. unsigned char ucTemp3=0;//中间过渡变量
  14. unsigned char ucTemp4=0;//中间过渡变量
  15. //根据原理图得出的共阴数码管字模表
  16. code unsigned char dig_table[]=
  17. {
  18. 0x3f,//0 序号0
  19. 0x06,//1 序号1
  20. 0x5b,//2 序号2
  21. 0x4f,//3 序号3
  22. 0x66,//4 序号4
  23. 0x6d,//5 序号5
  24. 0x7d,//6 序号6
  25. 0x07,//7 序号7
  26. 0x7f,//8 序号8
  27. 0x6f,//9 序号9
  28. 0x00,//无 序号10
  29. 0x40,//- 序号11
  30. 0x73,//P 序号12
  31. };
  32. void main()
  33. {
  34. initial_myself();
  35. delay_long(100);
  36. initial_peripheral();
  37. while(1)
  38. {
  39. key_service(); //按键服务的应用程序
  40. usart_service();//串口接收服务程序
  41. communication_service(); //一发一收的通讯服务程序
  42. display_service(); //显示的窗口菜单服务程序
  43. status_service();//状态显示的应用程序
  44. }
  45. }
  46. void communication_service(void) //一发一收的通讯服务程序
  47. {
  48. unsigned int i;
  49. if(ucStatus==1)//处于正在通讯的过程中
  50. {
  51. switch(ucSendStep)
  52. {
  53. case 0: //通讯过程0发送一串数据
  54. switch(ucSendTotal)//根据当前已经发送到第几条数据来决定发送哪些参数
  55. {
  56. case 0: //发送参数1
  57. ucSendregBuf[0]=0xeb; //把准备发送的数据放入发送缓冲区
  58. ucSendregBuf[1]=0x00;
  59. ucSendregBuf[2]=0x55;
  60. ucSendregBuf[3]=0x01; //代表发送参数1
  61. ucSendregBuf[4]=0x00;
  62. ucSendregBuf[5]=0x02; //代表发送2个字节的有效数据
  63. ucSendregBuf[6]=uiSetData1>>8;//把int类型的参数分解成两个字节的数据
  64. ucSendregBuf[7]=uiSetData1;
  65. break;
  66. case 1://发送参数2
  67. ucSendregBuf[0]=0xeb; //把准备发送的数据放入发送缓冲区
  68. ucSendregBuf[1]=0x00;
  69. ucSendregBuf[2]=0x55;
  70. ucSendregBuf[3]=0x02; //代表发送参数2
  71. ucSendregBuf[4]=0x00;
  72. ucSendregBuf[5]=0x02; //代表发送2个字节的有效数据
  73. ucSendregBuf[6]=uiSetData2>>8;//把int类型的参数分解成两个字节的数据
  74. ucSendregBuf[7]=uiSetData2;
  75. break;
  76. case 2://发送参数3
  77. ucSendregBuf[0]=0xeb; //把准备发送的数据放入发送缓冲区
  78. ucSendregBuf[1]=0x00;
  79. ucSendregBuf[2]=0x55;
  80. ucSendregBuf[3]=0x03; //代表发送参数3
  81. ucSendregBuf[4]=0x00;
  82. ucSendregBuf[5]=0x02; //代表发送2个字节的有效数据
  83. ucSendregBuf[6]=uiSetData3>>8;//把int类型的参数分解成两个字节的数据
  84. ucSendregBuf[7]=uiSetData3;
  85. break;
  86. case 3://发送参数4
  87. ucSendregBuf[0]=0xeb; //把准备发送的数据放入发送缓冲区
  88. ucSendregBuf[1]=0x00;
  89. ucSendregBuf[2]=0x55;
  90. ucSendregBuf[3]=0x04; //代表发送参数4
  91. ucSendregBuf[4]=0x00;
  92. ucSendregBuf[5]=0x02; //代表发送2个字节的有效数据
  93. ucSendregBuf[6]=uiSetData4>>8;//把int类型的参数分解成两个字节的数据
  94. ucSendregBuf[7]=uiSetData4;
  95. break;
  96. }
  97. ucSendregBuf[8]=0x00;
  98. for(i=0;i<8;i++)//最后一个字节是校验和,是前面所有字节累加,溢出部分不用我们管,系统会有规律的自动处理
  99. {
  100. ucSendregBuf[8]=ucSendregBuf[8]+ucSendregBuf[i];
  101. }
  102. for(i=0;i<9;i++)
  103. {
  104. eusart_send(ucSendregBuf[i]);//把一串完整的数据发送给下位机
  105. }
  106. ucSendTimeOutLock=1; //原子锁加锁
  107. uiSendTimeOutCnt=0;//超时计时器计时清零
  108. ucSendTimeOutLock=0; //原子锁解锁

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top