導航:首頁 > 操作系統 > 單片機實現模擬乘法器

單片機實現模擬乘法器

發布時間:2023-02-26 22:33:37

A. 單片機乘法的實現

org 0000h
jmp start
start:
MOV SP,#60H
mov r2,#20h
mov r3,#34h
mov a,#99h
lcall bhd
lcall hbd
NOP
NOP

;三位元組除以單位元組子程序
;入口條件:被除數在R3、R4、R5中,除數在R7中。
;出口信息:OV=0 時,雙位元組商在R4、R5中,OV=1 時溢出。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
DV31:
CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;商溢出
RET
DV30:
MOV R2,#10H;求R3R4R5/R7-→R4R5
DM23:
CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24:
DJNZ R2,DM23
MOV A,R3 ;四捨五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25:
INC R5
MOV A,R5
JNZ DM26
INC R4
DM26:
CLR OV
RET ;商在R4R5中

;兩位元組除以單位元組子程序
;入口條件:被除數在R4、R5中,除數在R7中。
;出口信息:OV=0 時,單位元組商在R3中,OV=1 時溢出。
; 余數在r4中
;影響資源:PSW、A、R3~R7 堆棧需求: 2位元組
D457:
CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV;商溢出
RET
DV50:
MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51:
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52:
CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四捨五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53:
INC R3
DV54:
CLR OV
RET

;四位元組除以單位元組子程序
;入口條件:被除數在R2、R3、R4、R5中,除數在R7中。
;出口信息:a<ff 時三位元組商在R3、r4、r5中,a=ff 時溢出。
; 余數在r2中
;影響資源:PSW、A、R2~R7 堆棧需求:2位元組
;input dat1,dat2,dat3,r5 ;r0(h),:divisor dat2(h) dat3() r5(l):quotient
;dat1(h)dat2(l):resie
F_DIV:
clr c
mov a,r7
jz fd_over
fd_begin:
mov a,r2
subb a,r7
jc no_overflow
mov a,#0ffh
ret
no_overflow:
clr a
mov r6,#18h
fdiv0:
lcall rlc4
jc goushang
mov a,r2
subb a,r7
jc fdnext
inc r5
mov r2,a
fdnext:
djnz r6,fdiv0
jmp fdone
goushang:
mov a,r2
subb a,r7
inc a
inc r5
mov r2,a
jmp fdnext
fdone:
clr a
clr ov
ret
fd_over:
mov a,#0ffh
ret
rlc4:
clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
ret
;DIVD功能:雙位元組二進制無符號數除法
;入口條件:被除數在R2、R3、R4、R5中,除數在R6、R7中。
;出口信息:OV=0 時,雙位元組商在R4、R5中,OV=1 時溢出。
; 余數在r2 r3中
;影響資源:PSW、A、B、R1~R7 堆棧需求: 2位元組
DIVD:
CLR C ;比較被除數和除數
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1:
MOV B,#10H ;計算雙位元組商
DVD2:
CLR C ;部分商和余數同時左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;計算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;結果判斷
JC DVD3
MOV R2,A ;夠減,存放新的余數
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3:
DJNZ B,DVD2;計算完十六位商(R4R5)
; MOV A,R4 ;商移到R2R3中
; MOV R2,A
; MOV A,R5
; MOV R3,A
CLR OV ;設立成功標志
RET
;雙位元組乘以雙位元組乘法
;入口條件:被乘數在R2、R3中,乘數在R6、R7中。
;出口信息:乘積在R2、R3、R4、R5中。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
MULD:
MOV A,R3 ;計算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暫存部分積
MOV R5,A
MOV A,R3 ;計算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;計算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分積
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;計算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分積
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;雙位元組乘以單位元組乘法
;入口條件:被乘數在R2、R3中,乘數在R7中。
;出口信息:乘積在R2、R3、R4中。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2位元組
mul21:
mov a,r3
mov b,r7
mul ab
mov r4,a
mov r5,b
mov a,r2
mov b,r7
mul ab
add a,r5
mov r3,a
mov a,b
addc a,#00h
mov r2,a
ret
;功能:雙位元組十六進制整數轉換成雙位元組BCD碼整數
;入口條件:待轉換的雙位元組十六進制整數在R6、R7中。
;出口信息:轉換後的三位元組BCD碼整數在R3、R4、R5中。
;影響資源:PSW、A、R2~R7 堆棧需求: 2位元組
HB2:
CLR A ;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉換雙位元組十六進制整數
HB3:
MOV A,R7 ;從高端移出待轉換數的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD碼帶進位自身相加,相當於乘2
ADDC A,R5
DA A ;十進制調整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙位元組十六進制數的萬位數不超過6,不用調整
DJNZ R2,HB3 ;處理完16bit
RET

