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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PL2000A/PL2101電力載波芯片中文資料及接收、發射程序 電路圖

[復制鏈接]
跳轉到指定樓層
樓主
ID:105323 發表于 2016-3-3 18:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 51黑黑黑 于 2016-3-4 00:46 編輯

PL2101芯片中文資料
        直序擴頻,半雙工異步調制解調器
        二相相移鍵控,120KHz載頻,帶寬15KHz,傳輸速率500 bps
        接收靈敏度:50mVRMS(500bps)
        15位偽碼長度,可編程同步捕獲門限
        上電復位、電壓監測電路及看門狗定時器;
        內建高靈敏度放大器及四象限乘法器
        I2C串行通信接口
        可編程實時鐘(/////星期/)(掉電后電池維護)
        32Bytes SRAM(掉電后電池電池維護)
         5V供電,I/O口帶 4000V ESD 保護
        發射功率0.5w,單級傳輸距離≥1000m;
        抗干擾能力:抗20倍功率的噪聲,抗衰減:-80dB;
        工業級溫度標準: -40oC ~85oC
        數字/模擬混合0.5μmCMOS集成電路工藝,SOP28表貼封裝;
PL2101管角定義圖


概述
PL2101 是專為電力線通訊網絡設計的半雙工異步調制解調器。它僅由單一的5V 電源供電,以及一個外部的接口電路與電力線耦合。PL2101除具備基本的通訊控制功能外,還內置了五種常用的功能電路:實時鐘電路,32Bytes SRAM,電壓監測,看門狗定時器及復位電路,它們通過標準的I2C接口與外部的微處理器相聯,其中實時鐘與32 Bytes SRAM在主電源掉電的情況下可由3V備用電池供電繼續保持工作。PL2101 是特別針對中國電力網惡劣的環境所研制開發的低壓電力線載波通信芯片。由于采用了直接序列擴頻、數字信號處理、直接數字頻率合成等新技術,并采用大規模數字/模擬混合0.5μmCMOS 工藝制作,所以在抗干擾及抗衰落性能以及國內外同類產品性能價格比等方面有著出眾的表現。



管腳描述

1
VFB
內部限幅放大器反相輸入端(外接0.1uF電容至GNDA
2
FLTi
混頻信號輸出。內部混頻器輸出的信號由此管腳輸出進入外部陶瓷濾波器
3
Ref2
內部基準電壓源自舉端(外接10M電阻至VDDA
4
Ref1
內部電壓比較器調整端
5
Dout
內部限幅放大器輸出監測端
6
WDI
看門狗計數器清零輸入端。當WDI持續436mS以上無高低電平變化,將導致看門狗計數器溢出復位
7
SCL
I2C串行總線時鐘輸入端
8
SDA
I2C串行總線數據輸入/輸出端。
9
?/R
半雙工收發控制輸入端。(高電平收/低電平發)
10
RXD_TXD
半雙工數據收發輸入/輸出端
11
HEAD
數據同步端
12
RESET
上電復位及看門狗計數器溢出復位輸出端(高電平有效,持續時間218mS)。當電源電壓低于4.3V時,RESET腳持續輸出高電平
13/14
XT2o/XT2i
時鐘晶體振蕩器輸入/輸出端。XT2oXT2i分別為片內反相放大器的輸入端和輸出端,外接晶體可以組成晶體振蕩器。PL2101主振蕩器所需時鐘頻率為32.768KHz。電路連接如圖所示,為使振蕩器工作更加可靠,電容C1 一般用3pFC2的取值可在3-6pF之間選擇。
15
VBAT
備用電源輸入端(可接3V-3.6V鋰電池)
16
VDDD
數字部分電源, 5.0V
17
PSK_OUT
數字信號發送輸出端。(驅動能力大于16mA
18
GNDD
數字地

19/20
XT1o/XT1i
9.6MHz主晶體振蕩器輸入/輸出端。XT1o、XT1i分別為片內反相放大器的輸入端和輸出端,外接晶體可以組成晶體振蕩器。PL2101主振蕩器所需時鐘頻率為 9.6MHz。電路連接如圖所示,為使振蕩器工作更加可靠,電容C1 一般用30pF,C2的取值可在30-68pF之間選擇。若使用外部時鐘,可直接從XT1i輸入9.6MHz的時鐘信號。
21
CLK600
600KHz本振輸出端。該管腳輸出600KHz方波信號,作為外接模擬混頻器MC3357/MC3361的一本振信號,它與SIGin輸入的120KHz信號混頻出480KHz的中頻信號以便陶瓷濾波器進行帶通濾波(當用戶使用內部模擬混頻器時,該引腳懸空)
22
GNDA
模擬地
23
SIGin
模擬信號輸入,50mV– 800mV120KHz
24
VDDA
模擬部分電源, 4.8 – 5.0V
25
VFA
外接0.1uF電容至GNDA
26
PFo
電源掉電指示輸出端。PL2101除提供內部電源電壓監測/復位電路外還額外提供一個模擬電壓比較器,它的一個輸入端接片內的2.5V電壓基準源, 另一個輸入端即CMP,它的輸出端即PFo
27
CMP
電源掉電監測外部比較輸入端
28
FLTo
濾波信號輸入。當混頻信號經過帶通濾波后由此管腳進入內部限幅放大器
I2C接口時序:
1.管腳說明
①    SDA串行地址/數據輸入/輸出端
   這是一個雙向傳輸端,用于傳輸地址和數據進入PL2101,以及從 PL2101 發送數據至外部 MCU 或其它控制器件。對于一般的數據傳輸,僅在SCL為低期間SDA才可以變化。在SCL為高期間變化,留給指示 START(開始)和 STOP(停止)條件。
SCL串行時鐘端
   此為時鐘輸入端,用于同步進入 PL2101 和從 Pl2101 發出的數據。
2I2C時序描述
   PL2101 支持雙向兩線總線和數據傳輸協議。當器件處于傳送數據到總線狀態時,我們稱之為發送器,當器件處于接受數據狀態時則稱為接受器?偩必須由一個主器件控制,主器件可以是MCU 或其它設備,它產生串行時鐘(SCL),控制總線存取,并且產生開始位(START)和停止位(END),而 PL2101 作為從器件工作。主器件和從器件都能工作于發送器或者接受器的狀態,但何種方式有效由主器件決定。為明確起見,除非另作說明以后所指的從器件均代表PL2101
①   總線數據傳輸開始/停止

l        總線不忙(A) —數據和時鐘線保持高
l        開始傳送數據(B) —當時鐘(SCL)為高,SDA線由高到底的變化將產生起始位(Start Bit),所有的命令必須在產生起始位以后進行。

l        停止數據傳送 —當時鐘(SCL)為高,SDA線由低到高的變化將產生停止位(End Bit),所有的命令必須在產生停止位以前結束。

①  數據有效
l        在起始位后,時鐘信號的高電平周期期間,當數據線是穩定時,數據線的狀態表示數據線有效。
l        數據線上的數據改變必須發生在時鐘信號為低電平周期期間,每位數據需一個時鐘。
l        每次數據的傳輸必須在起始位后開始,在停止位前結束。在開始和停止條件之間數據字節的傳輸數目由主器件決定。
②   輸出應答


l        在每一個字節被接收后,接受器件必須產生一個確認位(ACK)當接受器準備接收下一字節,或否定位(NACK)當接受器準備結束接收狀態。
l        主器件必須產生一個與此確認位相應的額外時鐘脈沖。
l        通過在相對應于確認位時鐘脈沖的高電平期間拉SDA線為穩定的低電平,可產生確認位(或置SDA線為穩定的高電平,產生否定位)。
l        若不在從器件輸出的最后一個字節中產生確認位,主器件必須發一個數據結束信號給從器件(即產生否定位)。在這種情況下,從器件會保持數據線為高電平,使得主器件能產生停止位以便結束本次總線數據傳輸。
從器件代碼
l        產生起始位以后,總線主器件必須對 PL2101 發送七位器件代碼(1011000)組成的從器件地址,以便選中PL2101 并使得總線上的其它從器件處于非選中狀態并讓出總線控制權。
l        從器件地址的第八位 R/W 位的狀態決定主器件對 PL2101 進行何種操作(讀或寫)。
PL2101 一直監視總線上與它相應的從器件地址,如果從器件地址相符并且器件不忙,則PL2101產生一個確認位。
操作
器 件 碼
讀/寫


1  0  1  1  0  0   0

1  0  1  1  0  0   0

  1

  0


SLAVEADDRESS









R/W
A
1
0
1
1
0
0
0
地址字節
l        地址字節是由主器件發出的八位地址碼,用來尋址PL2101 內部的存儲寄存器。
l        PL2101 內部寄存器地址空間的分配如下

地址字節內容
說明
00000000—00011111(00H-1FH)
SRAM
01000000 (40H)
01000001 (41H)
01000010 (42H)
01000011 (43H)
01000100 (44H)
01000101 (45H)
星期
01000110 (46H)
01001000 (48H)
捕獲門限
01001111 (4FH)
寫保護
  PL2101 內部寄存器地址空間從 00H-FFH 共計 256 個字節,除上表所列的以外其余均為無效地址,對無效地址寫入的數據將會被丟棄,從無效地址讀出的數據沒有實際意義。為保持程序代碼的兼容性,我們建議不要使用無效地址(因為它可能會被PL210X系列的其它版本芯片使用),以便軟件可以被不加修改的直接移植到PL210X 系列的其它系統中。
寫保護
l        PL2101 上電復位后,寫操作是被禁止的( 4FH 字節的 bit7 被自動清零),整個地址空間內除寫保護字節可讀/寫尋址外,其余地址只能做讀尋址。
l        若要打開寫保護,需使寫入寫保護地址字節的數據最高位為1。
3.寫操作
寫單字節數據
l        在主器件發出起始位以后,主器件發送七位器件代碼,以及一位低電平的讀寫位到總線上,這指示PL2101 將被尋址,一個地址字節將跟在第九個時鐘周期由PL2101 產生的確認位之后。由主器件發送的地址字節會被寫入到 PL2101 的地址指針寄存器。
l        主器件接收來自 PL2101 的另一個確認信號以后,將數據字節發送到總線上,PL2101 接收它并將其寫入到被地址指針尋址的寄存器中。
l        PL2101 再次發出確認信號,然后主器件產生停止位結束本次操作。
l        任何時候,如果從器件在應該發出確認信號時沒有給出確認應答,則表示PL2101 沒有正確接收到起始位并進入命令準備狀態,這需要主器件重新發送操作命令。
4.讀操作
①   讀當前地址內容

l        PL2101 內部的地址指針寄存器保持被存取的最后一個數據字節的地址,并在片內自動加1。如果以前存。ㄗx或寫操作均可)的地址為n,下一個讀操作從 n 1 地址中讀出數據。但對于地址指針寄存器的加1操作相對與讀/寫時序是不同的,當主器件做連續讀操作時是先讀后加,連續寫操作時是先加后寫(第一個被寫入的數據字節在寫周期前沒有地址加操作)。
l        當 PL2101 接收到R/W位為1的情況下,PL2101 發送一個確認位并隨后送出8位數據字節,然后主器件不確認傳遞(產生 NACK),再發送停止位結束本次操作。
讀隨機地址內容

l        這種方式可以讓主器件讀取PL2101 片內任意地址的寄存器內容,要完成這種方式的讀操作需要首先設置片內地址指針寄存器,這可通過將地址字節作為寫操作的一部分送給PL2101來完成。
l        發送了地址字節后,主器件在確認位后面立即產生一個起始位,用這種方式結束寫操作并開始另一個讀操作。
l        主器件再次發出器件代碼,并使 R/W 位為“1”,PL2101 將發出確認位并隨后發送由上次地址寫操作設置的地址指針尋址的8位數據字節,然后主器件不確認傳遞(產生NACK),再產生一個停止位結束本次操作。
讀順序地址的內容


l        讀順序地址內容的方式與讀隨意地址內容的方式以相同的方式啟動,PL2101發送完第一個數據字節以后,主器件發出一個確認位(ACK),這樣 PL2101 將會發送下一個順序地址的8位數據字節,直至主器件發出NACK 或停止位。
l        為提供這種讀方式,PL2101    包含的地址指針寄存器在每次操作完成以后自動加1。
l        利用這一特性,可以在一次操作期間連續順序地讀出整個存儲器的內容。但不在有效地址空間內的數據字節會被FFH 取代。
片內寄存器地址/功能描述:
SRAM
(00H-1FH)共計 32 個字節,在主電源掉電后可由備用電池繼續供電,保持數據不丟失。
 實時鐘:
秒  (40H)   二進制(BIN) 表示,0-59 表示零秒至五十九秒。
分  (41H)   二進制(BIN) 表示,0-59 表示零分至五十九分。
時  (42H)   二進制(BIN) 表示,0-23 表示零點至二十三點。
日  (43H)   二進制(BIN) 表示,1-31 表示一號至三十一號。
月  (44H)   二進制(BIN) 表示,1-12 表示一月至十二月。
星期 (45H)   二進制(BIN) 表示,1-6 表示周一至周六,0 表示星期日。
年  (46H)   二進制(BIN) 表示,0-99 表示 2000 年至 2099 年。
特殊寄存器:
捕獲門限   (48H)擴頻偽碼同步捕獲門限,上電復位缺省值為30H。
寫 保 護  (4FH) 寫保護字節的最高位為“0”使能寫保護,禁止對整個地址空間(除寫保護字節本身)的寫操作,寫保護字節的最高位為“1” 取消寫保護。其它位保留供功能擴展使用。寫保護字節上電復位缺省值為30H。
對PL2000A/PL2101芯片的寫操作步驟
   a R/〒為“0”、發射態;
   b HEAD對應引腳產生中斷時,將發送數據的比特移位到RXD_TXD管腳;
   c 等待下一次HEAD中斷,返回b
   d 直到發送數據發送結束;
   e R/〒為“1”、恢復接收態;
PL2000A/PL2101芯片的讀操作步驟:
  aR/〒為“1”、接收態;
   b HEAD對應引腳產生中斷時,將RXD_TXD管腳比特數據移位到C并保存;
   c 等待下一次HEAD中斷,返回b;
   d 直到按規約接收一次完整幀;
   e 進行數據處理。
同步接收數據過程:
* R_T為“1”、接收態,HEAD發生下降沿產生中斷后,將RXD_TXD狀態讀入緩沖字節;
  * 在16Bit的滑動窗口中搜索同步幀,當搜索到0x09、0xAF同步幀頭后,表示已經進入同步狀態;
  * 隨后數據為通訊數據體,接收數據每8Bit 依次還原為一個有效字節數據,由規約進
解釋,直至接收完成。


下面介紹PL2000A/PL2101電力載波芯片接收、發射測試例程 電路圖
電力載波電路圖如下:

主程序循環檢測1AH單元是否=”F”,并等待中斷接收載波數據,收到數據后,RXD_TXD_BYTE=1AH載波收發標志置成”F”,主程序再向主機(pc)發送數據.此例程需要2臺機器配合使用,這一臺做為載波接收機,另一臺作為載波發射機,向它發送數據,它收到后通過串口發送給微機,

      R_T BIT          P1.7; R/〒為“0”、發射態;為“1”、接收態;
            RXD_TXD    BIT  P1.6
            HEAD    BIT    0b2h;INT0
            ROM_SDABIT   0B5H;;;
           ROM_SCLBIT   0B6H;;;
RXD_TXD_BYTEEQU      1AH      ;載波收發標志
TR_RC_BUF_1     EQU      30H
BIT_SEND_CNT  EQU      1CH
TMP_SEND_BYTE     EQU      1DH
BYTE_SEND_CNT      EQU      1EH
HEAD_WORD_L EQU      1FH;同步字低位字節
HEAD_WORD_H EQU      14H
READ_BUF  EQU      15H
T_NOR_BIT  BIT  17H ;發送普通數據標志
T_END_BIT  BIT  18H

            ORG      0000H
            AJMP    MAIN
            ORG      0003H
            LJMP     TRANCIEVE;中斷接收載波數據
       ORG 001BH
            RETI
       ORG 0023H
       LJMPS         ;接收數據轉S

            ORG 0030h
MAIN:   MOVSP,#60H    ;設堆棧指針
            MOV     IE,#10011101B   ;
            MOV     IP,#00011000B
       SETB     IT1             ;下降沿有效
             SETB     IE1             ;外部中斷1
          MOV A,#21H
          MOV 89H,A  ;TMOD定時器1工作方式2,8位可重裝,定時器0工作方式116位定時器
       MOV A,#50H ;設串行口模式1
          MOV 98H,A   ;送串行控制SCON
             MOV 8BH,#0EBH ;給定時器1賦值6M=F3,1200波特率,0.833毫秒/,12M=E8H,9.6=EBH
           MOV 8DH,#0EBH ;給定時器0賦值6M=F31200波特率,0.833毫秒/,12M=E8H
       SETB TR1
            SETB     R_T
Q:       MOV A,#0FFH
             MOV R2,#15  ;清數據區
            MOV R0,#21H
  QING:MOV@R0,A
            INC R0
            DJNZ R2,QING
       MOV 30H,#09H
    MOV31H,#0AFH
         MOV A,#55H
             MOV R2,#40  ;清數據區
            MOV R0,#32H
  QING1:MOV@R0,A      ;清數據區
            INC R0
            DJNZ R2,QING1

       MOV    HEAD_WORD_L,#0
       MOV    HEAD_WORD_H,#0
       MOV    BIT_SEND_CNT,#9
       MOV    TMP_SEND_BYTE,#0FFH
       MOV    TR_RC_BUF_1,#21H  ;發送、接收數據緩沖區首址
       MOV    BYTE_SEND_CNT,#40 ;接收數據長度
          ACALLINIT_PL2000A
       MOV     RXD_TXD_BYTE,#'R'
MAIN1: LCALL   RDOG;喂狗
         MOV     A,RXD_TXD_BYTE; 1AH  ;載波收發標志
        XRL A,#'F';接收完,轉換狀態,同時通知主程序接收完畢F=46
        JZ ZBEND;向主機發數據,否則等待接收數據
            AJMP    MAIN1
ZBEND :ACALLFPC  ;串口發送數據到主機
            AJMPMAIN1
INIT_PL2000A: ;檢查PL2000A/PL2101的捕獲門限是否正確,錯誤復位靠上電置初值
            SETB     RXD_TXD
            SETB     R_T       ; R/〒為“1”、接收態
            SETB     HEAD; HEAD發生下降沿產生中斷后,將 RXD_TXD狀態讀入緩沖字節
            MOV     R0,#READ_BUF
            MOV    B,#1
            MOV    R1,#0B1H   ;讀命令
            MOV      R2,#48H    ;PL2000A/PL2101的捕捉門限地址
            LCALL RDOG
            ACALL  RD_X    ;讀取1個字節
            MOV     A,@R0
            CJNE     A,#30H,EER
            SETB     RXD_TXD
            SETB     R_T
        RET

EER:     CLR EA  ;錯誤復位
      SJMP     EER

            ORG 0100H;中斷接收,R/〒為“1”、接收態;在HEAD對應引腳產生中斷時,將RXD_TXD 管腳比特數據移位到C并保存;等待下一次HEAD中斷,直到按規約接收一次完整幀;進行數據處理。
TRANCIEVE:
            PUSH    PSW      ;TRANCIEVE
            PUSH    ACC
            MOV     A,R0
            PUSH    ACC
            MOV     A,R1
            PUSH    ACC
       LCALL   RDOG
            MOV     A,RXD_TXD_BYTE
            CJNE     A,#'R',TRANS      ;;;;;;;R=52,A=R是接收,否則發送
            LCALL  RECEIVE_DATA  ;接收
RETURN_TR_RC: POP ACC
            MOV     R1,A
            POP ACC
            MOV     R0,A
            POP ACC
            POP PSW
            RETI

TRANS: LCALL  TRANS_BEGIN         ;RX_TX=0,轉發射
            SJMP     RETURN_TR_RC
RECEIVE_DATA:
       SETB     RXD_TXD
            SETB     R_T
            MOV     C,RXD_TXD              ;R_T狀態入Cflag
            MOV     A,HEAD_WORD_L     ;讀入同步字低位字節
            RLCA                                      ;ACCCF右環移位
            MOV     HEAD_WORD_L,A     ;回寫同步字低位字節

TB:        JB 20H.0,REC_NOR        ;R_HEAD_BIT=1,幀同步已被接收,進入正常接收狀態
       MOV   A,HEAD_WORD_H
       SUBB A,#9
       JNC TB1
       MOV     A,HEAD_WORD_L
            CJNE  A,#0FFH,RC  ;HEAD_WORD_H=0x09,接收到的高字節不符合,返回
           INC   HEAD_WORD_H
       SETB P1.0
       SETB P1.3
       AJMP   RETURN_RC
16Bit的滑動窗口中搜索同步幀,當搜索到 0x090xAF同步幀頭后,表示已經進入同步狀態;
TB1:      MOV A,HEAD_WORD_L;
       CJNE  A,#0AFH,RETURN_RC
       MOV   HEAD_WORD_H ,#0
            SETB  20H.0                         ;符合同步字節,設置進入正常數據接受態
            CLR p1.0
            MOV   BIT_SEND_CNT,#9    ;設置比特位計數器
            RET                                         ;此次接收完成

REC_NOR: DJNZ BIT_SEND_CNT,return_rc;一個字節未接收完,繼續接收,否則按字節處理
            MOV     A,TR_RC_BUF_1              ;讀入接收緩沖區基址
            MOV     R1,A      ;
            MOV     @R1,HEAD_WORD_L      ;將接收到的數據存入相應的RAM
       INC     TR_RC_BUF_1
            MOV     A,TR_RC_BUF_1              ;讀入接收緩沖區基址30H,59h-30h=29h=41d
            CJNEA,#59H,RETURN_OTHERS     ;數據尚未全部接收完,繼續接收
            MOV     RXD_TXD_BYTE,#'F'  ;接收完,轉換狀態,同時通知主程序接收完畢F=46
            MOVTR_RC_BUF_1,#30H        ;接收完40個數據,恢復發送數據緩沖區起始地址
            CLR 20H.0
       LCALL  INIT_PL2000A     ;初始化PL2000A/PL2101
        SETB P1.0
        RET

RETURN_OTHERS:    MOV   BIT_SEND_CNT,#9    ;設置比特位計數器
            MOV A,  HEAD_WORD_L
            XRL A,#55H
            JNZ AAA
       CLR P1.3
AAA:     MOV     HEAD_WORD_L,#0    ;接收完一個字節后清0
       ACALL YSA
RC:    MOV   HEAD_WORD_H ,#0
            RET
RETURN_RC:             RET

      ORG 0300h
TRANS_BEGIN:  CLR R_T                         ; R/〒為“0”、發射態;
SETBP1.5                         ;合上繼電器
TRAN1:        MOVA,TR_RC_BUF_1             ;=30H
                   CJNEA,#59H,TRANS_DATA     ;
                   MOV TR_RC_BUF_1,#21H  ;發送完40個數據,恢復發送數據緩沖區起始地址
TRANS_ERR:
             MOV     RXD_TXD_BYTE,#'R'  ;發射結束,置接收標志
                          SETB R_T
               SETB P1.0
               SETB P1.3
RETURN_TR:      RET

TRANS_DATA:    DJNZ  BIT_SEND_CNT,TRANS_GOON ;沒發送完8位繼續
TR_NOR_1:        MOV     BIT_SEND_CNT,#9     ;每字節8bit
                          INC TR_RC_BUF_1
                          MOV     A,TR_RC_BUF_1
                          MOV     R0,A
                          MOV     TMP_SEND_BYTE,@R0    ;讀入欲發送數據
                CLR P1.0
                          RET
TRANS_GOON:   MOV A,TMP_SEND_BYTE
                          RLC A
                          MOV     RXD_TXD,C  ;發送當前BIT
                          MOV     TMP_SEND_BYTE,A
                   CLRP1.5                                         ;斷開繼電器
                          RET

   S:    PUSHACC;串口通信程序,可以和微機通信
            PUSH PSW
            PUSH DPH
            PUSH DPL
            MOV R2,#03H
          MOV R1,#10H
            MOV R0,#1CH
;     CLR 0AFH
          SETB  REN  ;允許接收
S2:   JNB  RI,  $             ;查詢接收,RI=0等待,RI=1時收到
       CLR   RI
       MOV  A,  SBUF   ;讀輸入緩沖區
            MOV @R1,A
            DEC R1
            LCALL  ASC
       SWAP   A
       MOV   1FH,   A
       INC   R1
       LCALL  ASC
       ORL  1FH,   A
            MOV @R0,1FH
            INC R0
            INC R1
            DJNZ R2,S2
            ACALLRDOG     ;關閉看門狗
            MOV A,1CH
       XRL  A,   #0AH
       JNZ S1
       MOV     RXD_TXD_BYTE,#'S'
            AJMP SEND

S1:    MOV   A,1CH
         XRL  A,   #0BH
            JNZ SEND
       MOV     RXD_TXD_BYTE,#'R'

SEND:   POP DPL
            POP DPH
            POP PSW
            POP ACC
            SETB 0AFH
            RETI

ASC:   MOV   A,   @R1
       CLR   C
       SUBB   A,   #30H
       MOV   R6,   A
       SUBB  A,   #0AH
       JC    ASCEND
       XCH   A,   R6
       SUBB  A,   #07H
       MOV   R6,  A
ASCEND:MOV   A,   R6
       RET

FPC:      MOV R7,#41;串口發送數據到主機(PC)
        MOV R1,#30H
        CLR P1.0
        CLREA
FSD:      CLR REN
             MOV    A,   @R1
       ANL    A,     #0F0H
       SWAP   A
       MOV    SBUF,   A
       JNB    TI,    $
       CLR    TI
       MOV    A,  @R1
       ANL    A,     #0FH
       MOV    SBUF,   A
       JNB    TI,    $
       CLR    TI
       INC R1
       ACALL  RDOG
       ACALL YSB
       DJNZ R7,FSD
       SETB REN
       SETB EA
       SETB P1.0
       MOV     RXD_TXD_BYTE,#'R'
       RET

      ORG 0600H
;子程序1:打開寫保護子程序
WR_OPEN:
      MOV     40H,#80H
      MOV     R0,#40H
      MOV     R1,#0B0H
      MOV     R2,#4FH
      MOV     B,#1
      LCALL   WR_X
      RET

;;子程序2:關閉寫保護子程序
WR_CLOSE:
      MOV     40H,#30H
      MOV     R0,#40H
      MOV     R1,#0B0H
      MOV     R2,#4FH
      MOV     B,#1
      LCALL   WR_X
      RET

;子程序3:讀同步門限子程序,同步門限默認值為30H
RD_SNY:
      MOV     R0,#40H
      MOV     R1,#0B1H
      MOV     R2,#48H
      MOV     B,#1
      LCALL   RD_X
      RET

;子程序4:讀時間子程序
RD_TIME:
      MOV     R0,#40H
      MOV     R1,#0B1H
      MOV     R2,#40H
      MOV     B,#7
      LCALL   RD_X
      RET

;子程序5:從PL2000A/PL2101中讀多字節數據子程序
;(R2) 數據在PL2000A/PL2101中的首地址
;(R0) 讀取數據在RAM中的存放地址
;(B) 需讀數據個數
;(R1) 讀命令字

RD_X:
      LCALL   I2C_START
      MOV     A,R1
      CLR ACC.0
      LCALL   WRITE_BYTE
      JC   RDA_RET
      MOV     A,R2
      LCALL   WRITE_BYTE
      JC   RDA_RET
      LCALL   I2C_START
      MOV     A,R1
      LCALL   WRITE_BYTE
      JC   RDA_RET
      DJNZ     B,RDA_S1
      SJMP     READ_ONE

RDA_S1:
      LCALL   READ_BYTE
      MOV     @R0,A
      INC R0
      CLR ROM_SDA
      SETB     ROM_SCL
      NOP
      CLR       ROM_SCL
      SETB     ROM_SDA
      DJNZ     B,RDA_S1

READ_ONE:
      LCALL   READ_BYTE
      MOV     @R0,A
      SETB     ROM_SDA
      SETB     ROM_SCL

RDA_RET:
      LCALL   I2C_STOP
      NOP
      NOP
      RET
             ORG 0700H
;子程序6:向PL2000A/PL2101寫數據子程序
;(R2) 數據在PL2000A/PL2101中的首地址
;(R0) 寫數據在RAM中的地址
;(B)需寫數據個數
;(R1) 寫命令字
WR_X:
      LCALL   I2C_START
      MOV     A,R1
      LCALL   WRITE_BYTE
      JC   WR_RET
      MOV     A,R2
      LCALL   WRITE_BYTE
      JC   WR_RET
      MOV     A,@R0
      LCALL   WRITE_BYTE
      JC   WR_RET
      INC R0
      INC R2
      LCALL   I2C_STOP
      DJNZ     B, WR_X

WR_RET:
      NOP
      NOP
      RET

;子程序7:向PL2000A/PL2101送起始位子程序
I2C_START:
      CLR       ROM_SCL
      NOP
      SETB     ROM_SDA
      NOP
      SETB     ROM_SCL
      NOP
      CLR ROM_SDA
      RET

;子程序8:向PL2000A/PL2101送停止位子程序
I2C_STOP:
      CLR       ROM_SCL
      NOP
      CLR ROM_SDA
      NOP
      SETB     ROM_SCL
      NOP
      SETB     ROM_SDA
      NOP
      NOP
      CLR       ROM_SCL
      NOP
      CLR       ROM_SDA
      RET

;子程序9:從PL2000A/PL2101讀一字節子程序
READ_BYTE:
      MOV     R7,#08H

RD_B1:
      SETB     ROM_SDA
      NOP
      SETB     ROM_SCL
      NOP
      MOV     C,ROM_SDA
      RLC A
      CLR       ROM_SCL
      DJNZ     R7,RD_B1
      RET

;子程序10:向PL2000A/PL2101寫一字節子程序
WRITE_BYTE:
      MOV     R7,#08H
WR_B1:
      CLR       ROM_SCL
      RLC       A
      MOV     ROM_SDA,C
      NOP
      SETB     ROM_SCL
      DJNZ     R7,WR_B1
      CLR ROM_SCL
      NOP
      SETB     ROM_SDA
      NOP
      SETB     ROM_SCL
      MOV     C,ROM_SDA
      CLR ROM_SCL
      RET

YS:   MOV  7EH,   #0FFH;延時           ;7E---4EH
              ACALL RDOG
YS1:   MOV  7FH,   #0FFH                ;7F---4FH
YS2:   DJNZ 7FH,   YS2
         DJNZ 7EH,   YS1
         RET

  YSA:  MOV  7FH,   #0FFH
  YSA1:  DJNZ 7FH,   YSA1
         RET

  YSB:   MOV 7EH,   #50H
  YSB1:  DJNZ7EH,   YSB1
         RET
RDOG:    SETB   P1.7
         NOP
         NOP
         NOP
         NOP
         CLR    P1.7
         NOP
         NOP
         NOP
         NOP
         RET
   ORG 07F0H
   DB0FFH,0FFH,0FFH,0FFH,0FFH,09H,0AFH
END


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

使用道具 舉報

沙發
ID:454295 發表于 2021-8-26 11:22 | 只看該作者
剛好要做載波通訊的項目,值得參考
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本午夜免费福利视频 | 久久爱黑人激情av摘花 | 一级毛片视频免费观看 | 国产一区二区三区四区三区四 | 国产精品99久久久久久www | 91伦理片 | 久久久久久亚洲精品 | 久久国产精品久久 | 99av成人精品国语自产拍 | 国产一区欧美一区 | 国产91黄色| 99视频在线免费观看 | 一区在线视频 | 一级特黄色毛片 | 澳门永久av免费网站 | 在线精品一区 | 奇米四色影视 | 蜜月aⅴ免费一区二区三区 99re在线视频 | www.xxxx欧美| 亚洲成人精品一区二区 | 情侣黄网站免费看 | 久久精品视频一区二区三区 | 精品久久久久久久 | 日本视频免费观看 | 中文福利视频 | 韩日在线 | 久热伊人 | 国产精品免费视频一区 | 在线免费观看亚洲 | 国产精品久久久久久久久久久免费看 | 国产欧美一区二区三区国产幕精品 | 羞羞视频网站免费观看 | 欧美日韩一区在线 | 欧美亚洲国语精品一区二区 | 超碰综合 | 福利视频一区二区 | 日韩有码一区二区三区 | 国产精品欧美一区二区 | 亚洲精品2区 | 日本不卡一区二区三区在线观看 | 欧美日韩在线不卡 |