天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

基于Pic16f873的數(shù)字溫度計(jì)及其源程序

更新時(shí)間: 2019-03-23
閱讀量:1781

基于Pic16f873的數(shù)字溫度計(jì)及其源程序

list  p=16f877    ;
include;
cnt      equ    023h  ;
sou      equ   024h  ;
souh     equ   025h  ;
rlt       equ   026h  ;
rlth      equ   027h  ;
temp1    equ   028h  ;
temp2    equ   029h  ;
temp3    equ   02ah  ;
soub     equ   02bh  ;
souhb    equ   02ch  ;
;***********復(fù)位向量*************
org    0000h  ;
nop           ;
 ;*************主程序***************
main     
;*****************初始化***********************
bsf    status,rp0        ;選RAM體1
          movlw    b’10001110’   ;結(jié)果右對(duì)齊
          movwf    adcon1       ;AN0作為模擬信號(hào)輸入口,參考電壓為vdd,vss
          movlw  b’11010110’     ;設(shè)置RC口狀態(tài)
          movwf   trisc          ;只要SDI腳為輸入
          clrf      sspstat        ;主要清除SMP和CKE位
          bcf      status,rp0      ; 選RAM體0
          movlw   01000001b     ;
          movwf     adcon0      ;設(shè)置時(shí)鐘源8tosc,使能adc,an0信道被選中
          bcf           pir1,adif  ;
          movlw   b’00110010’   ;設(shè)置控制寄存器:設(shè)置fosc/64
          movwf   sspcon        ;SPI主控方式;CKP=1
;******************** A/D轉(zhuǎn)換********************
;入口參數(shù):模擬信號(hào)加在RA0/AN0上。
;出口參數(shù):10位轉(zhuǎn)換結(jié)果在右對(duì)齊的souh:sou中。
start          bsf           adcon0,go    ;開啟A/D轉(zhuǎn)換
             btfsc         adcon0,go     ;A/D轉(zhuǎn)換完成了嗎?
             goto          $-1          ;未完,等待
             movf          adresh,w     ;
             movwf         souh        ;結(jié)果高位
             bsf           status,rp0     ;
             movf          adresl,w     ;
             bcf           status,rp0     ;
             movwf         sou         ;
;********判斷sou:souh是否大于1000,即是否大于100℃?****
;入口參數(shù):被減數(shù)在souhb:soub中,減數(shù)在rlth:rlt中。
;出口參數(shù):結(jié)果在souhb:soub中,借位標(biāo)志在STATUS:C中,'0'表示有借位。
movf       sou,w     ;
movwf      soub     ;
movf       souh,w    ;
movwf      souhb    ;
movlw      0e7h     ;
movwf      rlt       ;
movlw      03h      ;
movwf      rlth      ;
dusub       movf        rlt,w     ;
            subwf       soub     ;
            movf        rlth,w    ;
            btfss       status,c    ;
            incfsz      rlth,w     ;
            subwf       souhb,f   ;
btfsc        status,c   ;是否大于100℃?
goto         dbtbcd  ;否,轉(zhuǎn)向雙字節(jié)二進(jìn)制數(shù)轉(zhuǎn)化成壓縮BCD碼
movlw       71h    ;是,rlth:rlt;souh:sou分別賦值71h,送顯,顯示FFF.F℃
movwf       sou     ;
movwf       souh    ;
movwf       rlt      ;
movwf       rlth     ;
goto         display  ;
;***********雙字節(jié)二進(jìn)制數(shù)轉(zhuǎn)化成壓縮BCD碼***************
;入口參數(shù):原二進(jìn)制數(shù)在souh:sou中。
;出口參數(shù):結(jié)果在rlt:souh:sou中。
dbtbcd       movf        sou,w    ;
            movwf       temp2    ;
            movf        souh,w    ;
            movwf       temp3    ;
            clrf        sou        ;
            clrf        souh       ;
            clrf        rlt         ;
            bcf         status,c    ;
            movlw       .16      ;
            movwf       cnt      ;
loopc1      rlf         temp2,f     ;
rlf         temp3,f    ;
rlf         sou,f      ;
rlf         souh,f     ;
rlf         rlt,f       ;
decfsz      cnt,f      ;
goto        adjdec1   ;     
goto       dcobcdtu   ;整個(gè)雙字節(jié)二進(jìn)制數(shù)轉(zhuǎn)化成壓縮BCD碼結(jié)束
                     ;跳轉(zhuǎn)到雙字節(jié)壓縮BCD碼轉(zhuǎn)化為非壓縮BCD碼
