国产精品无码一区二区三区A片_无码狠狠躁久久久久久久91_国产精品久久久久久久_国产99九九久久无码熟妇_国产人妻精品久久久久野外_久久夜色精品国产欧美乱极品_91精品国产色综合久久不卡98口_精品人妻系列无码人妻免费视频

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

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

開發(fā)工具

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

技術(shù)支持

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

新品推廣

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

新聞中心

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

一個簡單的利用PC機的串口讀取ICD1板上AD0電壓的程序

更新時間: 2019-03-23
閱讀量:2180

十年專注單片機方案開發(fā)的方案公司英銳恩,分享一個簡單的利用PC機的串口讀取ICD1板上AD0電壓的程序。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

用的是PIC16F877A單片機來調(diào)試的,下面是PIC的ASM文件,由于是用于其它的目的,用在這里有些代碼是多余的!
;
;用于串口實驗的程序,主要的是10位
;
  INCLUDE
  LIST P=16F877

BANK3 MACRO
BSF STATUS,RP0
BSF STATUS,RP1                   ;體3
ENDM
BANK2 MACRO
BCF STATUS,RP0;
BSF STATUS,RP1                   ;
ENDM                             ;
BANK1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1                   ;
ENDM
BANK0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1                   ;體0

ENDM

READCUNT    EQU   70H             ;
COUNT1      EQU   72H             ;
TEMP        EQU   73H             ;
FEIFA       EQU   74H             ;
TEMP1       EQU   75H             ;
TEMP2       EQU   76H             ;
CNT         EQU   77H             ;
SOU         EQU   78H             ;
SOUH        EQU   79H             ;
RLT         EQU   7AH             ;
TEMP3       EQU   7BH;

   ORG   0000H                    ;
   NOP                            ;
   GOTO  STATUP                   ;主要程序的入口
   ORG   004H                     ;中斷的入口

HIGHISR  
   BTFSS    PIR1,RCIF     ;判斷是否為USART中斷
   RETFIE                 ;不是中斷返回
   MOVF     RCREG,0       ;取RCREG的數(shù)值到W中,同時RCIF變?yōu)榱?br/>   MOVWF    TEMP2         ;暫時保存W中的數(shù)值用于下個轉(zhuǎn)換時用A
   SUBLW    41H           ;是否為回車,這個指令是取電壓指令,對應(yīng)鍵盤上的回車
   BTFSS    STATUS,Z      ;
   GOTO     FEEDBACK;NEXT1         ;不是;目前的處理是出錯時返回原來的數(shù)值
   CALL     DYZH          ;是CALL 電壓轉(zhuǎn)換
   RETFIE
;   GOTO     FEEDBACK      ;
;   BTFSS    FEIFA,0       ;
;  GOTO     CALL1;
;   GOTO     CALL2;
NEXT1;
    MOVF    TEMP2,0         ;
    SUBLW   44H            ;溫度1的判斷,對應(yīng)鍵盤上的D
    BTFSS   STATUS,Z       ;
    RETFIE                 ;也不是那就中斷返回

  CALL    WDZH1          ;
    RETFIE                 ;轉(zhuǎn)換完成就返回中斷
CALL1  
   CLRF     COUNT1;
   CALL     TABLE
   GOTO     EXIT;
CALL2
   MOVLW    D'26';
   MOVWF    COUNT1;
   CALL     TABLE;
EXIT
   CLRF     READCUNT;
   CLRF     FEIFA;
   RETFIE;
FEEDBACK
   MOVF    RCREG,0;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   MOVWF   TXREG;
   RETFIE;;;
   MOVF    READCUNT,0;
   CALL    READ2;
   INCF    READCUNT,1;
   SUBWF   RCREG,0;
   BTFSC   STATUS,Z;

  RETFIE;
   BSF     FEIFA,0;
   RETFIE;

;
TABLE
LOOP
    MOVF   COUNT1,0
    CALL   READ1;
    MOVWF  TEMP;