;入口條件:待轉換的單位元組BCD碼整數在累加器A中。
;出口信息:轉換後的單位元組十六進制整數仍在累加器A中。
;影響資源:PSW、A、B、R4 堆棧需求: 2位元組
BCDH:
MOV B,#10H ;分離十位和個位
DIV AB
MOV R4,B ;暫存個位
MOV B,#10 ;將十位轉換成十六進制
MUL AB
ADD A,R4 ;按十六進制加上個位
RET

;雙位元組BCD碼整數轉換成雙位元組十六進制整數
;入口條件:待轉換的雙位元組BCD碼整數在R2、R3中。
;出口信息:轉換後的雙位元組十六進制整數仍在R2、R3中。
;影響資源:PSW、A、B、R2、R3、R4 堆棧需求:4位元組
BH2:
MOV A,R3 ;將低位元組轉換成十六進制
LCALL BCDH
MOV R3,A
MOV A,R2 ;將高位元組轉換成十六進制
LCALL BCDH
MOV B,#100 ;擴大一百倍
MUL AB
ADD A,R3 ;和低位元組按十六進制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;標號: BHD功能:單位元組BCD碼小數轉換成單位元組十六進制小數
;入口條件:待轉換的單位元組BCD碼數在累加器A中。
;出口信息:轉換後的單位元組十六進制小數仍在累加器A中。
;影響資源:PSW、A、R2、R3 堆棧需求: 2位元組
BHD:
MOV R2,#8 ;准備計算一個位元組小數
BHD0: ADD A,ACC ;按十進制倍增
DA A
XCH A,R3
RLC A ;將進位標志移入結果中
XCH A,R3
DJNZ R2,BHD0 ;共計算8bit小數
ADD A,#0B0H ;剩餘部分達到0.50否?
JNC BHD1 ;四舍
INC R3 ;五入
BHD1:
MOV A,R3 ;取結果
RET
; 標號: HBD功能:單位元組十六進制小數轉換成單位元組BCD碼小數
;入口條件:待轉換的單位元組十六進制小數在累加器A中。
;出口信息:CY=0時轉換後的BCD碼小數仍在A中。CY=1時原小數接近整數1。
;影響資源:PSW、A、B 堆棧需求: 2位元組
HBD:
MOV B,#100 ;原小數擴大一百倍
MUL AB
RLC A ;余數部分四捨五入
CLR A
ADDC A,B
MOV B,#10 ;分離出十分位和百分位
DIV AB
SWAP A
ADD A,B ;拼裝成單位元組BCD碼小數
DA A ;調整後若有進位,原小數接近整數1
RET

jmp $
end

B. 新概念51單片機C語言教程的作品目錄

