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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機主機和多臺從機之間通信串行通信匯編程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:70976 發表于 2014-12-26 22:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. ;主機和多臺從機之間通信。通信協議如下:
  2. ;(1)系統中255臺從機地址分別為00~FEH;
  3. ;(2)地址FFH是對所有從機都起作用的一條控制命令,命令各從機恢復SM2=2的狀態;
  4. ;(3)主機發送的控制命令代碼為:00—要求從機接收數據塊,01—要求從機發送數據塊;
  5. ;(4)數據塊長度:16字節。
  6. ;(5)從機狀態字格式為:
  7. ;D7    D6    D5    D4    D3    D2    D1    D0
  8. ;ERR   0     0     0     0     0     TRDY  RRDY
  9. ;其中:若ERR=1,表示從機接收到非法命令;若TRDY=1,表示從機發送準備就緒;
  10. ;若RRDY=1,表示從機接收準備就緒。

  11. ;編程方法:主機的串口通信以調用子程序方式進行;從機以串口中斷的方式進行,
  12. ;若從機未做好接收或發送數據的準備,就從中斷程序中返回,在主程序中做好準備。


  13. ;以下為主機串行通信程序
  14. ;入口參數:R0—主機發送的數據塊首址;R1—主機接收的數據塊首址;R2—被尋址從機地址;
  15. ;R3—主機命令;R4—數據塊長度;

  16.         BITE EQU 9          ;串口發送9位數據
  17.         FSSZ EQU 40H        ;主機發送的數據塊首址
  18.         JSSZ EQU 50H        ;主機接收的數據塊首址

  19.         ORG  0000H     ;程序執行開始地址
  20.         LJMP KS        ;跳至KS
  21.         ORG  0003H     ;外中斷0中斷程序入口
  22.         RETI                ;中斷返回
  23.         ORG  000BH          ;定時器T0中斷程序入口
  24.         RETI                ;中斷返回
  25.         ORG  0013H     ;外中斷1中斷入口
  26.         RETI             ;中斷返回
  27.         ORG  001BH     ;定時器T1中斷程序入口
  28.         RETI           ;跳至INTT1中斷服務程序
  29.         ORG  0023H     ;串口中斷入口地址
  30.         RETI             ;中斷返回

  31.         ORG  0100H
  32. KS:     MOV SP,#1FH         ;設置堆棧指針

  33. ;此處可以插入其他程序

  34. COM:    MOV TMOD,#20H       ;設置T1工作方式為方式2
  35.         MOV SCON,#0D8H      ;置串行模式3,SM2=1,允許接收
  36.         MOV TH1,#0FDH       ;11.0592MHz 晶振,波特率=9600,時長0.6695   FD
  37.         SETB TR1            ;啟動T1

  38. ;若主機向10號從機發送數據塊,數據塊放置在內部RAM區的40~4F單元中,
  39. ;則主程序調用子程序的入口條件如下:
  40.         MOV FSSZ,#0
  41.         MOV FSSZ+1,#1
  42.         MOV FSSZ+2,#2
  43.         MOV FSSZ+3,#3
  44.         MOV FSSZ+4,#4
  45.         MOV FSSZ+5,#5
  46.         MOV FSSZ+6,#6
  47.         MOV FSSZ+7,#7
  48.         MOV FSSZ+8,#8

  49. ;串口通信
  50.         MOV R2,#0AH         ;與10號從機通信
  51.         ;MOV R3,#00H         ;主機要求從機接收數據塊
  52.         MOV R3,#01H         ;主機要求從機發送數據塊

  53. ;占用資源:R0~R4,A、40H、50H
  54. COM1:   LCALL MS101         ;調用串口通信子程序
  55.         CJNE R4,#00H,COM1   ;查看是否發送接收數據完成
  56.         SJMP KS             ;實際中加入其他程序

  57. ;以下為主機串行通信子程序
  58. MS101:  MOV A,R2            ;發送地址幀
  59.         MOV SBUF,A
  60.         JNB TI,$
  61.         CLR TI
  62.         JNB RI,[        DISCUZ_CODE_1        ]nbsp;           ;等待從機應答
  63.         CLR RI
  64.         MOV A,SBUF
  65.         XRL A,R2
  66.         JZ MS103            ;判應答地址是否相符
  67.         RET
  68. MS102:  SETB TB8
  69.         MOV SBUF,#0FFH      ;不相符重新聯絡
  70.         JNB TI,$
  71.         CLR TI
  72.         SJMP MS101          ;轉重發地址

  73. MS103:  CLR TB8             ;地址符合,準備發送命令
  74.         MOV SBUF,R3         ;發送命令
  75.         JNB TI,$
  76.         CLR TI
  77.         JNB RI,[        DISCUZ_CODE_1        ]nbsp;           ;等待從機應答
  78.         CLR RI
  79.         MOV A,SBUF          ;取應答信息
  80.         JNB ACC.7,MS104     ;判斷是否出錯
  81.         SJMP MS102          ;若從機接收命令出錯,重新聯絡

  82. MS104:  CJNE R3,#00H,MS105  ;判是否要求從機接收數據
  83.         JNB ACC.0,MS102     ;從機接收數據準備就緒否?
  84.         MOV R0,#FSSZ        ;主機發送的數據塊首址
  85.         MOV R4,#BITE        ;設數據塊長度(9字節)
  86. LPTX:   MOV SBUF,@R0        ;主機發送數據塊
  87.         JNB TI,[        DISCUZ_CODE_1        ]nbsp;           ;等待發送完1幀
  88.         CLR TI
  89.         INC R0              ;修改地址指針
  90.         DJNZ R4,LPTX        ;判數據塊是否傳完
  91.         RET                 ;返回主程序

  92. MS105:  JNB ACC.1,MS102     ;從機發送數據準備就緒否?
  93.         MOV R1,#JSSZ        ;主機接收的數據塊首址
  94.         MOV R4,#BITE        ;設數據塊長度(9字節)
  95. LPRX:   JNB RI,LPRX         ;等待接收完1幀
  96.         CLR RI
  97.         MOV A,SBUF          ;取出接收到的字符
  98.         MOV @R1,A
  99.         INC R1
  100.         DJNZ R4,LPRX        ;未接收完則繼續
  101.         RET

  102.         END



  103. ;以下為從機串行通信程序
  104. ;從機的的串行通信采用中斷控制啟動方式,串行口中斷服務程序利用1區工作寄存器。在串口通信啟動后,
  105. ;仍采用查詢方式來接收或發送數據塊。從機的初始化程序中應包括定時器1和串口初始化以及開中斷程序。
  106. ;程序中利用F0(PSW.5)作發送準備就緒標志,F1(PSW.1)作接收準備就緒標志。

  107.         SLAVE EQU 0AH     ;設定從機地址
  108.         BITE  EQU 9         ;串口發送9位數據
  109.         FSSZ  EQU 40H       ;主機發送的數據塊首址
  110.         JSSZ  EQU 50H       ;主機接收的數據塊首址

  111.         ORG  0000H     ;程序執行開始地址
  112.         LJMP KS        ;跳至KS
  113.         ORG  0003H     ;外中斷0中斷程序入口
  114.         RETI                ;中斷返回
  115.         ORG  000BH          ;定時器T0中斷程序入口
  116.         RETI                ;中斷返回
  117.         ORG  0013H     ;外中斷1中斷入口
  118.         RETI             ;中斷返回
  119.         ORG  001BH     ;定時器T1中斷程序入口
  120.         RETI           ;跳至INTT1中斷服務程序
  121.         ORG  0023H     ;中斷返回
  122.         LJMP SS10           ;跳至串口中斷服務程序


  123. KS:     MOV SP,#1FH         ;設置堆棧指針
  124.         MOV TMOD,#20H       ;設置T1工作方式為方式2
  125.         MOV SCON,#0F0H      ;置串行模式3,SM2=1,允許接收
  126.         MOV TH1,#0FDH       ;11.0592MHz 晶振,波特率=9600,時長0.6695
  127.         SETB TR1            ;啟動T1
  128.         SETB EA             ;開總中斷

  129.         MOV FSSZ,#0
  130.         MOV FSSZ+1,#1
  131.         MOV FSSZ+2,#2
  132.         MOV FSSZ+3,#3
  133.         MOV FSSZ+4,#4
  134.         MOV FSSZ+5,#5
  135.         MOV FSSZ+6,#6
  136.         MOV FSSZ+7,#7
  137.         MOV FSSZ+8,#8

  138.         SETB F0             ;作發送準備就緒標志
  139.         SETB F1             ;作接收準備就緒標志
  140.         SETB ES             ;允許串口通信

  141.         SJMP [        DISCUZ_CODE_1        ]nbsp;             ;可以插入其他程序

  142. ;串行口中斷服務程序(由0023轉來)
  143. ;占用資源:1區R0~R2,A、40H、50H、C
  144. SS10:   CLR RI
  145.         PUSH A              ;保護現場
  146.         PUSH PSW
  147.         SETB RS0            ;選1區工作寄存器
  148.         CLR RS1
  149.         MOV A,SBUF
  150.         XRL A,#SLAVE        ;SLAVE為本從機地址
  151.         JZ SSI01            ;判地址是否符合
  152. RETU:   POP PSW             ;恢復現場
  153.         POP A
  154.         RETI

  155. SSI01:  CLR SM2             ;地址符合,準備接收數據
  156.         MOV SBUF,#SLAVE     ;從機地址送主機,準備核對
  157.         JNB TI,[        DISCUZ_CODE_1        ]nbsp;           ;等待發送完1幀
  158.         CLR TI
  159.         JNB RI,[        DISCUZ_CODE_1        ]nbsp;           ;等待接收完1幀
  160.         CLR RI
  161.         JNB RB8,SSI02       ;是數據幀跳轉
  162.         SETB SM2            ;復位信號,把SM2置“1”
  163.         SJMP RETU

  164. SSI02:  MOV A,SBUF          ;取命令
  165.         CLR C
  166.         CJNE A,#02H,SS1     ;檢查命令是否合法,如果A<2,則C=1,否則C=0
  167. SS1:    JC SSI03            ;A<02H則繼續
  168.         MOV SBUF,#08H       ;非法命令,置ERR=1
  169.         JNB TI,[        DISCUZ_CODE_1        ]nbsp;           ;等待發送完1幀
  170.         CLR TI
  171.         SJMP RETU           ;返回

  172. SSI03:  JZ CMD0             ;A=00H,準備接收數據塊
  173.         JB F0,SSI04         ;發送準備就緒否
  174.         MOV SBUF,#00H       ;回答未準備就緒
  175.         JNB TI,[        DISCUZ_CODE_1        ]nbsp;           ;等待發送完1幀
  176.         SJMP RETU

  177. SSI04:  MOV SBUF,#02H       ;發送準備就緒,置TRDY=1
  178.         JNB TI,$
  179.         CLR TI
  180.         CLR F0              ;清發送準備標志
  181.         MOV R0,#FSSZ
  182.         MOV R2,#BITE        ;發送或接收字節數送1區工作寄存器R2,現設定為9字節
  183. LP1:    MOV SBUF,@R0        ;發送數據塊
  184.         JNB TI,$
  185.         CLR TI
  186.         INC R0              ;修改數據指針
  187.         DJNZ R2,LP1
  188.         SETB SM2            ;發送完,置SM2=1
  189.         SJMP RETU

  190. CMD0:   JB F1,SSI05         ;判接收準備就緒否?
  191.         MOV SBUF,#00H       ;回答未準備就緒
  192.         JNB TI,$
  193.         CLR TI
  194.         SJMP RETU

  195. SSI05:  MOV SBUF,#01H       ;接收準備就緒,置RRDY=1
  196.         JNB TI,$
  197.         CLR TI
  198.         CLR F1
  199.         MOV R1,#JSSZ        ;接收緩沖區首址送1區工作寄存器R1,現設定為50~5FH
  200.         MOV R2,#BITE
  201. LP2:    JNB RI,LP2          ;等待1幀接收完
  202.         CLR RI
  203.         MOV @R1,SBUF
  204.         INC R1
  205.         DJNZ R2,LP2
  206.         SETB SM2            ;接收完,置SM2=1
  207.         SJMP RETU

  208.         END
