• <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

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

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

    開(kāi)發(fā)工具

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

    技術(shù)支持

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

    新品推廣

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

    新聞中心

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

    實(shí)戰(zhàn)十六:用數(shù)碼管顯示的單通道模擬量采集器

    更新時(shí)間: 2019-03-25
    閱讀量:1207

    用數(shù)碼管顯示的單通道模擬量采集器
    ;單通道模擬量采集器+數(shù)碼管顯示

    ;所用資源
    ;1、TMRO定時(shí)器。為保證采樣精度提供所需的延時(shí)
    ;2、PORTA端口。AN0做為模擬輸入信號(hào)口,其他做為數(shù)碼管的位選
    ;3、PORTC端口。做為7段共陽(yáng)極數(shù)碼管的段信號(hào)(其中PORTC7為小數(shù)點(diǎn))

    ;功能說(shuō)明
    ;1、本實(shí)戰(zhàn)的目的是讓大家熟悉ADC模塊的功能以及AD轉(zhuǎn)換的方法
    ;2、項(xiàng)目實(shí)現(xiàn)的功能:從芯片RA0輸入一個(gè)可以隨時(shí)變化的模擬量(通過(guò)調(diào)節(jié)DEMO板VR1實(shí)現(xiàn))
    ;則單片機(jī)就能夠及時(shí)地把該模擬量進(jìn)行模/數(shù)轉(zhuǎn)換,并用LED顯示出來(lái),我們可以看到轉(zhuǎn)換結(jié)果
    ;會(huì)隨模擬量的變化而變化,從而以讓我們了解片內(nèi)ADC模塊的工作情況。
    ;3、本例的軟件設(shè)計(jì)思路:利用單片機(jī)片內(nèi)硬件資源TMR0和預(yù)分頻器,為ADC提供定時(shí)啟動(dòng)信號(hào)。但是
    ;沒(méi)有利用其中斷功能,而是采用了軟件查詢(xún)方式,轉(zhuǎn)換結(jié)果采用了右對(duì)齊方式,
    ;A/D轉(zhuǎn)換的時(shí)鐘源選用了系統(tǒng)周期的8倍,本例對(duì)于A(yíng)DC的電壓基準(zhǔn)要求不高,
    ;我們就選用了電源電壓VDD和VSS作為基準(zhǔn)電壓,
    ;4、對(duì)于A(yíng)/D轉(zhuǎn)換過(guò)程是否完成也沒(méi)有利用ADC模塊的中斷功能,而是以軟件方式查詢(xún)其中啟動(dòng)位GO是否為0。本例中選用的模擬通道為AN0。

    ;硬件連接
    ;1、撥碼開(kāi)關(guān)S13第2必須置ON以打開(kāi)ANO模擬輸入通道,S13其他位可關(guān)閉
    ;2、撥碼開(kāi)關(guān)S5數(shù)碼管位信號(hào)必須置ON,但是為了影響顯示效果,最好把第8位關(guān)閉。
    ;3、撥碼開(kāi)關(guān)S4數(shù)碼管段信號(hào)必須置ON。
    ;程序清單如下:

    ;***************************************************************************************
    #include "p16f877A.inc"
     errorlevel -302
    ;***********************************
    __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
    ;************************************
    disbuf    equ 20h            ;顯示緩沖區(qū)20,21,22
    ledtemp   equ 29h
    vrevh     equ 2Ah
    vrevl     equ 2Bh
    SOUH      equ 40h            ;子程序入口高位
    SOU       equ 41h            ;子程序入口低位
    RLTH      equ 42h            ;子程序入口高位
    RLT       equ 43h            ;子程序入口低位
    CNT       equ 44h            ;子程序用寄存器
    TEMP1     equ 45h            ;子程序用
    TEMP2     equ 46h            ;同上
    TEMP3     equ 47h            ;同上
    TEMP4     equ 48h            ;同上
     
     
    ;*****************************************
     org 0000h
     NOP
     goto start
     org 0005H
    start:
     banksel TRISA
     movlw B'00000001'                 ;AN0>>>>DC input DC通道上輸入,注意,這里是打開(kāi)RA0,但是在ICD上RA0 控制第二個(gè)LED.RA1
     movwf TRISA                       ;對(duì)應(yīng)第一個(gè)LED,這一點(diǎn)在顯示結(jié)果時(shí)請(qǐng)自已區(qū)分
     movlw B'00000000'
     movwf TRISC
     movlw B'10000111'                 ;預(yù)分頻器給TMRO,且分頻比為1:256                     
     movwf OPTION_REG
     clrf  STATUS
     movlw 0xa0                        ;TMRO初值
     movwf TMR0
     ;***** ***************ADC初始化
     ;***** *****************
    ATOD:
     banksel ADCON1
     movlw B'10001110'                 ;轉(zhuǎn)換結(jié)果右對(duì)齊,除RA0為模擬輸入口外,其他RA口跟RE口均為普通數(shù)字口
     movwf ADCON1
     CLRF  STATUS
     movlw B'01000001'                 ;轉(zhuǎn)換時(shí)鐘頻率為內(nèi)部時(shí)鐘的1/8,AN0通道,允許ADC工作,暫時(shí)不開(kāi)啟AD轉(zhuǎn)換
     movwf ADCON0
     ;*****  ************************
     movlw 0x00
     movwf  disbuf
     movwf  disbuf+1
     movwf  disbuf+2

     CLRF   STATUS
     BTFSS  INTCON,T0IF                ;等待和循環(huán)檢測(cè)TMR0溢出中斷標(biāo)志位
     GOTO   $-1                        ;如果沒(méi)有發(fā)生TMR0溢出中斷則返回循環(huán)檢測(cè)
     BCF    INTCON,T0IF                ;保證足夠的采樣時(shí)間
     movlw 0xa0                        ;TMRO初值
     movwf TMR0                
     bsf    ADCON0,GO                  ;開(kāi)始轉(zhuǎn)換
    ADWAIT:
     btfsc ADCON0,GO
     goto ADWAIT                       ;等待轉(zhuǎn)換完成
     banksel ADRESH
     movf ADRESH,w                     ;讀電壓值高2位
     CLRF STATUS
     movwf vrevh
     BANKSEL ADRESL
     movf ADRESL,w                     ;讀電壓低8位
     CLRF STATUS
     movwf vrevl                       ;裝值放入接收寄存器VERVH,VERVL,為節(jié)省時(shí)間
                                       ;采樣值可以直接放入SOUH,SOU,但運(yùn)算不方便
     ;*******測(cè)試用B'1100001111'**********************
    ; movlw 0x03                        ;這里可以手動(dòng)往VREVH,VrevL兩個(gè)寄存器輸入10位AD值,以便用來(lái)測(cè)試是否能
                                       ;在LED上顯示正確的電壓值,如:30F=B'1100001111'(10位采樣AD值);
                                       ;30F的實(shí)際值是3.823V,那么在LED上將顯示3.82,寄存器21,22,23的值分別為3,8,2
     ;movwf vrevh                       ;程序正常采樣時(shí)這四句話(huà)要屏蔽;
    ; movlw 0x0f
    ; movwf vrevl
     ;************************************************
     movf vrevh,w
     movwf SOUH                        ;將被乘數(shù)放入SOUH,SOU
     movf vrevl,w
     movwf SOU
     movlw 0x00                        ;乘數(shù)放入RLTH,RLT
     movwf RLTH
     movlw 0x05                        ;
     movwf RLT                         ;這里表示:30F*5,結(jié)果放入RLTH,RLT,SOUH,SOU;
     call DUMUL                        ;>>>>>>5*V_gather,result>>>RLTH,RLT SOUH,SOU
     
     movlw 0x04                        ;準(zhǔn)備除1024(400),放數(shù)入RLTH,RLT!!!!關(guān)鍵所以,要理解為重.....以下三步都是這樣的操作
     movwf RLTH                        ;除法子程序用SOUH,SOU除以RLTH,RLT,因?yàn)樯厦娴某朔ǔ绦虿粫?huì)超過(guò)兩個(gè)字節(jié)
     movlw 0x00                        ;5V*3FF(10位滿(mǎn)值)=13FB,所以在調(diào)用除法程序前不用考慮RLTH,RLT是否有其他值而被值  
     movwf RLT                         ;0X0400沖掉
     call  DUDIV                       ;調(diào)用除法程序,商在SOUH,SOU,余數(shù)在RLTH,RLT,對(duì)于余數(shù)再*0A處理.然后再除 0x0400
     movf  SOU,w                       ;這樣的話(huà)除兩次就是小數(shù)點(diǎn)后兩位精度
     movwf disbuf                      ;這里得到電壓整數(shù)值
     movf RLTH,w
     movwf SOUH                        ;送余數(shù)到SOUH,SOU,然后*0A,為小數(shù)點(diǎn)后一位的運(yùn)算作準(zhǔn)備
     movf RLT,w
     movwf SOU
     movlw 0x00
     movwf RLTH
     movlw 0x0A
     movwf RLT
     call DUMUL;                       >>>余數(shù)*10>>>RLTH,RLT SOUH,SOU,這里一般在souh,sou兩個(gè)字節(jié),為除法作準(zhǔn)備
     
     movlw 0x04                        ;放除數(shù)0X0400
     movwf RLTH
     movlw 0x00
     movwf RLT
     call DUDIV                        ;原來(lái)的余數(shù)再除以0X400
     movf SOU,w
     movwf disbuf+1                    ;//取商到第二位電壓值,這里是小數(shù)點(diǎn)的后一位
     movf RLTH,w                       ;然后將余數(shù)放到SOUH,SOU,為下一次乘法作準(zhǔn)備
     movwf SOUH
     movf RLT,w
     movwf SOU
     movlw 0x00
     movwf RLTH
     movlw 0x0A                        ;SOUH,SOU,RLTH,RLT為乘法入口
     movwf RLT
     call DUMUL                        ;>>>*10>>>RLTH,RLT SOUH,SOU,再乘以0A,出口在RLTH,RLT,SOUH,SOU
     movlw 0x04
     movwf RLTH
     movlw 0x00
     movwf RLT
     call DUDIV                       ;再除以0X0400,除完這一次后就不要再除了,因?yàn)槭潜A粜?shù)點(diǎn)后兩位
     movf SOU,w
     movwf disbuf+2                   ;取電壓值,這里是小數(shù)點(diǎn)后兩位值 
     call Led_scan
     call delay_same1
     goto ATOD                        ;循環(huán)轉(zhuǎn)換
     

    ;*********************led scan*************************

    ;//是16*16進(jìn)制,如果要十進(jìn)制,則要進(jìn)行BCD轉(zhuǎn)換
    ;********************DUMUL test Date:0808,ok*************************************
    ;具體可參考相關(guān)子程序庫(kù)
    ;最大實(shí)現(xiàn)FFFF*FFFF=FFFE0001的算法 比如:0X08 0X43 * 0X00 0X10>>>0X84 0X30
    ;本程序?qū)崿F(xiàn)雙字節(jié)無(wú)符號(hào)數(shù)乘法。
    ;入口參數(shù):被乘數(shù)在SOUH:SOU中,乘數(shù)在RLTH:RLT中。
    ;出口參數(shù):結(jié)果在RLTH:RLT:SOUH:SOU中。
                IFNDEF       DUMUL1
                #DEFINE     DUMUL1               
    DUMUL       MOVLW       .16
                MOVWF       CNT
                MOVF        SOU,W
                MOVWF       TEMP3
                MOVF        SOUH,W
                MOVWF       TEMP4
                CLRF        SOU         ;用于暫
                CLRF        SOUH        ;存
                CLRF        TEMP1       ;結(jié)
                CLRF        TEMP2       ;果
                BCF         STATUS,C
    LOOP3       RRF         TEMP4,F
                RRF         TEMP3,F     ;將被乘數(shù)的某一位送到C中
                BTFSC       STATUS,C
                CALL        DUADD       ;將RLTH:RLT中的被乘數(shù)加上
                RRF         SOUH,F
                RRF         SOU,F
                RRF         TEMP2,F
                RRF         TEMP1,F     ;被乘數(shù)右移
                DECFSZ      CNT,F
                GOTO        LOOP3
                MOVF        SOUH,W      ;保存結(jié)果
                MOVWF       RLTH
                MOVF        SOU,W
                MOVWF       RLT
                MOVF        TEMP2,W     
                MOVWF       SOUH
                MOVF TEMP1,W
                MOVWF       SOU
                RETURN
                ;INCLUDE     "DUADD.ASM"
               ENDIF


    ;********************DUADD*********************
    ;本程序?qū)崿F(xiàn)雙字節(jié)無(wú)符號(hào)數(shù)加法。
    ;入口參數(shù):被加數(shù)在SOUH:SOU中,加數(shù)在RLTH:RLT中。
    ;出口參數(shù):結(jié)果在SOUH:SOU中,進(jìn)位位在STATUS:C中。
    ;占用資源:W,024H,025H,026H,027H,一重堆棧。
               IFNDEF       DUADD1
                #DEFINE     DUADD1

    DUADD       MOVF        RLT,W
                ADDWF       SOU,F
                MOVF        RLTH,W
                BTFSC       STATUS,C
                INCFSZ      RLTH,W
                ADDWF       SOUH,F
                RETURN
               ENDIF

    ;********************DUDIV*********************
    ;本程序?qū)崿F(xiàn)雙字節(jié)無(wú)符號(hào)數(shù)除法。
    ;入口參數(shù):被除數(shù)在SOUH:SOU中,除數(shù)在RLTH:RLT中。
    ;出口參數(shù):商在SOUH:SOU中,余數(shù)在RLTH:RLT中.
    ;占用資源:W,STATUS,023H,024H,025H,026H,027H,028H,029H,一重堆棧。
    ;說(shuō)    明: 用戶(hù)在調(diào)用該子程序之前必須確定除數(shù)不為零,否則得不到正確結(jié)果.

                IFNDEF       DUDIV1
                #DEFINE     DUDIV1
                           
    DUDIV       MOVLW       .16         ;循環(huán)16次
                MOVWF       CNT
                CLRF        TEMP2
                CLRF        TEMP1       ;TEMP2:TEMP1得到余數(shù)
                BCF         STATUS,C
                RLF         SOU,F
                RLF         SOUH,F
                RLF         TEMP1,F
                RLF         TEMP2,F
    LOOP79      MOVF        RLTH,W
                SUBWF       TEMP2,W     ;檢測(cè)是否余數(shù)大于除數(shù)
                BTFSS       STATUS,Z
                GOTO        NOCHK
                MOVF        RLT,W
                SUBWF       TEMP1,W     ;如果高位相等則檢測(cè)低位
    NOCHK       BTFSS       STATUS,C   
                GOTO        NOGO
                MOVF        RLT,W       ;余數(shù)減除數(shù)
                SUBWF       TEMP1,F
                BTFSS       STATUS,C
                DECF        TEMP2,F
                MOVF        RLTH,W
                SUBWF       TEMP2,F
                BSF         STATUS,C    ;結(jié)果中移入1
    NOGO        RLF         SOU,F
                RLF         SOUH,F
                RLF         TEMP1,F
                RLF         TEMP2,F
                DECFSZ      CNT,F       
                GOTO        LOOP79
                BCF         STATUS,C
                RRF         TEMP2,W
                MOVWF       RLTH
                RRF         TEMP1,W     ;恢復(fù)余數(shù)
                MOVWF       RLT
                RETLW       0
               ENDIF
    ;**************************************************
     end


    ;    進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
    ;    1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的&rdquo;記事本&rdquo;
    ;   這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過(guò)有兩點(diǎn)需要注意,一是注釋前面的
    ;   分號(hào)&rdquo;;&rdquo;必須用西文半角輸入;二是必須用&rdquo;.asm&rdquo;擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專(zhuān)用子目錄下.
    ;    2.打開(kāi)MPLAB集成開(kāi)發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開(kāi)始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB
    ;   并進(jìn)入MPLAB的桌面.
    ;    3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專(zhuān)用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將
    ;   用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.
    ;    4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目
    ;   文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).


    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频
  • <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>