第1篇入門篇
1.1單片機概述
1.1.1什麼是單片機
1.1.2單片機標號信息及封裝類型
1.1.3單片機能做什麼
1.1.4如何開始學習單片機
1.251單片機外部引腳介紹
1.3電平特性
1.4二進制與十六進制
1.4.1二進制
1.4.2十六進制
1.5二進制的邏輯運算
1.5.1與
1.5.2或
1.5.3非
1.5.4同或
1.5.5異或
1.6單片機的C51基礎知識介紹
1.6.1利用C語言開發單片機的優點
1.6.2C51中的基本數據類型
1.6.3C51數據類型擴充定義
1.6.4C51中常用的頭文件
1.6.5C51中的運算符
1.6.6C51中的基礎語句
1.6.7學習單片機應該掌握的主要內容
2.1Keil工程建立及常用按鈕介紹
2.1.1Keil工程的建立
2.1.2常用按鈕介紹
2.2點亮第一個發光二極體
2.3while語句
2.4for語句及簡單延時語句
2.5Keil模擬及延時語句的精確計算
2.6不帶參數函數的寫法及調用
2.7帶參數函數的寫法及調用
2.8利用C51庫函數實現流水燈
第2篇內外部資源操作篇
3.1數碼管顯示原理
3.2數碼管靜態顯示
3.3數碼管動態顯示
3.4中斷概念
3.5單片機的定時器中斷
4.1獨立鍵盤檢測
4.2矩陣鍵盤檢測
5.1模擬量與數字量概述
5.2A/D轉換原理及參數指標
5.3ADC0804工作原理及其實現方法
5.4D/A轉換原理及其參數指標
5.5DAC0832工作原理及實現方法
5.6DAC0832輸出電流轉換成電壓的方法
第6章串列口通信原理及操作流程
6.1並行與串列基本通信方式
6.2RS-232電平與TTL電平的轉換
6.3波特率與定時器初值的關系
6.451單片機串列口結構描述
6.5串列口方式1編程與實現
6.6串列口列印在調試程序中的應用
第7章通用型1602,12232,12864液晶操作方法
7.1液晶概述
7.2常用1602液晶操作實例
7.3常用12232液晶操作實例
7.4常用12864液晶操作實例
第8章I2C匯流排AT24C02晶元應用
8.1I2C匯流排概述
8.2單片機模擬I2C匯流排通信
8.3E2PROMAT24C02與單片機的通信實例
第9章基礎運放電路專題
9.1運放概述及參數介紹
9.2反相放大器
9.3同相放大器
9.4電壓跟隨器
9.5加法器
9.6差分放大器
9.7微分器
9.8積分器
第3篇提高篇
第10章定時器/計數器應用提高
10.1方式0應用
10.2方式2應用
10.3方式3應用
10.452單片機定時器2介紹
10.5計數器應用
第11章串列口應用提高
11.1方式0應用
11.2方式2和方式3應用
11.3單片機雙機通信
11.4單片機多機通信
第12章指針
12.1指針與指針變數
12.1.1內存單元、地址和指針
12.1.2指針變數的定義、賦值與引用
12.2指針變數的運算
12.3指針與數組
12.3.1指針與一維數組
12.3.2指針與多維數組
12.4指針與函數
12.4.1指針作為函數的參數
12.4.2指向函數的指針
12.4.3指針型函數
12.5指針與字元串
12.5.1字元串的表達形式
12.5.2字元指針作為函數參數
12.5.3使用字元指針與字元數組的區別
12.6指針數組與命令行參數
12.6.1指針數組的定義和使用
12.6.2指向指針的指針
12.6.3指針數組作為main()函數的命令行參數
12.7指針小結
12.7.1指針概念綜述
12.7.2指針運算小結
12.7.3等價表達式
12.8C51中指針的使用
12.8.1指針變數的定義
12.8.2指針應用
第13章STC系列51單片機功能介紹
13.1單片機空閑與掉電模式應用
13.2「看門狗」概念及其應用
13.3用軟體實現系統復位
13.4內部擴展RAM的應用
13.5擴展P4口的應用
13.6內部E2PROM的應用
13.7STC89系列單片機內部A/D應用
13.8STC12系列單片機內部A/D應用
13.9STC12系列單片機的PCA/PWM介紹
13.10STC12系列單片機的SPI介面介紹
13.11STC12系列單片機的「576MHz」超速運行
第4篇實戰篇
第14章利用51單片機的定時器設計一個時鍾
14.1如何從矩陣鍵盤中分解出獨立按鍵
14.2原理圖分析
14.3實例講解
第15章使用DS12C887時鍾晶元設計高精度時鍾
15.1時鍾晶元概述
15.2DS12C887時鍾晶元介紹
15.3如何用TX-1C實驗板擴展本實驗
15.4原理圖分析
15.5實例講解
第16章使用DS18B20溫度感測器設計溫控系統
16.1溫度感測器概述
16.2DS18B20溫度感測器介紹
16.3實例講解
第17章太陽能充/放電控制器
17.1控制器原理圖分析
17.2控制器板上元件介紹
17.3實例講解
第18章VC、VB(MSCOMM控制項)與單片機通信實現溫度顯示
18.1VCMSCOMM控制項與單片機通信實現溫度顯示
18.2VBMSCOMM控制項與單片機通信實現溫度顯示
第5篇拓展篇
第19章使用Protell99繪制電路圖全過程
19.1繪制電路板概述
19.2建立工程
19.3製作元件庫
19.4添加封裝及製作PCB封裝庫
19.5錯誤檢查及生成PCB
19.6布線電氣特性設置
19.7自動布線和手動布線
第20章ISD400x系列語音晶元應用
20.1ISD400x系列語音晶元介紹
20.2ISD400x系列語音晶元操作規則
20.3ISD400x系列語音晶元應用實現
第21章電機專題
21.1直流電機原理及應用
21.2步進電機原理及應用
21.3舵機原理及其應用
第22章常用元器件介紹
22.1二極體
22.2電容
22.3場效應管
22.4光耦
22.5蜂鳴器
22.6繼電器
22.7自恢復保險
22.8瞬態電壓抑制器
22.9晶閘管(可控硅)
22.10電荷泵
第23章直流穩壓電源專題
23.1整流電路
23.2濾波電路
23.3穩壓電路
23.4集成穩壓模塊的使用
23.5串聯開關型穩壓電源
第24章運放擴展專題
24.1簡單低通濾波器
24.2「電流-電壓」轉換電路
24.3光電放大器
24.4精密電流源
24.5可調參考電壓源
24.6復位穩定放大器
24.7模擬乘法器
24.8全波整流器和平均值濾波器
24.9正弦波振盪器
24.10三角波發生器
24.11自動跟蹤對稱電源
24.12可調實驗電源
24.13運放相關術語表
附錄A天祥電子開發實驗板簡介
A.1TX-1C51單片機開發板(配套詳細視頻教程)
A.2AVR單片機開發板(配套詳細視頻教程)
A.3PIC單片機開發板(配套詳細視頻教程)
A.4J-Link全功能ARM模擬器
A.5三星S3C44B0ARM7入門級開發板
A.6三星S3C44B0ARM7提高級開發板
A.7TX-51STAR51單片機開發板(配套詳細視頻教程)
參考文獻

