欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)主機(jī)和多臺(tái)從機(jī)之間通信串行通信匯編程序 [打印本頁]

作者: daniu    時(shí)間: 2014-12-26 22:37
標(biāo)題: 51單片機(jī)主機(jī)和多臺(tái)從機(jī)之間通信串行通信匯編程序
  1. ;主機(jī)和多臺(tái)從機(jī)之間通信。通信協(xié)議如下:
  2. ;(1)系統(tǒng)中255臺(tái)從機(jī)地址分別為00~FEH;
  3. ;(2)地址FFH是對(duì)所有從機(jī)都起作用的一條控制命令,命令各從機(jī)恢復(fù)SM2=2的狀態(tài);
  4. ;(3)主機(jī)發(fā)送的控制命令代碼為:00—要求從機(jī)接收數(shù)據(jù)塊,01—要求從機(jī)發(fā)送數(shù)據(jù)塊;
  5. ;(4)數(shù)據(jù)塊長度:16字節(jié)。
  6. ;(5)從機(jī)狀態(tài)字格式為:
  7. ;D7    D6    D5    D4    D3    D2    D1    D0
  8. ;ERR   0     0     0     0     0     TRDY  RRDY
  9. ;其中:若ERR=1,表示從機(jī)接收到非法命令;若TRDY=1,表示從機(jī)發(fā)送準(zhǔn)備就緒;
  10. ;若RRDY=1,表示從機(jī)接收準(zhǔn)備就緒。

  11. ;編程方法:主機(jī)的串口通信以調(diào)用子程序方式進(jìn)行;從機(jī)以串口中斷的方式進(jìn)行,
  12. ;若從機(jī)未做好接收或發(fā)送數(shù)據(jù)的準(zhǔn)備,就從中斷程序中返回,在主程序中做好準(zhǔn)備。


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

  16.         BITE EQU 9          ;串口發(fā)送9位數(shù)據(jù)
  17.         FSSZ EQU 40H        ;主機(jī)發(fā)送的數(shù)據(jù)塊首址
  18.         JSSZ EQU 50H        ;主機(jī)接收的數(shù)據(jù)塊首址

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

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

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

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

  38. ;若主機(jī)向10號(hào)從機(jī)發(fā)送數(shù)據(jù)塊,數(shù)據(jù)塊放置在內(nèi)部RAM區(qū)的40~4F單元中,
  39. ;則主程序調(diào)用子程序的入口條件如下:
  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號(hào)從機(jī)通信
  51.         ;MOV R3,#00H         ;主機(jī)要求從機(jī)接收數(shù)據(jù)塊
  52.         MOV R3,#01H         ;主機(jī)要求從機(jī)發(fā)送數(shù)據(jù)塊

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

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

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

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

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

  102.         END



  103. ;以下為從機(jī)串行通信程序
  104. ;從機(jī)的的串行通信采用中斷控制啟動(dòng)方式,串行口中斷服務(wù)程序利用1區(qū)工作寄存器。在串口通信啟動(dòng)后,
  105. ;仍采用查詢方式來接收或發(fā)送數(shù)據(jù)塊。從機(jī)的初始化程序中應(yīng)包括定時(shí)器1和串口初始化以及開中斷程序。
  106. ;程序中利用F0(PSW.5)作發(fā)送準(zhǔn)備就緒標(biāo)志,F(xiàn)1(PSW.1)作接收準(zhǔn)備就緒標(biāo)志。

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

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


  123. KS:     MOV SP,#1FH         ;設(shè)置堆棧指針
  124.         MOV TMOD,#20H       ;設(shè)置T1工作方式為方式2
  125.         MOV SCON,#0F0H      ;置串行模式3,SM2=1,允許接收
  126.         MOV TH1,#0FDH       ;11.0592MHz 晶振,波特率=9600,時(shí)長0.6695
  127.         SETB TR1            ;啟動(dòng)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             ;作發(fā)送準(zhǔn)備就緒標(biāo)志
  139.         SETB F1             ;作接收準(zhǔn)備就緒標(biāo)志
  140.         SETB ES             ;允許串口通信

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

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

  155. SSI01:  CLR SM2             ;地址符合,準(zhǔn)備接收數(shù)據(jù)
  156.         MOV SBUF,#SLAVE     ;從機(jī)地址送主機(jī),準(zhǔn)備核對(duì)
  157.         JNB TI,[        DISCUZ_CODE_1        ]nbsp;           ;等待發(fā)送完1幀
  158.         CLR TI
  159.         JNB RI,[        DISCUZ_CODE_1        ]nbsp;           ;等待接收完1幀
  160.         CLR RI
  161.         JNB RB8,SSI02       ;是數(shù)據(jù)幀跳轉(zhuǎn)
  162.         SETB SM2            ;復(fù)位信號(hào),把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則繼續(xù)
  168.         MOV SBUF,#08H       ;非法命令,置ERR=1
  169.         JNB TI,[        DISCUZ_CODE_1        ]nbsp;           ;等待發(fā)送完1幀
  170.         CLR TI
  171.         SJMP RETU           ;返回

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

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

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

  195. SSI05:  MOV SBUF,#01H       ;接收準(zhǔn)備就緒,置RRDY=1
  196.         JNB TI,$
  197.         CLR TI
  198.         CLR F1
  199.         MOV R1,#JSSZ        ;接收緩沖區(qū)首址送1區(qū)工作寄存器R1,現(xiàn)設(shè)定為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
復(fù)制代碼



作者: hongfeng0107    時(shí)間: 2017-11-11 12:01
可以請(qǐng)教您問題嗎
作者: SOPHHANA    時(shí)間: 2018-4-25 09:54
偷一手代碼,溜了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1