久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4745|回復: 3
打印 上一主題 下一主題
收起左側

關于51單片機modbus通訊程序的請教

[復制鏈接]
跳轉到指定樓層
樓主
本人小白,在網上找了一個51 單片機modbus通訊的從機程序,編譯后提示好像是缺少modbus校驗的部分,請各位大佬幫忙看看這個程序怎么添加modbus部分。(老師只要求了功能碼03讀寄存器)
  1. #include "reg52.h"  

  2. typedef unsigned char uint8;
  3. typedef unsigned int uint16;
  4. typedef unsigned long uint32;
  5. #define TIMER_HIGHT 0xf8
  6. #define TIMER_LOW 0xcd
  7. sbit bRunLED =P3^4; //運行指示燈
  8. sbit bWatchDog =P1^7; //看門狗復位
  9. sbit b485Send= P1^3; //75LBC184 發送接收控制
  10. uint32  dwTickCount,dwIntTick;  //時鐘   
  11. uint8   idata sendBuf[16],receBuf[16]; //發送接收緩沖區   
  12. uint8   idata checkoutError;    // ==2 偶校驗錯     
  13. uint8   idata receTimeOut;      //接收超時   
  14. uint8   idata c10ms;            //10ms 計時   
  15. bit     b1ms,bt1ms,b10ms,bt10ms,b100ms,bt100ms; //定時標志位   
  16.    
  17. // 串行中斷程序   
  18. void commIntProc() interrupt 4   
  19. {   
  20.     if(TI)   
  21.     {   
  22.         TI = 0;   
  23.         if(sendPosi < sendCount)   
  24.         {   
  25.             sendPosi++;   
  26.             ACC = sendBuf[sendPosi];   
  27.             TB8 = P;    //加上校驗位   
  28.             SBUF = sendBuf[sendPosi];   
  29.         }   
  30.         else   
  31.         {   
  32.             b485Send = 0;    //發送完后將485置于接收狀態   
  33.             receCount = 0;   //清接收地址偏移寄存器   
  34.             checkoutError = 0;   
  35.         }   
  36.     }   
  37.     else if(RI)   
  38.     {   
  39.         RI = 0;   
  40.         receTimeOut = 10;    //通訊超時值   
  41.         receBuf[receCount] = SBUF;   
  42.         ACC = receBuf[receCount];   
  43.         if(P != RB8)   
  44.             checkoutError = 2;  //偶校驗出錯   
  45.         receCount++;          //接收地址偏移寄存器加1   
  46.         receCount &= 0x0f;    //最多一次只能接收16個字節   
  47.     }   
  48.    
  49. }   // void CommIntProc()   
  50.    
  51. //定時器0 1ms 中斷   
  52. void timer0IntProc() interrupt 1   
  53. {   
  54.     TL0 = TIMER_LOW;   
  55.     TH0 = TIMER_HIGHT;   
  56.     dwIntTick++;   
  57.     bt1ms = 1;   
  58.     c10ms++;   
  59.     if(c10ms >= 10)   
  60.     {   
  61.         c10ms = 0;      //10ms計時器清零   
  62.         bt10ms = 1;   
  63.     }   
  64. }   // void Timer0IntProc()   
  65.    
  66. //外部中斷0   
  67. void intEx0Proc(void) interrupt 0   
  68. {   
  69.    
  70. }   
  71.    
  72. //計數器1中斷   
  73. void counter1IntProc(void) interrupt 3 using 1   
  74. {   
  75.    
  76. }   

  77. //定時處理   
  78. void timeProc(void)   
  79. {   
  80.     static uint8 c200ms;   
  81.     bWatchDog = ~ bWatchDog;    //看門狗取反   
  82.     b1ms = 0;   
  83.     b10ms = 0;   
  84.     b100ms = 0;   
  85.     ET0 = 0;   
  86.     dwTickCount = dwIntTick;   
  87.     ET0 = 1;   
  88.     if(bt1ms)   
  89.     {   
  90.         bt1ms = 0;   
  91.         b1ms = 1;   
  92.         if(receTimeOut>0)   
  93.         {   
  94.             receTimeOut--;   
  95.             if(receTimeOut==0 && receCount>0)   //判斷通訊接收是否超時   
  96.             {   
  97.                 b485Send = 0;       //將485置為接收狀態   
  98.                 receCount = 0;      //將接收地址偏移寄存器清零   
  99.                 checkoutError = 0;   
  100.             }   
  101.         }   
  102.     }   
  103.     if(bt100ms)   
  104.     {   
  105.         bt100ms = 0;   
  106.         b100ms = 1;   
  107.     }   
  108.     if(bt10ms)      //判斷中斷10ms標志位是否1   
  109.     {   
  110.         bt10ms = 0;     //清中斷10ms標志位   
  111.         b10ms = 1;   
  112.    
  113.         c200ms++;                   //200ms計時器加1   
  114.         if(c200ms >= 20)            //判斷是否計時到200ms   
  115.         {   
  116.             c200ms = 0;             //清200ms計時器   
  117.             bRunLED = ~bRunLED;     //取反運行指示燈            
  118.         }   
  119.     }   
  120. }   // void TimerProc(void)   
  121.    
  122. //初始化串口   
  123. void initUart(void)   
  124. {   
  125.     //T2 用于波特率 9600   
  126.     T2CON = 0x30;   
  127.     RCAP2H = 0xff;   
  128.     RCAP2L = 0xb8;   
  129.     TR2 = 1;   
  130.     //偶校驗                          
  131.     SCON = 0xd0;   
  132.     PCON = 0;   
  133.     ES = 1;   
  134. }//void initUart(void)   
  135.    
  136. //初始化中斷   
  137. void initInt(void)   
  138. {   
  139.     TMOD = 0x51;   
  140.     TH0 = TIMER_HIGHT;   
  141.     TL0 = TIMER_LOW;   
  142.     TR0 = 1;      
  143.     ET0 = 1;   
  144.     TH1 = 0;            //9600   
  145.     TL1 = 0;   
  146.     TR1 = 0;            //定時器1用于計數定時器2用于波特   
  147.     ET1 = 1;   
  148.     IT0 = 1;      
  149.     IT1 = 1;   
  150.     EX0 = 0;      
  151.     PX0 = 1;   
  152.     EX1 = 0;   
  153.     initUart();   
  154.     EA = 1;        
  155. }   // void initInt(void)   
  156.    
  157. //初始化   
  158. void initProg(void)   
  159. {      
  160.     initInt();   
  161.     b485Send = 0;   
  162. }   
  163. void main(void)   
  164. {   
  165.     initProg();   
  166.    
  167.     while(1)   
  168.     {   
  169.         timeProc();   
  170.         checkComm0Modbus();   
  171.     }   
  172. }  