C. 單片機乘法指令計算步驟求解

……4Eh×5Dh = 1C56h 啊,你在草稿紙手算一下,或者直接計算器按就行。

十六進制乘法你不熟的話,可以先都轉成十進制,用十進制乘法得出乘積,再轉成十六進制。
4Eh = 78d,5Dh = 93d
78×93 = 7254d
7254d = 1C56h
好好學習天天向上

D. 32位單片機計算兩個int16的數相乘和兩個int32的數相乘,所花的周期一樣嗎

一般是一樣的。


這個具體可以查一下晶元內核指令代碼的手冊,如果有硬體乘法指令的系統,16位運算與32位運算所用時間,一般是一樣的。

樓上的忽略了32位機這個前提。一般在32位機上是會有硬體乘法指令或者是乘法器部件,是可以在單周期內計算32位乘法的。而16位的乘法,一般都是擴展成32位的乘法來實現,所以說時間一般來說是一樣的,都是一個周期。

特殊的情況包括,

  1. 沒有硬體乘法,使用移位加程序模擬乘法功能,32位的乘法時間可能會比16位乘多一倍,當然這還取決於乘法模擬演算法的具體實現。

  2. 用32位實現16位乘法,可能需要對16位數進行額外的擴展調整,這時是16位的慢一點。一般在C語言中就是根據系統字長規定int的類型,所以在C語言中如果不考慮移植,多使用int可能會提高編譯的效率,在32位機上最好使用32位的數據進行計算反而更快一些。

E. 怎樣設計一個用ADE7755和用AT89S51的單片機設計出一個電能表

