日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
用普通IO口測量溫度(NTC)的程序
用普通IO口測量溫度(NTC)的程序
 更新時間:2009-7-22 16:39:14  點擊數(shù):0
【字體: 字體顏色
/script>

這是一段利用單片機IO口作的溫控程序,感溫元件是NTC。功能是,當溫度低過某值時開始加熱,隨著溫度上升。。。當高到某值時停止加熱,然后開始冷卻。。。不斷重復。。。

      使用時要注意RC常數(shù),常數(shù)過大會造成16位計數(shù)溢出,得不到正確結果。      程序是作產品前的一個試驗程序,當時調試已通過,能作到±0.5℃。 ;******************************************************
;filename: IOTestNTC.asm
;     mcu: MDT2005EP
;   clock: 4 MHz for EXTXT
;    date: 2006/03/17
;  writer: aLin
;******************************************************
;計算被測量電阻。只做比較,不作計算。
;計算公式:Rx = Rf * (Tx/Tf)
;Rx為被測電阻
;Rf為已知電阻,Rf=10K
;Tx為被測電阻對電容C放電的計數(shù)值,為16位數(shù)
;Tf為被測電阻對電容C放電的計數(shù)值,為16位數(shù)
;查溫度特性表(NTC型號為:CWF2-473F-3950K,大亞科技制造):
;下限溫度5攝氏度時電阻為121545.44歐,即121.54544K
;換算為:Tx/Tf=Rx/Rf=12.154544
;擴大1000倍后結果為:12154.544,約為12155,即2F76H              
;上限溫度8攝氏度時電阻為104712.92歐,即104.71292K
;換算為:Tx/Tf=Rx/Rf=10.471292
;擴大1000倍后結果為:10471.292,約為10471,即28E7H ;-------------------------------------------------------------------       

               list         p=pic16c54
               #i nclude     "p16c5x.inc";定義I/O口              
               #define      vt     portb,0
               #define      rf     portb,1
               #define      rx     portb,2
               #define      on     portb,4
               #define      off    portb,4
               #define      f0     user,0                          
;RAM 分配
   CNT         EQU         10H    ;計數(shù)器   SOU1        EQU         11H    ;四字節(jié)被除數(shù)最低位和16位商的低8位
   SOU2        EQU         12H    ;被除數(shù)和16位商高8位
   SOU3        EQU         13H    ;被除數(shù)和16位余數(shù)的低8位
   SOU4        EQU         14H    ;四字節(jié)被除數(shù)最高位和16位余數(shù)的高8位
   USER        EQU         15H    ;用戶標記位   SOU         EQU         16H    ;被數(shù)低8位和積(四字節(jié)積的最低位)和RX電阻計數(shù)器低8位
   SOUH        EQU         17H    ;被乘數(shù)高8位和積和RX電阻計數(shù)器高8位
   RLT         EQU         18H    ;乘數(shù)低8位和積
   RLTH        EQU         19H    ;乘數(shù)高8位和積(四字節(jié)積的最高位)   TEMP1       EQU         1AH    ;臨時寄存器1-4
   TEMP2       EQU         1BH
   TEMP3       EQU         1CH
   TEMP4       EQU         1DH    RFCNTL      EQU         1EH    ;RF電阻計數(shù)器低8位
   RFCNTH      EQU         1FH    ;RF電阻計數(shù)器高8位         
;--------------------------------- 
    
               ORG      0000h 
                                                   start   bcf       fsr,6         ;選擇bank0
               bcf       fsr,5
               movlw     b'11101111'   ;RB4定義為輸出,其余輸入,PortB4為一直輸出
               tris      06h                                               
;---------------------------------------------------           
;停止加熱處理程序
;等待溫度降到5攝氏度以下是,重新加熱,跳到加熱處理程序
;
;負溫度系電阻,阻值越大,溫度越低
;用5攝氏度時對應的電阻減去測出的電阻,為負數(shù),表明實際溫度已低過5攝氏度
;需加熱處理 
;
   HOT_DOWN    bcf      off       ;停止加熱
;               call     d1s       ;延時1秒
               call     io_rm     ;調用測量電阻程序
               call     DUMUL     ;調用16位無符號乖法程序
               call     DUDIV     ;調用32位除以16位無符號除法程序
                                       
;比較商大小
;0E10 對應36K電阻,溫度是31度
        
               MOVLW    2FH      
               MOVWF    TEMP1
               MOVF     SOU2,W
               SUBWF    TEMP1,W   ;商高8位先減
               BTFSS    STATUS,C  ;檢查是否有借位,有借位時C=0
               GOTO     HOT_UP    ;有借位,被減數(shù)小于減數(shù),跳到加熱程序 
               BTFSS    STATUS,Z  ;無借位,查相減結果是否為0  
               GOTO     HOT_DOWN  ;結果不為0,則被減數(shù)大于減數(shù),跳到停止加熱程序
              
               MOVLW    76H       ;商高8位相等,商低8位相減
               MOVWF    TEMP1
               MOVF     SOU1,W
               SUBWF    TEMP1,W
               BTFSS    STATUS,C
               GOTO     HOT_UP
               BTFSS    STATUS,Z
               GOTO     HOT_DOWN                              GOTO     HOT_DOWN  ;兩數(shù)相等,返回              