GETDATA  
    BTFSS  PIR1,TXIF;
    GOTO   GETDATA;
    MOVWF  TXREG;
    INCF   COUNT1,1;
    MOVF   TEMP,0;
    BTFSS  STATUS,Z;
    GOTO   LOOP;
    RETURN;

READ1
   ADDWF   PCL,1;
   RETLW   A'\N';
   RETLW   A'\R';
   RETLW   A'M';

 RETLW   A'Y';
   RETLW   A' ';
   RETLW   A'N';
   RETLW   A'A';
   RETLW   A'M';
   RETLW   A'E';
   RETLW   A' ';
   RETLW   A'I';
   RETLW   A'S';
   RETLW   A' ';
   RETLW   A'P';
   RETLW   A'I';
   RETLW   A'C';
   RETLW   A'1';
   RETLW   A'6';
   RETLW   A'F';
   RETLW   A'8';
   RETLW   A'7';
   RETLW   A'7';

 RETLW   A'.';      
   RETLW   A'\N';
   RETLW   A'\R';
   RETLW   0
READ
   RETLW   A'N';
   RETLW   A'R';
   RETLW   A'E';
   RETLW   A'R';
   RETLW   A'R';
   RETLW   A'O';
   RETLW   A'R';
   RETLW   A'!';
   RETLW   A'\N';
   RETLW   A'\R';
   RETLW   0

READ2
   ADDWF   PCL,1;
   RETLW   A'W';
   RETLW   A'H';
   RETLW   A'A';
   RETLW   A'T';

RETLW   A' ';
   RETLW   A'I';
   RETLW   A'S';
   RETLW   A' ';
   RETLW   A'Y'
   RETLW   A'O';
   RETLW   A'U';
   RETLW   A'R';
   RETLW   A' ';
   RETLW   A'N';
   RETLW   A'A';
   RETLW   A'M';
   RETLW   A'E';
   RETLW   A'?';

STATUP                   ;這邊是程序的初始化
   BANK1                 ;選體1
   BSF    TRISC,6        ;
   BSF    TRISC,7        ;
   BCF    TRISC,0        ;
   MOVLW  D'12'          ;

MOVWF  SPBRG          ;
   MOVLW  B'00100100'    ;24H
   MOVWF  TXSTA          ;
   BSF    PIE1,RCIE      ;
   MOVLW  0FFH           ;
   MOVWF  TRISA          ;設(shè)置RA口為輸入
   MOVLW  B'10000010'    ;設(shè)置為AD0進入轉(zhuǎn)換,基準電壓為VDDANDVSS,右對齊方式,結(jié)果是ADRESH 高.ADRESL 低,
   MOVWF  ADCON1         ;RA0,1,2,3,4,是AD口,RE2,1,0是數(shù)字口
   BANK0                 ;恢復(fù)體0
   MOVLW   35H           ;
   MOVWF   T1CON         ;
   MOVLW   B'10010000'   ;
   MOVWF   RCSTA         ;
   BSF     INTCON,GIE    ;
   BSF     INTCON,PEIE   ;
   CLRF    READCUNT      ;
   CLRF    FEIFA         ;
MAIN
;
;   call    dyzh
;   goto    $
   CLRWDT                ;
   BTFSS   PIR1,TMR1IF   ;
   GOTO    MAIN          ;
   BCF     PIR1,TMR1IF   ;

MOVLW   B'00000001'   ;
   XORWF   PORTC,1       ;
   GOTO    MAIN          ;
;*******************************************************************
;這個是電壓轉(zhuǎn)換
DYZH;電壓轉(zhuǎn)換程序
   MOVLW  B'01000001'    ;SELECT AD0,OPEN AD;
   MOVWF  ADCON0         ;
   BSF    ADCON0,GO      ;GO Bit是自動清零
   BTFSS  PIR1,ADIF      ;
   GOTO   $-1            ;
   MOVF   ADRESH,0       ;
   MOVWF  SOUH           ;
   BANK1                 ;
   MOVF   ADRESL,0       ;
   MOVWF  SOU            ;
   BANK0                 ;
