?? 4.txt
字號:
;溫度采樣子程序:
;采樣值存放在2100h----2163h
;*********************************************************************************
tmpin: mov r0,#00h ;溫度采樣
naddt: mov a,#00h
mov dptr,#9004h ;讀取溫度值
movx @dptr,a
clr c
jnc $
mov a,adcc ;ADC緩沖
mov dph,#21h
mov dpl,r0 ;從2100H-2164H存放100個功率采樣值
movx @dptr,a
inc r0
cjne r0,#64h,naddt
ret
;*********************************************************************************
;溫度濾波子程序:
;濾波值存放在1ah
;*********************************************************************************
tfilter: mov dptr,#2100h ;溫度濾波
mov r2,#100 ;采樣值首地址
clr psw.5 ;psw.5作為交換標志
dec r2
mov a,r2
mov r3,a
slp1: movx a,@dptr ;讀第一個數
mov r6,a
inc dptr
movx a,@dptr ;讀下一個數
mov b,a
mov a,r6
cjne a,b,snext1
snext1: jnc snext2 ;a>b時不交換
movx @dptr,a ;交換
clr c
mov a,dpl
subb a,#01h
mov dpl,a
mov a,dph
subb a,#00h
mov dph,a
mov a,b
movx @dptr,a
setb psw.5 ;建立交換標志
inc dptr
snext2: djnz r3,slp1 ;內循環
djnz r2,snext3
sjmp ave
snext3: jb psw.5,tfilter
ave: mov r2,#60 ;置初值
mov r5,#00h
mov r4,#00h
mov dptr,#2114h
clr c
slp2: movx a,@dptr ;計算和
add a,r4
mov r4,a
clr a
addc a,r5
mov r5,a
clr c
inc dptr ;修改控制變量
djnz r2,slp2 ;循環終止控制
mov r7,#60
wfcf1: mov r2,#00h
mov r3,#00h
mov r6,#00h
mov b,#16
clp01: clr c
mov a,r4
rlc a
mov r4,a
mov a,r5
rlc a
mov r5,a
mov a,r3
rlc a
mov r3,a
xch a,r2
rlc a
xch a,r2
mov psw.5,c
clr c
subb a,r7
mov r1,a
mov a,r2
subb a,r6
jb psw.5,clp11
jc clp21
clp11: mov r2,a
mov a,r1
mov r3,a
inc r4
clp21: djnz b,clp01
mov a,r3
jb acc.7,tadd1
clr c
mov a,r3
rlc a
subb a,r7
jc return3
tadd1: mov a,r4
add a,#01h
mov r4,a
mov a,r5
addc a,#00h
mov r5,a
clr psw.5
sjmp return4
return3: setb psw.5
return4: mov 1ah,r4
ret
;*********************************************************************************
;溫度線性化子程序:
;入口:1ah 出口:1ch , 1dh
;*********************************************************************************
tlinep: mov dptr, #ttab ;溫度線性化
xlp1: clr a ;送表首址到dptr
movc a,@a+dptr ;dptr中內容送賦給a
cjne a,1ah,xlp2 ;與采樣值x比較
xlp0: mov r0,#1bh ;相等時開始取值
mov r2,#03h
xlp00: mov @r0,a ;從表中取值存入指定地方
inc r0
inc dptr
clr a
movc a,@a+dptr
djnz r2,xlp00
sjmp xys
xlp2: jc xlp3 ;小于采樣值x,轉xlp3
clr c
mov a,dpl
subb a,#01h
mov dpl,a ;大于采樣值x時,指針跳回上次xi值并取值
mov a,dph
subb a,#00h
mov dph,a
clr c
mov a,dpl
subb a,#01h
mov dpl,a ;大于采樣值x時,指針跳回上次xi值并取值
mov a,dph
subb a,#00h
mov dph,a
clr a
movc a,@a+dptr
sjmp xlp0
xlp3: inc dptr ;轉下一單元進行比較
inc dptr
sjmp xlp1
xys: clr c
mov a,1ah
subb a,1bh
mov b,#10
mul ab
mov r5,b
mov r4,a
clr c
mov a,1dh
subb a,1bh
mov r7,a
lcall wfcf
mov a,r4
orl a,#0a0h
mov 1dh,a
ret
;*********************************************************************************
;溫度設定值子程序:
;入口: 2bh,2ch 出口:41h
;*********************************************************************************
wdzh: mov a,2bh ;溫度值轉換成電壓值
swap a ;溫度值BCD碼轉換成十六進制
anl a,#0fh
mov b,#10
mul ab
mov r3,a
mov a,2bh
anl a,#0fh
add a,r3
aaa: mov dptr,#ttab ;查表找相對應的電壓值
clr c
subb a,#0ah
rlc a
mov r1,a
movc a,@a+dptr
mov r2,a
mov a,r1
add a,#2
movc a,@a+dptr
clr c
subb a,r2
mov b,a
mov a,2ah
anl a,#0fh
mul ab
mov r4,a
mov r5,b
mov r7,#10
lcall wfcf
mov a,r4
add a,r2
cjne a,41h,treturn1
ljmp treturn2
treturn1:mov 41h,a ;求得電壓值存放于47h
mov 33h,#00h
mov 34h,#00h
mov 35h,#00h
mov 36h,#00h
treturn2:ret
ttab: db 03h,0ah,0bh,0bh
db 11h,0ch,18h,0dh
db 1fh,0eh,2ch,0fh
db 32h,10h,3ah,11h
db 3dh,12h,43h,13h
db 4bh,14h,50h,15h
db 5ah,16h,60h,17h
db 66h,18h,6fh,19h
db 77h,1ah,7ch,1bh
db 81h,1ch,89h,1dh
db 8fh,1eh,95h,1fh
db 9ch,20h,0a1h,21h
db 0a7h,22h,0aeh,23h
db 0b5h,24h,0b9h,25h
db 0beh,26h,0c4h,27h
db 0cah,28h,0d0h,29h
db 0d5h,2ah,0dah,2bh
db 0dfh,2ch,0e4h,2dh
db 0e8h,2eh,0ech,2fh
db 0f1h,30h,0f3h,31h
db 0f8h,32h
;*********************************************************************************
;十六進制轉換為十進制子程序:
;*********************************************************************************
htod: mov r1,a
anl a,#0f0h
swap a
mov r2,a
mov a,#00h
cjne r2,#00h,hdlop
ljmp shizero
hdlop: add a,#16h
da a
djnz r2,hdlop
shizero: mov r2,a
mov a,r1
anl a,#0fh
da a
add a,r2
da a
endd: ret
;*********************************************************************************
;溫度PID控制子程序: (位置式)
;入口:1ah,41h 出口:49h,4ah
;*********************************************************************************
tempc: mov 42h,#02h
mov 4bh,#65h ;設置P.I.D.參數值
mov 4ch,#1eh
mov 4dh,#30h
mov 4eh,#0a4h
mov 4fh,#24h
mov 40h,#7ah
clr c ;溫度控制
mov a,41h
cjne a,1ah,comp
ljmp return2
comp: clr c ;設定值減采樣值
subb a,1ah
jnc comp1 ;取絕對值
cpl a
add a,#01h
comp1: clr c
cjne a,42h,cnext1 ;42h存控制精度的值
ljmp return2
cnext1: jnc comp2
ljmp return2
comp2: clr c ;PID控制
mov r5,#00h
mov r4,41h ;給定值送r5r4
mov r3,#00h
mov r2,1ah ;采樣值送r3r2
lcall szqb
lcall szjf ;計算偏差量ek
mov 31h,r7
mov 32h,r6 ;ek送31h和32h
mov r5,4bh
mov r4,4ch ;系數I送r5r4
mov r0,#3bh ;積始地址賦給r0
lcall sdcf ;求PI=I*ek
mov r5,31h
mov r4,32h
mov r7,4dh
mov r6,4eh ;系數p送r5r4
mov r0,#37h
lcall sdcf ;Pp=P*(ek-ek-1)
mov r5,3ah
mov r4,39h
mov r3,35h
mov r2,36h
lcall szjf ;Pp+PI
mov 35h,r7
mov 36h,r6
mov r5,31h
mov r4,32h
mov r3,33h
mov r2,34h
lcall szqb
lcall szjf ;ek+ek+2-ek-1
mov r5,4fh
mov r4,40h ;系數D送r5r4
mov r0,#37h
lcall sdcf ;PD=D*(ek+ek+2-2ek-1)
mov 33h,31h
mov 34h,32h
mov r5,3ah
mov r4,39h
mov r3,3eh
mov r2,3dh
lcall szjf ;Pp+PI+PD
mov a,r7
mov r3,a
mov a,r6
mov r2,a
mov r5,35h
mov r4,36h
lcall szjf ;Uk=Uk-1+Pp+PI+PD
mov a,r7
mov r5,a
mov a,r6
mov r4,a
mov r3,#00h
mov r2,41h
lcall szjf
mov 49h,r7
mov 4ah,r6
return2: ret
;*********************************************************************************
;溫度控制量輸出子程序:
;入口:49h,4ah 出口:DA轉換器地址0b000h
;*********************************************************************************
tcda: mov a,49h
cjne a,#00h,cs4
ljmp cs5
cs4: mov r5,49h
mov r4,4ah
mov r3,#00h
mov r2,#80h
lcall szjf
mov a,r7
mov r5,a
mov a,r6
mov r4,a
mov r3,#00h
mov r2,41h
lcall szqb
lcall szjf
mov a,r7
cjne a,#00h,cs6
mov a,r6
ljmp cs7
cs6: cjne a,#80h,cs8
cs8: jnc cs9
mov a,#0ffh
ljmp cs0
cs9: mov a,#00h
ljmp cs0
cs5: mov a,4ah
clr c
subb a,41h
add a,#80h
cs7: cjne a,#0f8h,cs1
cs1: jc cs2
mov a,#0ffh
ljmp cs0
cs2: cjne a,#03h,cs3
cs3: jnc cs0
mov a,#00h
cs0: mov dptr,#0b000h
movx @dptr,a
ret
sdcf: mov a,r7
rlc a
mov 26h.0,c
jnc pos1
mov a,r6
cpl a
add a,#01h
mov r6,a
mov a,r7
cpl a
addc a,#00h
mov r7,a
pos1: mov a,r5
rlc a
mov 26h.1,c
jnc pos2
mov a,r4
cpl a
add a,#01h
mov r4,a
mov a,r5
cpl a
addc a,#00h
mov r5,a
pos2: lcall swcf
mov c,26h.0
anl c,26h.1
jc tpl
mov c,26h.0
orl c,26h.1
jnc tpl
dec r0
dec r0
dec r0
mov a,@r0
cpl a
add a,#01h
mov @r0,a
inc r0
mov a,@r0
cpl a
addc a,#00h
mov @r0,a
inc r0
mov a,@r0
cpl a
addc a,#00h
mov @r0,a
inc r0
mov a,@r0
cpl a
addc a,#00h
mov @r0,a
tpl: ret
swcf: mov a,r6
mov b,r4
mul ab
mov @r0,a
mov r3,b
mov a,r4
mov b,r7
mul ab
add a,r3
mov r3,a
mov a,b
addc a,#00h
mov r2,a
mov a,r6
mov b,r5
mul ab
add a,r3
inc r0
mov @r0,a
clr psw.5
mov a,r2
addc a,b
mov r2,a
jnc last
setb psw.5
last: mov a,r7
mov b,r5
mul ab
add a,r2
inc r0
mov @r0,a
mov a,b
addc a,#00h
mov c,psw.5
addc a,#00h
inc r0
mov @r0,a
ret
szqb: mov a,r2
cpl a
add a,#01h
mov r2,a
mov a,r3
cpl a
addc a,#00h
mov r3,a
ret
szjf: mov a,r4
add a,r2
mov r6,a
mov a,r5
addc a,r3
mov r7,a
ret
wfcf: clr a
mov r3,a
mov a,r5
subb a,r7
jnc return
mov r0,#16
clp0: clr c
mov a,r4
rlc a
mov r4,a
mov a,r5
rlc a
mov r5,a
mov a,r3
rlc a
mov r3,a
clp1: subb a,r7
jc small
mov r3,a
inc r4
sjmp clp1
small: djnz r0,clp0
mov a,r3
jb acc.7,tadd2
clr c
mov a,r3
rlc a
subb a,r7
jc return
tadd2: mov a,r4
add a,#01h
mov r4,a
mov a,r5
addc a,#00h
mov r5,a
return: ret
delay: mov r6,#0ffh ;r7作為延時參數,調用前傳遞
d3: mov r5,#0ffh
nop
djnz r5,$
djnz r6,d3
djnz r7,delay
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -