微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 详解RS485通信

详解RS485通信

时间:12-16 来源:互联网 点击:

*******************main.c 文件程序源代码******************************/

view plaincopy to clipboardprint?

  1. #include
  2. unsignedcharT0RH=0;//T0重载值的高字节
  3. unsignedcharT0RL=0;//T0重载值的低字节
  4. voidConfigTimer0(unsignedintms);
  5. externvoidUartDriver();
  6. externvoidConfigUART(unsignedintbaud);
  7. externvoidUartRxMonitor(unsignedcharms);
  8. externvoidUartWrite(unsignedchar*buf,unsignedcharlen);
  9. voidmain(){
  10. EA=1;//开总中断
  11. ConfigTimer0(1);//配置T0定时1ms
  12. ConfigUART(9600);//配置波特率为9600
  13. while(1){
  14. UartDriver();//调用串口驱动
  15. }
  16. }
  17. /*串口动作函数,根据接收到的命令帧执行响应的动作
  18. buf-接收到的命令帧指针,len-命令帧长度*/
  19. voidUartAction(unsignedchar*buf,unsignedcharlen){
  20. //在接收到的数据帧后添加换车换行符后发回
  21. buf[len++]=;
  22. buf[len++]=;
  23. UartWrite(buf,len);
  24. }
  25. /*配置并启动T0,ms-T0定时时间*/
  26. voidConfigTimer0(unsignedintms){
  27. unsignedlongtmp;//临时变量
  28. tmp=11059200/12;//定时器计数频率
  29. tmp=(tmp*ms)/1000;//计算所需的计数值
  30. tmp=65536-tmp;//计算定时器重载值
  31. tmp=tmp+33;//补偿中断响应延时造成的误差
  32. T0RH=(unsignedchar)(tmp>>8);//定时器重载值拆分为高低字节
  33. T0RL=(unsignedchar)tmp;
  34. TMOD&=0xF0;//清零T0的控制位
  35. TMOD|=0x01;//配置T0为模式1
  36. TH0=T0RH;//加载T0重载值
  37. TL0=T0RL;
  38. ET0=1;//使能T0中断
  39. TR0=1;//启动T0
  40. }
  41. /*T0中断服务函数,执行串口接收监控*/
  42. voidInterruptTimer0()interrupt1{
  43. TH0=T0RH;//重新加载重载值
  44. TL0=T0RL;
  45. UartRxMonitor(1);//串口接收监控
  46. }

现在看这种串口程序,是不是感觉很简单了呢?串口通信程序我们反反复复的使用,加上随着学习的模块越来越多,实践的越来越多,原先感觉很复杂的东西,现在就会感到简单了。从设备管理器里可以查看所有的 COM 口号,我们下载程序用的是 COM4,而 USB 转RS485 虚拟的是 COM5,通信的时候我们用的是 COM5 口,如图 18-3 所示。

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

网站地图

Top