;   MOVLW  32H;

;   MOVWF  SOU;
;   MOVLW  48H;
;   MOVWF  SOUH;
   CALL   DBTBCD         ;已經(jīng)是轉(zhuǎn)換完成
   CALL   BCDTX          ;CALL BCD碼發(fā)送
   RETURN                ;
  
      

WDZH1;溫度1的轉(zhuǎn)換
   MOVLW  B'01001001' ;
   MOVWF  ADCON0      ;
   BSF    ADCON0,GO   ;
   BTFSS  PIR1,ADIF   ;
   GOTO   $-1         ;
   CALL   DBTBCD      ;
   CALL   BCDTX       ;
   RETURN;
;


;********************DBTBCD********************
;本程序?qū)崿F(xiàn)雙字節(jié)二進制數(shù)轉(zhuǎn)化為3字節(jié)壓縮BCD碼。
;入口參數(shù):原二進制數(shù)在SOUH:SOU中。
;出口參數(shù):結(jié)果在RLT:SOUH:SOU中。
;占用資源:W,STATUS,FSR,023H,024H,025H,026H,028H,029,02AH,兩重堆棧。

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        
            RETURN           ;整個子程序結(jié)束

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        ;則存起來
            MOVLW       30H
            ADDWF       INDF,W      ;高四位加3
            MOVWF       TEMP1              
            BTFSC       TEMP1,7     ;結(jié)果大于7,
            MOVWF       INDF        ;則存起來

    RETURN
;**********************************
;結(jié)果的順序是RLT SOUH SOU
BCDTX;
   SWAPF   RLT,0;
   ANDLW   0FH;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   CALL    READASC;
   MOVWF   TXREG;
   MOVF    RLT,0;
   ANDLW   0FH;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   CALL    READASC;
   MOVWF   TXREG              ;這個是發(fā)送完RLT字節(jié)
   SWAPF   SOUH,0;
   ANDLW   0FH;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   CALL    READASC;
   MOVWF   TXREG;
   MOVF    SOUH,0;

ANDLW   0FH;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   CALL    READASC;
   MOVWF   TXREG              ;這個是發(fā)送完SOUH字節(jié)
   SWAPF   SOU,0;
   ANDLW   0FH;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   CALL    READASC;
   MOVWF   TXREG;
   MOVF    SOU,0;
   ANDLW   0FH;
   BTFSS   PIR1,TXIF;
   GOTO    $-1;
   CALL    READASC;
   MOVWF   TXREG                 ;這個是發(fā)送完SOU字節(jié)
   BTFSS   PIR1,TXIF             ;

GOTO    $-1                   ;
;   MOVLW   A'\N';
;   MOVWF   TXREG;
;   BTFSS   PIR1,TXIF;
;   GOTO    $-1;
;   MOVLW   A'\R';
;   MOVWF   TXREG;
;   MOVLW    00H                  ;這個是用來換行的00H
;  CALL     READ3                ;
;   MOVWF    TXREG                ;
;   BTFSS    PIR1,TXIF            ;
;   GOTO     $-1                  ;
;   MOVLW    01H                  ;01H
;   CALL     READ3                ;
;  MOVWF    TXREG                ;
   RETURN                        ;返回

READASC
    ADDWF   PCL,1;
    RETLW   A'0';
    RETLW   A'1';
    RETLW   A'2';
    RETLW   A'3';
    RETLW   A'4';

RETLW   A'5';
    RETLW   A'6';
    RETLW   A'7';
    RETLW   A'8';
    RETLW   A'9';
READ3                             ;
    ADDWF    PCL,1                ;
    RETLW    A'\n'                ;
    RETLW    A'\r'                ;

   END;

實驗時,串口配置波特率要選擇19200,數(shù)據(jù)位是8位,校驗位是N,停止位是1.就可以,調(diào)節(jié)ICD1板上的電壓就可以在程序中顯示出來,分辨率是10位.