;--------------------------------------

;加熱程序處理程序
;
;當溫度大于8攝氏度時跳到停止加熱程序
;            
    HOT_UP     bsf      on        ;加熱
;               call     d1s       ;延時1秒
               call     io_rm     ;調用測量電阻程序
               call     DUMUL     ;調用16位無符號乖法程序
               call     DUDIV     ;調用32位除以16位無符號除法程序
              
;比較商大小  
;07D0對應電阻20K,溫度45度  
   
               MOVLW    28H      
               SUBWF    SOU2,W    ;商高8位先減
               BTFSS    STATUS,C  ;檢查是否有借位,有借位時C=0
               GOTO     HOT_DOWN  ;有借位,被減數(shù)小于減數(shù),跳到停止加熱程序 
               BTFSS    STATUS,Z  ;無借位,查相減結果是否為0  
               GOTO     HOT_UP    ;結果不為0,則被減數(shù)大于減數(shù),跳到加熱程序
              
               MOVLW    0E7H      ;商高8位相等,商低8位相減
               SUBWF    SOU1,W
               BTFSS    STATUS,C
               GOTO     HOT_DOWN
               BTFSS    STATUS,Z
               GOTO     HOT_UP              
              
               GOTO     HOT_UP    ;溫度未低過下限溫度,返回繼續(xù)等待;----------------------------------------           
;    
      io_rm    clrf     SOUH
               clrf     SOU
                   
               clrf     RFCNTH
               clrf     RFCNTL                              call     fullcharge    ;讓電容充電。
               call     rxdischarge   ;調用測量rx放電時間子程序             
              
               call     fullcharge    ;讓電容充電
               call     rfdischarge   ;調用測量rf放電時間子程序。
              
               call     fulldischarge ;讓電容完全放電。
              
               retlw    00h
;-----------------------------------------
;
;電容充電子程序
;
 fullcharge               movlw    b'11101110'  ;vt口轉為輸出,rf、rx為輸入,PortB4一直輸出
               tris     06h
              
               bsf      vt           ;vt口輸出高電平,讓電容充電
              
               movlw    .40          ;延時,讓電容有足夠時間充滿電至Voh。
               movwf    CNT
               decfsz   CNT,F
               goto     $-1
               retlw    00h
;---------------------------------------
;
;電容放電
;
fulldischarge
               movlw    b'11101110'  ;vt口轉為輸出,rf、rx為輸入,PortB4一直輸出
               tris     06h
              
               bcf      vt           ;vt口輸出低電平,讓電容放電
              
               retlw    00h
;-----------------------------------------
;       
;測量rf放電時間子程序
;
rfdischarge
               movlw    b'11101101' ;vt口轉為輸入,rf口轉為輸出,rx口輸入,PortB4一直輸出
               tris     06h
                         
               bcf      rf          ;rf口輸出低電平,電容對rf電阻放電.
                                        
     _rfdis    btfss    vt
               goto     _rfdisdone
               incf     RFCNTL,f
               skpnz
               incf     RFCNTH,f
               goto     _rfdis
       
 _rfdisdone
               movlw    b'11101111'  ;斷開rf電阻,由輸出改為輸入,PortB4一直輸出
               tris     06h
              
               retlw    00h
;--------------------------
;            
;測量rx放電時間子程序
;                                            
rxdischarge
               movlw    b'11101011'  ;vt口轉為輸入,rx口轉為輸出,rf口輸入,PortB4一直輸出
               tris     06h
                   
               bcf      rx           ;rx口輸出低電平,電容對rx電阻放電.
    
     _rxdis    btfss    vt
               goto     _rxdisdone
               incf     SOU,f
               skpnz
               incf     SOUH,f
               goto     _rxdis
              
 _rxdisdone
               movlw    b'11101111'  ;斷開rx電阻,由輸出改為輸入,PortB4一直輸出
               tris     06h
              
               retlw    00h                        