復制代碼


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

使用道具 舉報

沙發
ID:248274 發表于 2017-11-11 12:01 | 只看該作者
可以請教您問題嗎
回復

使用道具 舉報

板凳
ID:309627 發表于 2018-4-25 09:54 | 只看該作者
偷一手代碼,溜了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜视频在线 | 男人的天堂久久 | 91av视频在线播放 | 日韩精品视频中文字幕 | 天天天天操| 免费爱爱视频 | 国产 91 视频| 人人干人人干人人干 | 久久久精品网站 | 99久久精品国产毛片 | 国产激情精品视频 | 亚洲成人在线视频播放 | 91网在线观看 | 亚洲啪啪 | 亚洲一区二区三区福利 | av手机在线 | 性色的免费视频 | 先锋影音资源网站 | 欧美一级免费看 | 久久久高清 | 亚洲欧美精品在线 | 亚洲欧美精品在线 | 老司机免费视频 | 一级片片 | 亚洲一区亚洲二区 | 午夜视频在线免费观看 | 精品一区国产 | 在线国产一区二区 | 亚洲精品福利视频 | 91免费视频 | 国产美女福利在线观看 | 日韩av在线中文字幕 | 免费一区二区三区 | 国产精品国产三级国产aⅴ无密码 | www.五月婷婷.com | 久久精品无码一区二区三区 | 欧美精品啪啪 | 欧美日韩在线不卡 | 精品亚洲永久免费精品 | 亚洲欧美日韩在线一区二区 | 国产激情在线播放 |