復制代碼




QQ圖片20190508111324.png (4.34 KB, 下載次數: 35)

QQ圖片20190508111324.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:93224 發表于 2019-5-19 18:45 | 只看該作者
問題解決了嗎?
回復

使用道具 舉報

板凳
ID:93224 發表于 2019-5-19 18:45 | 只看該作者
加我的QQ 1014461948我可以幫助你解決
回復

使用道具 舉報

地板
ID:578727 發表于 2020-5-27 10:09 | 只看該作者
lele5211314 發表于 2019-5-19 18:45
加我的QQ 1014461948我可以幫助你解決

你好,可以知道一下單片機做從機的MODBUS程序嗎,剛做這個不知道怎么下手
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲天堂中文字幕 | 久久综合入口 | 蜜桃免费一区二区三区 | 国产欧美精品一区二区三区 | 国产精品亚洲综合 | 91麻豆精品国产91久久久久久久久 | 久久久久免费观看 | 狠狠久久综合 | 91五月婷蜜桃综合 | 香蕉久久a毛片 | 日韩精品免费在线观看 | 羞羞网站在线免费观看 | 911精品国产| 亚洲国产成人在线 | 日韩久久久久久 | 一区二区三区国产视频 | 在线看一区二区三区 | 日韩久久久久 | 五月婷婷激情网 | 动漫www.被爆羞羞av44 | 欧美中文字幕一区 | 欧美一级免费看 | 色网站在线免费观看 | 成人激情免费视频 | 国产精品久久久久久久久久免费看 | 日韩一级黄色片 | 国产精品久久久久久久久久久久冷 | 精品久久国产老人久久综合 | 欧美亚洲国产一区二区三区 | 欧美精品中文字幕久久二区 | 成人三级av | 91新视频 | 午夜成人免费视频 | 日韩久久综合 | 欧美精品福利 | 欧美成人免费在线 | 久久久久综合 | 免费久久99精品国产婷婷六月 | 亚洲精品亚洲人成人网 | 久久久精彩视频 | 亚洲国产激情 |