隨著電力的需求越來越大,不同時間段用電量不均衡的現象日趨嚴重。為了合理地調控電力負荷和節約能源,電力公司已開始鼓勵使用多費率電能表。傳統的多費率電能表一般採用機械轉盤式計量方式,計量精度隨機械磨損而降低,時段設置單一,人工抄表勞動強度大,且偶有竊電情況發生等諸多弊端。本文給出基於AT89S52單片機一種新型多費率單相電能表設計,採用AD7755電能計量晶元,電能計量准確。該電能表具有分時段計量,液晶顯示,自動回抄,時段設置靈活,時間校正及時,新穎的防竊電,功耗低的特點。並對該電能表實驗測試數據進行性了誤差分析,指出電能計量中減小與消除誤差的方法。

1硬體電路設計

1.1總體結構

基於AT89S52單片機完成多費率單相電能表的設計,AT89S52有以下功能,8k位元組Flash閃速存儲器,三級加密程序存儲器,256位元組內部RAM,32個可編程I/O口線,3個16位定時/計數器,一個6向量兩級中斷結構,一個全雙工串列通信口,片內振盪器及時鍾電路,兩種低功耗電工作方式。是一個比較適合於以開關量信號輸入檢測的性價比較高的8位單片機。電能表硬體設計主要包括六大模塊,電壓和電流檢測電能計量電路AD7755模塊,串列存儲與看門狗X25045電路模塊,HT1621液晶顯示電路模塊,串列時鍾S3530A電路模塊,

RS485匯流排通訊電路模塊,防竊電檢測電路模塊,總體結構如圖1所示。

圖1:系統總體結構框圖

1.2電能計量

單相電能計量採用美國ADI公司的AD7755低功耗晶元實現。AD7755內部除了ADC和濾波、相乘電路外都採用了數字電路,有效的消除了尖脈沖等干擾信號,使得它在惡劣的環境條件下仍能保持極高的正確度和穩定性。對單相迴路中的電壓、電流信號采樣,計算出功率並積分將其轉換為電能脈沖輸出,CPU對來自AD7755輸出端CF的脈沖進行計量,計算出電能表的累計用電量。電能與脈沖的關系為:W=M/C,式中的W為電能,單位為千瓦時,M為脈沖累計個數,C為電表脈沖常數,選取C=1600,每千瓦時為1600個脈沖。

1.3RS485通訊MAX487晶元實現多費率電能表的RS485通訊控制

MAX487晶元具有RS485通訊協議,可以帶下位機128個、傳輸間隔大於1km、傳輸速率達250kb/s。電能表通過RS485匯流排與用電治理計算機相連,每隻電能表都有一個確定的唯一的八位十六進制的表號,初次安裝,電工需要把用戶信息與表號記錄後輸進用電治理計算機中,完成用戶與治理計算機的連接。治理計算機採用廣播式通訊方式下傳時段設置與校時信息,此時不帶有地址信息,而電能表中斷接收;上位機採用呼喚地址的方式上傳信息,即呼喚誰的地址,那隻電能表便把信息及其校驗碼打包向上傳送給用電治理計算機,實現電能回抄。MAX487的DE為發送器使能端,DE為1時發送器可以工作,DI為輸進端,A、B為輸出端。當DE為0時,停止發送輸出端為高阻。RE為輸進使能端,RE為0時答應接收器工作,A、B為輸進端,RO為輸出端;RE為1時,接收器被禁止,RO為高阻狀態。因此,採用半雙工通訊方式,把DE和RE相連然後接AT89S52的P1.4,通過AT89S52的P1.4引腳來控制收發工作狀態。

1.4串列存儲器

串列存儲器採用美國XICOR公司的X25045低功耗晶元,它具備看門狗定時器WTD、電源電壓監控和具有512位元組的串列E2PROM存儲器三種功能。WTD可以設置為200ms、600ms、1400ms喂狗定時間隔,軟體編程寫進X25045中。在程序正常運行期間,WTD在定時間隔內收到觸發信號,確保程序正常運行,一端WTD在定時間隔內沒有收到觸發信號,X25045便通過RESET引腳輸出一個高電平信號,觸發電能表復位來防止程序跑飛。X25045作為串列存儲晶元,512位元組分別用於存儲電能表編碼,多費率時段設置,上月和當月分時段的峰、平、谷電量和總累計電量等信息,存儲次數可改寫十萬次,數據可保存一百年,它與AT89S52可採用SPI協議匯流排介面相連。