;---------------------
;
;本程序實現(xiàn)四字節(jié)除以雙字節(jié)無符號數(shù)除法。
;
;入口參數(shù):被除數(shù)在SOU4~SOU1中,除數(shù)在RLTH、RLT中。
;出口參數(shù):商在SOU2、SOU1中,余數(shù)在SOU4、SOU3中.
                       
      DUDIV    MOVLW    .16         ;循環(huán)16次
               MOVWF    CNT
              
               MOVF     RLTH,W      ;被除數(shù),32位,最高8位
               MOVWF    SOU4
               MOVF     RLT,W
               MOVWF    SOU3                          
               MOVF     SOUH,W
               MOVWF    SOU2
               MOVF     SOU,W
               MOVWF    SOU1        ;被除數(shù),32位,最低8位 
              
               MOVF     RFCNTH,W    ;除數(shù)高8位 
               MOVWF    RLTH
               MOVF     RFCNTL,W    ;除數(shù)低8位
               MOVWF    RLT    
                    
       LOOP    BCF      STATUS,C    ;C清0
               RLF      SOU1,F
               RLF      SOU2,F
               RLF      SOU3,F
               RLF      SOU4,F
               BTFSS    STATUS,C
               GOTO     CLR_F0       ;C=0, 跳到CLR_F0,清F0
               BSF      F0           ;C=1, 置F0
              
     SUB_LO    BCF      STATUS,C                   
               MOVF     RLT,W
               SUBWF    SOU3,W      ;SOU3-RLT -> W
               MOVWF    TEMP1       ;送TEMP1保存
               BTFSS    STATUS,C    ;有借位時C=0               GOTO     SUB_HI      ;低8位相減時有借位,被減數(shù)高8位要借1,相當于減數(shù)加1               MOVF     RLTH,W
               SUBWF    SOU4,W
                          
      THAN     BTFSC    F0          ;若夠減,跳到SAVE
               GOTO     SAVE
               BTFSS    STATUS,C 
               GOTO     NEXT        ;若不夠減,跳到NEXT
              
      SAVE     MOVWF    SOU4        ;保存相減結果 
               MOVF     TEMP1,W
               MOVWF    SOU3
               INCF     SOU1,F
           
      NEXT     DECFSZ   CNT,F
               GOTO     LOOP             
              
               RETLW    00H     
              
     SUB_HI    INCF     RLTH,W
               SUBWF    SOU4,W
               GOTO     THAN      
              
     CLR_F0    BCF      F0
               GOTO     SUB_LO            
              
;***************DUMUL***********
;本程序實現(xiàn)雙字節(jié)無符號數(shù)乘法。
;入口參數(shù):被乘數(shù)在SOUH、SOU中,乘數(shù)在RLTH、RLT中。
;出口參數(shù):結果在RLTH、RLT、SOUH、SOU中。
                       
   DUMUL       MOVLW       .16
               MOVWF       CNT
            ;設乘數(shù)RLTH、RLT=03E8H=1000D,即將SOUH、SOU擴大1000倍           
               MOVLW       03H
               MOVWF       RLTH
               MOVLW       0E8H
               MOVWF       RLT
                        
               MOVF        SOU,W
               MOVWF       TEMP3
               MOVF        SOUH,W
               MOVWF       TEMP4
               CLRF        SOU         ;用于暫
               CLRF        SOUH        ;存
               CLRF        TEMP1       ;結
               CLRF        TEMP2       ;果
               BCF         STATUS,C
   LOOP3       RRF         TEMP4,F
               RRF         TEMP3,F     ;將被乘數(shù)的某一位送到C中
               BTFSC       STATUS,C
    
               GOTO        DUADD       ;將RLTH:RLT中的被乘數(shù)加上
           
   BACK        RRF         SOUH,F
               RRF         SOU,F
               RRF         TEMP2,F
               RRF         TEMP1,F     ;被乘數(shù)右移
               DECFSZ      CNT,F
               GOTO        LOOP3
               MOVF        SOUH,W      ;保存結果
               MOVWF       RLTH
               MOVF        SOU,W
               MOVWF       RLT
               MOVF        TEMP2,W     
               MOVWF       SOUH
               MOVF        TEMP1,W
               MOVWF       SOU
               RETLW       00H  
           
   DUADD       MOVF        RLT,W 
               ADDWF       SOU,F
               MOVF        RLTH,W
               BTFSC       STATUS,C
               INCFSZ      RLTH,W
               ADDWF       SOUH,F
               GOTO        BACK
                                                                        
;---------------------------
;延時1S
;                           
;       d1s     movlw       .16     ; .16時為1.000069S
;               movwf       temp1
;               movlw       .100
;               movwf       temp2
;               movlw       .207
;               movwf       temp3
;               decfsz      temp3,f
;               goto        $-1
;               decfsz      temp2,f
;               goto        $-5
;               decfsz      temp1,f
;               goto        $-9
;               retlw       00h                   
;--------------------------------    
               
               END
  • 上一篇: 基于PIC單片機的便攜式測試記錄儀設計
  • 下一篇: PIC子程序庫-AD轉換(PIC16C54)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網站

    網站經營許可證:浙B2-20080178-1