adjdec1      movlw       sou       ;
movwf       fsr       ;
call        adjbcd1     ;調(diào)整rlt
movlw       souh      ;
movwf       fsr       ;
call        adjbcd1     ;調(diào)整rlth
movlw       rlt        ;
movwf       fsr       ;
call        adjbcd1     ;調(diào)整temp1
goto        loopc1     ;
;********************調(diào)整BCD********************
adjbcd1      movlw       03h       ;
            addwf       indf,w      ;低四位加3
            movwf       temp1     ;暫存
            btfsc       temp1,3     ;結(jié)果大于7,
            movwf       indf      ;則存起來(lái)
            movlw       30h       ;
            addwf       indf,w     ;高四位加3
            movwf       temp1     ;          
            btfsc       temp1,7     ;結(jié)果大于7,
            movwf       indf       ;則存起來(lái)
            retlw       0          ;
;*****************雙字節(jié)壓縮BCD碼轉(zhuǎn)化為非壓縮BCD碼************
;入口參數(shù):原BCD碼數(shù)在souh:sou中。
;出口參數(shù):結(jié)果在rlth:rlt:souh:sou中。
;說(shuō)明:由于溫度不大于100.0℃,精確到0.1℃,所以取四位BCD碼
dcobcdtu     swapf        souh,w   ;
            andlw        0fh      ;
            movwf       rlth      ;
            movlw       0fh      ;
            andwf      souh,w   ;
            movwf       rlt       ;
            swapf        sou,w    ;
            andlw        0fh      ;
            movwf       souh     ;
            movlw       0fh      ;
            andwf      sou,f    ;
;****************非壓縮BCD碼轉(zhuǎn)化為七段碼*****************
movf       rlth,w    ;
call        convert   ;
movwf     rlth       ;
movf      rlt,w      ;
call       convert    ;
movwf     rlt        ;
movf      souh,w    ;
call       convert    ;
movwf      souh     ;
movf       sou,w    ;
call        convert   ;
movwf     sou       ;
goto       display    ;
convert      addwf      pcl,f   ;把W內(nèi)容疊加到PC的低8位上
retlw      03fh   ;返回字符“0”的筆段碼(bit7-bit0=a,b,……dp)
retlw      06h     ;“1”的筆段碼
retlw      5bh     ;“2”的筆段碼
retlw      4fh     ;“3”的筆段碼
retlw      66h     ;“4”的筆段碼
retlw      6dh     ;“5”的筆段碼
retlw      7dh     ;“6”的筆段碼
retlw      07h     ;“7”的筆段碼
retlw      7fh     ;“8”的筆段碼
retlw      6fh     ;“9”的筆段碼
;*******************發(fā)送顯示************************
display      movf     sou,w    ;
call      out_in    ;
movf     souh,w   ;
call      out_in    ;
movf     rlt,w     ;
call      out_in    ;
movf     rlth,w    ;
call      out_in    ;
goto     delay     ;   
out_in       movwf   sspbuf   ;送數(shù)據(jù)給SSPBUF后開始發(fā)送
loop1       bcf      status,rp1   ; 選RAM體1
bsf      status,rp0   ;
btfss     sspstat,bf   ;查詢發(fā)送/接收完否
goto    loop1       ;否,繼續(xù)查詢
bcf     status,rp0    ;是,選RAM體1
movf   sspbuf,w ;從SSPBUF中取出接到數(shù)據(jù),即使數(shù)據(jù)無(wú)用也應(yīng)騰空緩沖器
goto    delay        ;   跳轉(zhuǎn)到延時(shí)
;********************延時(shí)1秒********************
delay    
lp0         movlw       0ah     ;
           movlw       0ffh     ;
           movwf       32h     ;
           movwf       30h     ;
lp1        movlw       0ffh     ;
movwf       31h    ;
lp2         decfsz        31h    ;
goto          lp2    ;
decfsz        30h    ;
goto           lp1   ;
decfsz         32h   ;
goto           lp0   ;
goto           start  ;
end

联系我们: 黔东| 措美县| 双鸭山市| 辽宁省| 新巴尔虎右旗| 绵竹市| 重庆市| 蒲城县| 望江县| 荆州市| 唐海县| 遵义县| 常州市| 黑龙江省| 育儿| 特克斯县| 醴陵市| 保靖县| 遵义市| 南昌市| 连江县| 枞阳县| 兴隆县| 和平县| 腾冲县| 兴国县| 西乌| 武定县| 利辛县| 中宁县| 崇文区| 七台河市| 涿鹿县| 西宁市| 灵丘县| 措美县| 侯马市| 和龙市| 法库县| 柘荣县| 从江县|