新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 多費率電能表中基于51單片機串行口紅外通信的設計

        多費率電能表中基于51單片機串行口紅外通信的設計

        作者: 時間:2011-11-04 來源:網絡 收藏

        3 紅外通信軟件設計

        DL/T645-1997《多功能電能表通信》中規定電能表的紅外載波頻率為38kHz±1kHz;初始速率為1200 bps;通信的字節格式為8位二進制碼D0~D7,傳輸時加上一個起始位(0),一個偶校驗位P和一個停止位(1),共11位,傳輸時先傳低位,后傳高位,傳輸序列見圖3。根據以上要求,本設計中紅外載波頻率采用38.4kHz,波特率為1200bps,串行口采用模式3為9位異步通信方式,加1位起始位和1位結束位,傳送一個字節數據為11位。

        多費率電能表中基于51單片機串行口紅外通信的設計

        3.1 紅外載波和定時器/計數器T0設置

        紅外載波頻率f2為38.4kHz,當定時器/計數器T0模式控制器TMOD中C/T=0和M1M0=10時,SSU7301的定時器/計數器T0設置成模式2方式。此時,TL0和TH0預置成1個可以自動重裝的8位的定時器/計數器。用軟件將TL0和TH0預置相同的初值后,當TL0計數值增1溢出時,一方面使TF0置1,申請中斷;另一方面產生的溢出脈沖將TH0的數據值自動打入到TL0中去,不需要用軟件對TL0重新置初值。系統的晶振f1為11.0592MHz,則TL0和TH0的初值計算如下:

        f2=38.4kHz 得T=1/f2=1/38.4k≈26×10-6=26 μs
        所以高頻調制反轉的周期TC=T/2=26/2=13μs

        即定時器/計數器T0的初值TL0=TH0=28-(TC×f1)/12=256-(13×10-6×11.0592×106)/12=256-11.9808≈244=0F4H
        在定時器/計數器T0的中斷服務程序中只用兩條指令即可實現高頻調制,即 CPL P3.4和RETI。

        3.2 串行口和定時器/計數器T1波特率發生器設置

        串行口采用模式3為9位異步通信方式,波特率為1200bps。由串行口控制寄存器SCON的操作模式選擇位SM0、SM1都置1設置為模式3,當定時器/計數器T1模式控制器TMOD中C/T=0和M1M0=10時,SSU7301的定時器/計數器T1設置成模式2方式作為波特率發生器,其波特率表示為:

        波特率=(T1的溢出率)/ n
        當SMOD=0時,n=32;當SMOD=1時,n=16,(本設計中SMOD=0)則
        波特率=(T1的溢出率)×2SMOD / 32
        T1的溢出率=(f1/12)/(28-T1初值)
        得:波特率=(T1的溢出率)×2SMOD / 32
        =[(f1/12)/(28- T1初值)] ×2SMOD / 32
        得:定時器/計數器T1初值
        TL1=TH1=28-(f1×2SMOD )/(12×32×波特率)
        =256-(11.0592×106)/( 12×32×1200)
        =256-24=232=0E8H

        3.3 程序設計

        根據以上兩點參數的設置,51系列單片機SSU7301的匯編語言程序設計如下:
        ;以下為參數設置程序
        MOV TMOD, #22H ;定時器/計數器T0方式2自動重裝模式用于PWM38.4KHZ調
        ;制用 , 定時器/計數器T1方式2自動重裝模式用于串行口通訊波特率發生器
        MOV TH1,#0E8H ;波特率1200時,定時器/計數器T1自動重裝初值
        MOV TL1,#0E8H
        MOV TH0,#0F4H ;38.4KHz高頻頻調制時, 定時器/計數器T0自動重裝初值
        MOV TL0,#0F4H
        SETB ET0 ; 定時器/計數器T0溢出中斷允許位
        SETB TR1 ; 定時器/計數器T1開始定時控制位
        SETB TR0 ; 定時器/計數器T0 開始定時控制位
        MOV PCON,#00H ;SMOD為0不倍增模式
        MOV SCON,#0D0H ;串行口設置為模式3,允許接收
        SETB ES ;串行口允許中斷
        SETB EA ;開總中斷允許位
        ;以下為定時器/計數器T0中斷溢出服務程序
        ORG 000BH; 定時器/計數器T0中斷入口地址
        T0SERVE:CPL P3.4 ; 定時器/計數器T0定時取反P3.4口進行高頻調制
        RETI ;中斷返回
        ;以下為串行口中斷服務程序,以接收一個字節數據為例,多字節以此類推
        ORG 0023H;串行口中斷入口地址
        SENDSERVE:NOP
        NOP
        MOV A,SBUF ;把接收緩沖器的數據送到A寄存器
        … ;進行數據處理及其它功能操作
        RETI ;中斷返回
        ;以下為串行口發送程序,以發送一個字節數據為例, 多字節以此類推
        COMSEND: MOV A,#DATAH ;把數據送到A寄存器
        MOV C,P ;根據A中數據產生的偶校驗位送到進位標志位
        MOV TB8,C ;送偶校驗位到發送的第9位數據
        MOV SBUF,A ;送數據到發送緩沖器
        JNB TI,$ ;以查詢方式等待發送結束
        CLR TI ;清發送中斷標志位
        … ;繼續發送或其它功能操作
        RET 子程序返回

        4 結束語

        本設計的最大特點在于省略了脈沖振蕩器,而僅僅利用上所帶單片機的串行口和2個定時器/計數器,這不僅使在硬件設計上更加簡單、成本更加低廉,而且在軟件上也更加方便、可靠。同時這種紅外通信方式也可以應用在帶串行口和定時器/計數器的單片機應用領域。

        電能表相關文章:電能表原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 永修县| 克山县| 柘城县| 清水河县| 井陉县| 巨野县| 金昌市| 佳木斯市| 邵武市| 广水市| 胶南市| 濉溪县| 藁城市| 桑日县| 寿光市| 清水河县| 苏尼特左旗| 五台县| 大方县| 德惠市| 衡东县| 金寨县| 哈密市| 于都县| 迭部县| 灵台县| 静海县| 金寨县| 大渡口区| 手游| 新建县| 吉安县| 南丰县| 武鸣县| 北流市| 德庆县| 章丘市| 杭锦后旗| 太仓市| 武清区| 西藏|