8戶單相電表 微控制器程式

2022-11-28 14:24:02 字數 5660 閱讀 4450

$nomod51

$include (

sda equ p1.3

scl equ p1.6

jishu equ 30h

org 0000h

ljmp main

org 000bh

ljmp t0_int

main:

lcall chushi呼叫初始化程式 //

數碼管初始值設定

mov 40h,#00

mov 42h,#00

mov 43h,#00

mov 44h,#0ah

mov 45h,#01h

mov 20h,#00h

計數區域清零

mov r7,#10h

mov r0,#jishu

loop3 0---3f區域清零

mov @r0,#00h

inc r0

djnz r7,loop

lcall read

呼叫斷電保護

定時取樣10ms一次

mov tmod,#01h

mov th0,#0d8h

mov tl0,#0f0h

setb et0

setb ea

setb tr0

dy:lcall dis呼叫顯示

sjmp dy

初始化子程式

chushi:

mov sfrpage,#0fh

mov p1mdin,#0ffh ;數字輸入

mov p1mdout,#0efh ;推挽輸出

mov xbr1,#40h交叉開關使能

mov pca0md,#00h ;關閉看門狗

mov psctl,#13h

mov oscicn,#83h ;內部振盪器允許,不分頻

mov dptr,#tab

ret顯示程式

dis:

mov r6,#08

mov r0,#jishu

loop5顯示子程式

lcall disp1

lcall delay戶數轉換延時

lcall write進行保護

inc 45h戶數顯示加一

inc r0

djnz r6,loop5

mov 45h,#01h戶數從一加到八,在變為一,迴圈

retdisp1實現乙個脈衝,0.001度電

mov r3,#8

mov r1,#40h

mov a,@r0脈衝數給a

mov b,#10b==10

div aba除以b,餘數給b,商給a

mov 40h,b把b值送到40h中,即數碼管最右邊一位

mov b,#10

div ab商再除b

mov 41h,b餘數送41h

mov 42h,a商送42h

loop2:

mov a,@r1

cjne r1,#43h,next2將第43h為設為帶小數點為,

mov dptr,#tab1帶小數點為的表

movc a,@a+dptr

sjmp next3

next2:

mov dptr,#tab不帶小數點為的表

movc a,@a+dptr

next3:

mov r4,#8

loop3

jnb acc.0,a1若acc.0=0,則跳動a1

clr p1.1p1.1 時鐘脈衝,上公升沿工作8

setb p1.0p1.0為1時,工作,輸入乙個脈衝,移位一次//

setb p1.1

sjmp a2

a1:clr p1.1

clr p1.0

setb p1.1

a2:rr a

djnz r4,loop38位迴圈inc r1

djnz r3,loop28位迴圈ret中斷取樣程式t0_int:

mov 51h,r3將r0---r7儲存,保護起來//

mov 52h,r5mov 53h,r7mov 50h,r1mov 26h,r6mov 21h,r0mov 54h,r2mov 55h,r4mov th0,#0d8h ;寫入初值,10ms

mov tl0,#0f0h

lcall clear

mov a,p2

cjne a,20h,next4 //與脈衝原始狀態比較

sjmp next

next4:

jnc next判斷是上公升沿還是下降沿

xrl a,20h異或,讀入碼值

mov r0,#jishu

mov r6,#8loop18位數迴圈讀入//

jnb acc.0,next1 //將讀入的碼值加到對應的計數區

inc @r0電度數

next1:

rr a

inc r0

djnz r6,loop1

next:

mov 20h,p2

mov r2,54h

mov r4,55h

mov r0,21h

mov r6,26h

mov r1,50h

mov r3,51h

mov r5,52h

mov r7,53h

reti寫2416程式---

write :

mov 2fh,r0

lcall str;調開始子程式

mov a,#0a0h;控制字,2416的實體地址和寫控制位

lcall i2c_w1w;調向2416寫一位元組並接收訊號子程式

jb f0,write;若寫失敗,從頭開始

mov a,#00h;選擇位址

lcall i2c_w1w

jb f0,write;至此,位址寫完

mov r0,#30h

mov r7,#8

ii1:

mov a,@r0;將30h-3fh的內容寫到2416中

lcall i2c_w1w

jb f0,write

inc r0

djnz r7,ii1

lcall stp;調停止子程

//lcall delay1

mov r0,2fh

ret讀2416程式---

read:

lcall str

mov a,#0a0h;控制字,2416的實體地址和寫控制位

lcall i2c_w1w;調向2416寫一位元組並接收訊號子程式

jb f0,read;若寫失敗,從頭開始

mov a,#00h;選擇位址

lcall i2c_w1w

jb f0,read;至此,位址寫完

lcall str

mov a,#0a1h;控制字,2416的實體地址和讀操作位

lcall i2c_w1w

jb f0,read

mov r0,#30h

mov r7,#16

jj3: lcall i2c_r1w;呼叫從2416中讀1位元組子程式

mov @r0,a;將從2416中讀出的內容儲存到30h-37h中

inc r0

djnz r7,jj3

setb f0

lcall i2c_r1w

lcall stp

ret啟動2402子程式----

str: setb sda

nopsetb scl

nopnop

nopnop

nopclr sda

nopnop

nopnop

nopret停止2402子程式----

stp: clr sda

nopsetb scl

nopnop

nopnop

nopsetb sda

nopnop

nopnop

nopret向2416中寫一位元組並接收2416返回的訊號-------

i2c_w1w: mov r5,#8

clr scl

ar_lp1: nop

nopnop

nopnop

rlc a

mmov sda,c

nopnop

setb scl

nopnop

nopnop

nopclr scl

djnz r5,ar_lp1

nopnop

setb sda

nopnopnop

setb scl

nopnop

nopnop

clr f0

jnb sda,ackend

setb f0

ackend: nop

clr scl

nopnop

ret從2416中讀出1位元組,並傳送應答或非應答訊號

i2c_r1w: mov r5,#08h

rcv: setb sda

nopclr scl

nopnop

nopnop

nopsetb scl

nopnop

nopnop

nopclr c

jnb sda,rcv0

setb c

rcv0: rlc a

nopnop

djnz r5,rcv

clr scl

nopnop

nopnop

clr sda

jnb f0,sendack

setb sda

sendack:nop

nopsetb scl

nopnop

nopnop

nopclr scl

clr f0

ret延時程式delay:

mov r2,#10h

dy1:

mov r3,#200

dy2:

mov r4,#0ffh

dy3:

nopnop

djnz r4,dy3

djnz r3,dy2

djnz r2,dy1

retdelay1: mov r3,#30h

mov r5,#0ffh

loop9 : nop

djnz r5,loop9djnz r3,loop9

ret清零子程式clear:mov r7,#08h

mov r1,#3fh

clr p1.2

nopnop

nopsetb p1.2

loopc1:clr p1.5

nopnop

nopsetb p1.5

jb p1.4,cnt

mov @r1,#00h

dec r1

mov @r1,#00h

sjmp cnt1

cnt:dec r1

cnt1:dec r1

djnz r7,loopc1

rettab:db 88h,0ebh,4ch,49h,2bh,19h,18h,0cbh,8h,09h,07fh ;0,1,2,3,4,5,6,7,8,9,-

tab1:db 80h,0e3h,44h,41h,23h,11h,10h,0c3h,0h,3h;0,1,2,3,4,5,6,7,8,9end

PDH單相電子式多功能電表說明書

pd1056 1h說明書 一 概述 pd1056 1h單相電子式多功能電表是一款集測量 lcd顯示 通訊於一體的電力儀表,可以測量電網頻率。通訊介面支援modbus rtu通訊規約。儀表選配2路開關量輸入和2路開關量輸出,可以實現本地或遠端的開關訊號監測和控制輸出功能 即 遙信 和 遙控 功能 或選...

單相電機的工作原理

當繞組中通入單相交流電流後,產生乙個強弱和正負不斷變化的交變脈動磁場。這磁場沒有旋轉性,不能象三相電機那樣使轉子自行起動。但用外力使轉子往任一方向轉動一下,則轉子便會按外力作用方向繼續旋轉,並逐步提高轉速達到穩定運狀態。為了克服不能自行起動的缺點,設計了各種起動方法,按起動方法的不同,電機可分成五類...

實習報告單相電機的連線

電工電子實習 電機連續轉動控制電路 學號 姓名 指導教師 地點 時間 一 實習目的 1 通過連續轉動控制線路的安裝接線,掌握通過原理圖 電氣接線圖安裝接線的技能。2 熟悉相應低壓電器的功能及接線。3 熟練電工接線及佈線技巧。二 實習要求 1 按元器件明細表將所需器材配齊並檢驗元件質量。2.在操作台上...