1.5時鍾電路

時鍾電路採用S3530A晶元完成,它是一種支持I2C匯流排的低功耗時鍾晶元,它按照CPU經RS485通訊接收校時的數據來設置時鍾和日歷,靠自身的振盪繼續走時。在S3530A的Xin和Xout引腳之間跨接32.768kHz的晶體器振盪器。它通過兩線式與CPU連接,SDA腳和SCL腳分別接AT89S52的P2.0和P2.1,並有兩個中斷報警引腳可設置為輸出秒或分同步脈沖,向AT89S52提供周期為1秒的中斷信號,單片機系統將根據該信號通過I2C通訊介面讀取當前的時間,計算出該時刻所屬的時段,實現多費率電能表的分時段計量電能。該時鍾電路帶有備用鋰電池,正常工作時有電源Vcc供電,同時給3.6V鋰電池充電;當出現停電時,自動切換鋰電池為時鍾電路供電,即使停電時鍾走時也正確。

1.6液晶顯示

採用HOLTEK公司HT1621的LCD顯示驅動晶元,實現十六位LCD數字顯示。HT1621是具有128段(32×4)內置存儲器的LCD驅動器,它片內包括控制與計時電路、顯示RAM、LCD驅動及偏置、監視定時器等,採用了48腳SSOP封裝,具有體積小和功耗低的優點,非常適合於應用電能表中,其介面電路和外圍電路簡單,它和AT89S52之間採用串列介面,只需三根線。AT89S52的P2.4、P2.5、P2.6分別接到它的CS片選、WR寫答應、DATA串列數據三個引腳上,來控制刷新顯示RAM緩沖區。另外應用中,在VDD、VLCD間接一個20kΩ可調電阻,用來調節LCD顯示對比度,調節電阻,使得VDD=5V,VLCD=4V對比度較好。

1.7防竊電檢測等

記錄電能表接線端子蓋被人為打開的次數而分析是否竊電。電能表被安裝好後將表殼打上鉛封,用戶不能私自打開電能表接線的表蓋破壞鉛封,否則屬於竊電行為。因此我們採用霍爾感測器,檢測接線端子蓋是否被打開。假如接線端子蓋被打開,AT89S52的P1.6引腳的電平變化,就檢測到開蓋一次,記錄表的接線端子蓋被人為打開和破環的次數,判定是否有竊電發生,當發現有竊電現象時,給出報警、斷電並及時上傳到上位治理計算機。實踐證實該新奇的防竊電技術有效的防止竊電情況發生,效果較好。檢測電路框圖如圖2所示。

圖2:防竊電檢測框圖

掉電保護電路,用AT89S52的P1.7輸進引腳檢測掉電信號,當系統正常工作是P1.7位高電平,當忽然發生斷電時,P1.7變成低電平,採用查詢方式檢測到P1.7的變為低電平後,將進進掉電保護程序。電源電路中有個大濾波電容1000uf/25v,當掉電後能維持系統十多秒的工作時間,確保電能表存儲好重要數據。光電隔離電路,在系統中AD775的脈沖輸出端,繼電器控制端,RS485通訊端分別使用了4N35光電隔離器。通過光的耦合作用傳遞電信號,把干擾源和易受干擾的部分隔離開來,進步系統抗干擾的能力。

2軟體程序設計

2.1軟體程序資源分配

多費率單相電能表軟體程序共包括初始化及主程序,X25045讀寫程序,RS485串列通訊處理程序,中斷處理程序,定時器處理程序,HT1621顯示控製程序,電能分時段計量與掉電處理程序,系統自檢與軟體抗干擾處理八大程序模塊。系統的中斷資源分配為INT0中斷用於AD7755脈沖檢測,INT1用於秒同步檢測,定時器T0用於定時100ms,T1未使用,T2用於串列通訊程序波特率發生器,串列口中斷設置為RS485非同步通訊接收中斷。

2.2程序模塊的設計

