<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的PD控溫程序

          51單片機(jī)的PD控溫程序

          作者: 時(shí)間:2012-10-12 來源:網(wǎng)絡(luò) 收藏

          ;此控溫程序是采用方式,入口在 : BLXS 最大取值 255 WFXS 最大取值 255
          ; SDWDHH,SDWDHL 設(shè)定溫度的16進(jìn)制高低字節(jié)存儲(chǔ)地址
          ; WDZHH,WDZHL 當(dāng)前溫度的16進(jìn)制高低字節(jié)存儲(chǔ)地址
          ;
          ; 出口在: ZSJCSH 加熱時(shí)間
          ; ZSJCSL 不加熱時(shí)間
          ;
          ; ZSJCSH+ZSJCSL=200 則一個(gè)控溫周期= 200*基本定時(shí)周期

          BCPCHH EQU 30H
          BCPCHL EQU 31H
          BLCSH EQU 32H
          BLCSL EQU 33H
          BLXS EQU 34H
          WFXS EQU 35H
          PCWFH EQU 36H
          PCWFL EQU 37H
          SCPCHH EQU 38H
          SCPCHL EQU 39H
          SDWDHH EQU 3AH
          SDWDHL EQU 3BH
          WDZHH EQU 3CH
          WDZHL EQU 3DH
          WFCSH EQU 3EH
          WFCSL EQU 3FH
          ZSJCSH EQU 40H
          ZSJCSL EQU 41H


          BLPCFH BIT 00H
          SCBLPCFH BIT 01H
          WFPCFH BIT 02H

          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;PID控溫子程序需定義RAM SDWDHH SDWDHL WDZHL WDZHH BCPCHL BCPCHH SCPCHH SCPCHL
          ; BLXS WFXS PCWFH PCWFL WFCSL WFCSH BLCSL BLCSH ZSJCSH ZSJCSL
          ;
          ; 標(biāo)志位 BLPCFH SCBLPCFH WFPCFH

          PDJS: ;計(jì)算e(t) 值
          CLR C
          MOV A,SDWDHL ;sdwdhh,sdwdhl 存設(shè)定溫度帶一位小數(shù)
          MOV R7,WDZHL
          SUBB A,R7
          MOV BCPCHL,A ;存本次偏差低8位
          MOV A,SDWDHH
          MOV R7,WDZHH
          SUBB A,R7
          MOV BCPCHH,A ;存本次偏差高8位
          JC BOOLL2
          CLR BLPCFH ;清比例偏差符號(hào)
          BOOLL3: JB BLPCFH,JSSZ3 ;符號(hào)位為0表示正值,為1表示負(fù)值 本次比例偏差符號(hào) 為負(fù)不加熱退出
          JB SCBLPCFH,JSSZ2 ;符號(hào)位為0表示正值,為1表示負(fù)值 上次比例偏差符號(hào)
          JMP JSSZ1
          BOOLL2:
          SETB BLPCFH
          CLR C
          MOV A,#0FFH
          SUBB A,BCPCHL ;本次溫度大于設(shè)定溫度,求補(bǔ)锝實(shí)際數(shù)值 e(t)
          MOV BCPCHL,A
          MOV A,#0FFH
          SUBB A,BCPCHH
          MOV BCPCHH,A
          INC BCPCHL
          JMP BOOLL3

          JSSZ3: MOV A,BCPCHL
          MOV SCPCHL,A
          MOV A,BCPCHH
          MOV SCPCHH,A
          JB BLPCFH,MLLP1232 ;將本次偏差數(shù)值與符號(hào)賦給上次保存地址
          CLR SCBLPCFH
          JMP fool2
          MLLP1232:
          SETB SCBLPCFH
          jmp fool2

          JSSZ2: CLR C ;e(t)>0 e(t-1) 0
          MOV A,BCPCHL ;計(jì)算e(t)-e(t-1) 的結(jié)果,存入PCWFL,PCWFH中
          ADDC A,SCPCHL
          MOV PCWFL,A
          MOV A,BCPCHH
          ADDC A,SCPCHH
          MOV PCWFH,A
          CLR WFPCFH
          JMP AOOL1

          JSSZ1: CLR C ;到此為止,本次e(t) 值已算出,并有符號(hào)位,可判正負(fù)%%%%%%%%%%%%%%%%%%%%%%%
          MOV A,BCPCHL ;計(jì)算e(t)-e(t-1) 的結(jié)果,存入PCWFL,PCWFH中
          SUBB A,SCPCHL ;e(t) e(t-1) 都為正值
          MOV PCWFL,A
          MOV A,BCPCHH
          SUBB A,SCPCHH
          MOV PCWFH,A
          CLR WFPCFH
          JNC AOOL1 ;本次偏差>上次偏差,轉(zhuǎn)走
          SETB WFPCFH ;微分偏差符號(hào)置位
          CLR C
          MOV A,#0FFH
          SUBB A,PCWFL ;本次偏差上次偏差,求補(bǔ)锝實(shí)際數(shù)值
          MOV PCWFL,A
          MOV A,#0FFH
          SUBB A,PCWFH
          MOV PCWFH,A
          INC PCWFL
          AOOL1:
          MOV A,BCPCHL
          MOV SCPCHL,A
          MOV A,BCPCHH
          MOV SCPCHH,A
          JB BLPCFH,MLLP1 ;將本次偏差數(shù)值與符號(hào)賦給上次保存地址
          CLR SCBLPCFH
          JMP MLLP2
          MLLP1:
          SETB SCBLPCFH

          MLLP2:
          MOV R2,BCPCHH
          MOV R3,BCPCHL
          MOV R4,#0 ;求kp*e(t)
          MOV R5,#0
          MOV R6,#0
          MOV R7,BLXS
          CALL MULD
          MOV BLCSL,R5 ;結(jié)果送到比例常數(shù)存儲(chǔ)
          MOV BLCSH,R4
          MOV R3,PCWFL
          MOV R2,PCWFH
          MOV R4,#0
          MOV R5,#0
          MOV R6,#0
          MOV R7,WFXS
          CALL MULD ;求kd*(e(t)-e(t-1))
          MOV WFCSL,R5
          MOV WFCSH,R4 ;結(jié)果送到微分常數(shù)存儲(chǔ)
          JB BLPCFH,FOOL2 ;比例相為負(fù),不計(jì)算結(jié)果,直接賦pouth=#00 poutl=#200,退出中斷
          JB WFPCFH,AOOL2 ;微分項(xiàng)為負(fù)轉(zhuǎn)走
          CLR C
          MOV A,BLCSL
          ADD A,WFCSL ;KP>0,KD>0
          MOV ZSJCSL,A ;將結(jié)果存入總時(shí)間常數(shù)中 kp*e(t)+kd*(e(t)-e(t-1))
          MOV A,BLCSH
          ADDC A,WFCSH
          MOV ZSJCSH,A
          AOOL4:
          CLR C
          MOV A,ZSJCSL
          SUBB A,#0D0H
          MOV A,ZSJCSH
          SUBB A,#07H
          ;為什么是小于2000而不是200呢,因?yàn)檫M(jìn)行偏差計(jì)算時(shí)時(shí)帶一位小數(shù)的擴(kuò)大了10倍
          JC AOOL3 ;有借位,說明總時(shí)間常數(shù)《2000h,數(shù)據(jù)沒有溢出繼續(xù)
          MOV ZSJCSL,#0D0H
          MOV ZSJCSH,#07H ;無借位說明總時(shí)間常數(shù)>2000h,數(shù)據(jù)溢出賦最大值2000h繼續(xù)

          JMP AOOL3

          FOOL2:
          MOV ZSJCSL,#0 ;比例項(xiàng)小于微分項(xiàng)不加熱
          MOV ZSJCSH,#0
          JMP AOOL3

          AOOL2:
          CLR C
          MOV A,BLCSL
          SUBB A,WFCSL ;KP>0,KD0
          MOV ZSJCSL,A ;將結(jié)果存入總時(shí)間常數(shù)中 kp*e(t)-kd*(e(t)-e(t-1))
          MOV A,BLCSH
          SUBB A,WFCSH
          MOV ZSJCSH,A
          JNC AOOL4 ;KP>KD
          MOV ZSJCSL,#0 ;比例項(xiàng)小于微分項(xiàng)不加熱
          MOV ZSJCSH,#0
          JMP AOOL3
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下程序的4舍5入是為了增加精度,否則總時(shí)間常數(shù)可以直接除以10得POUTH值;;;;;;;;
          AOOL3: MOV R6,ZSJCSH
          MOV R7,ZSJCSL ;總數(shù)據(jù)常數(shù)里面存的是16進(jìn)制數(shù)
          MOV R3,#0
          MOV R4,#0
          MOV R5,#0
          CALL HB2 ;換算成bcd碼出口在r3,r4,r5中
          MOV A,R5
          ANL A,#0FH ;取小數(shù)位
          CLR C
          SUBB A,#5
          JC PPPOOP1 ;小數(shù)位5,轉(zhuǎn)走
          MOV A,R5
          ANL A,#0F0H
          SWAP A
          INC A
          PPPOOP2:
          MOV R5,A ;小數(shù)位>5,個(gè)位數(shù)加1實(shí)現(xiàn)四舍五入
          MOV A,R4
          ANL A,#0FH
          SWAP A
          ADD A,R5
          MOV R3,A
          MOV A,R4
          ANL A,#0F0H
          SWAP A
          MOV R2,A
          CALL BH2
          mov ZSJCSH,r3 ;MOV POUTH,R3 為了節(jié)省存儲(chǔ)器此處用zsjcsh,zsjcsl
          MOV A,#200 ;代替pouth,poutl
          SUBB A,R3
          mov ZSJCSl,a ;MOV POUTL,A
          RET

          PPPOOP1: MOV A,R5
          ANL A,#0F0H
          SWAP A
          JMP PPPOOP2


          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();