電能表的工作過程主程序模塊如圖3所示,每次上電要進行初始化,初始化包括對AT89S52單片機定時器、串列口、中斷等工作方式的設定,寫進串列存儲晶元X25045的控制字,串列時鍾晶元S3530A控制字,串列液晶驅動晶元HT1621控制字。新電能表的初次工作要對X25045初始值設定,包括電能表表號的設置,時段的設置,時鍾的設置,存儲地址的分配等。本系統設置了三個時段,單片機每秒從時鍾晶元S3530A中讀取時鍾值,然後根據串列存儲晶元X25045中預先設置好的時段,分析該時刻屬於哪個時段,根據相應的時段把電能存儲AT89S52的RAM存儲器中,然後電能每累計夠1度便寫進到X25045相應的地址中。16位液晶顯示器輪流顯示時段與電能信息。若有通訊請求將採用中斷方式與上位機進行數據通訊。若停電,將執行掉電保護程序。其它程序模塊流程圖略。

圖3:主程序流程圖

測試結果

該電能表在淄博貝林電子有限公司進行了誤差測試和運行試驗,上位計算機完成用電治理時段設置,設置三個費率時段,第一時段00點00分點到06點30分,為谷電量時段,第二時段06點30點到22點30分,為峰電量時段,第三時段22點30點到24點00分,為平電量時段。費率時段設置由電力供電公司根據國家政策規定設定到計算機治理系統中,通過RS485串列通訊傳送到電能表中,並存儲於X25045中。每月峰、平、谷、累計電量存進電能表中,並打包傳送到上位計算機治理系統,通訊波特率設為9600bit/s。用0.1級標准電子式電能表校驗台作為標准表,該多費率電能表為被測表,貝林電子有限公司針對不同負荷的情況下進行測試,限於篇幅僅列出負荷為5KW時的實測數據如表1所示。測試結果表明該復費率電能表誤差小於1%,屬於1.0級標准。經實驗得知減小電能計量誤差方法,一是通過調節AD7755的匹配電阻調整到精確值;二是該匹配電阻阻值要求隨溫度變化阻值變化較小;三是在電能計量過程中,在時間段的切換時,計量電能的尾數部分不足0.01度的電能計進下一個時間段中,避免了不足0.01度的電能丟失而造成累計電量有誤差。

表1:標准表與被測表丈量值符合5KW

結束語

多費率電能表根據不同的時段設置,實現電能分時計量,採用RS485串列通訊,實現電量自動回抄,實時校時。該電能表經淄博貝林電子有限公司生產表明,設計技術新奇,計量正確,走時精確,時段設置靈活,防竊電設計新奇,各項技術指標均達到國家多費率電能表的技術標准,具有廣闊的應用遠景。

本文作者創新點在於採用AD7755電能計量晶元計量正確;串列X25045存儲靈活可靠,串列時鍾S3530A走時精確,RS485匯流排傳輸可靠性高,防竊電新奇設計。採用I2C匯流排結構多費率單相電能表設計更加公道,具有性價比高的特點

閱讀全文

與單片機實現模擬乘法器相關的資料

熱點內容
手機拍鬼片用什麼app 瀏覽:638
爬山虎app是干什麼用的 瀏覽:503
有哪些寫給程序員的歌 瀏覽:49
成都市命令 瀏覽:993
建立系列文件夾 瀏覽:981
蘋果開機白屏帶文件夾問號 瀏覽:731
體驗服為什麼伺服器會關閉 瀏覽:39
酒店命令 瀏覽:750
中走絲線切割編程視頻 瀏覽:78
衣服壓縮袋手泵原理 瀏覽:714
通達信編程書籍 瀏覽:981
車用壓縮天然氣瓶閥 瀏覽:971
鞋的程序員 瀏覽:259
車的壓縮比是什麼意思 瀏覽:202
網站源碼怎麼傳到文件夾 瀏覽:914
海南壓縮機在哪裡 瀏覽:491
電腦文件夾清晰的文件結構 瀏覽:839
如何把蘋果手機的app轉到安卓 瀏覽:305
java同步並發 瀏覽:249
fw壓縮圖片 瀏覽:258