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

技術熱線: 4007-888-234
設計開發

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

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

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

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

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

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

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

用的是PIC16F877A單片機來調試的,下面是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的數值到W中,同時RCIF變為零
   MOVWF    TEMP2         ;暫時保存W中的數值用于下個轉換時用A
   SUBLW    41H           ;是否為回車,這個指令是取電壓指令,對應鍵盤上的回車
   BTFSS    STATUS,Z      ;
   GOTO     FEEDBACK;NEXT1         ;不是;目前的處理是出錯時返回原來的數值
   CALL     DYZH          ;是CALL 電壓轉換
   RETFIE
;   GOTO     FEEDBACK      ;
;   BTFSS    FEIFA,0       ;
;  GOTO     CALL1;
;   GOTO     CALL2;
NEXT1;
    MOVF    TEMP2,0         ;
    SUBLW   44H            ;溫度1的判斷,對應鍵盤上的D
    BTFSS   STATUS,Z       ;
    RETFIE                 ;也不是那就中斷返回

  CALL    WDZH1          ;
    RETFIE                 ;轉換完成就返回中斷
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          ;設置RA口為輸入
   MOVLW  B'10000010'    ;設置為AD0進入轉換,基準電壓為VDDANDVSS,右對齊方式,結果是ADRESH 高.ADRESL 低,
   MOVWF  ADCON1         ;RA0,1,2,3,4,是AD口,RE2,1,0是數字口
   BANK0                 ;恢復體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          ;
;*******************************************************************
;這個是電壓轉換
DYZH;電壓轉換程序
   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         ;已經是轉換完成
   CALL   BCDTX          ;CALL BCD碼發送
   RETURN                ;
  
      

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


;********************DBTBCD********************
;本程序實現雙字節二進制數轉化為3字節壓縮BCD碼。
;入口參數:原二進制數在SOUH:SOU中。
;出口參數:結果在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           ;整個子程序結束

ADJDEC1     MOVLW       SOU
            MOVWF       FSR
            CALL        ADJBCD1     ;調整RLT
            MOVLW       SOUH
            MOVWF       FSR
            CALL        ADJBCD1     ;調整RLTH
            MOVLW       RLT
            MOVWF       FSR
            CALL        ADJBCD1     ;調整TEMP1
            GOTO        LOOPC1
;********************調整BCD********************
ADJBCD1     MOVLW       03H
            ADDWF       INDF,W      ;低四位加3
            MOVWF       TEMP1       ;暫存
            BTFSC       TEMP1,3     ;結果大于7,
            MOVWF       INDF        ;則存起來
            MOVLW       30H
            ADDWF       INDF,W      ;高四位加3
            MOVWF       TEMP1              
            BTFSC       TEMP1,7     ;結果大于7,
            MOVWF       INDF        ;則存起來

    RETURN
;**********************************
;結果的順序是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              ;這個是發送完RLT字節
   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              ;這個是發送完SOUH字節
   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                 ;這個是發送完SOU字節
   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,數據位是8位,校驗位是N,停止位是1.就可以,調節ICD1板上的電壓就可以在程序中顯示出來,分辨率是10位.

联系我们: 汝州市| 中山市| 庄浪县| 田阳县| 商河县| 景泰县| 微山县| 海阳市| 尼木县| 文昌市| 错那县| 长兴县| 遂川县| 临清市| 茌平县| 尚志市| 鄱阳县| 西畴县| 金平| 安塞县| 永平县| 德庆县| 姜堰市| 凤山市| 涞水县| 岑巩县| 咸阳市| 奉贤区| 久治县| 永平县| 且末县| 五家渠市| 原阳县| 天峨县| 天祝| 蓬安县| 镇沅| 高要市| 南汇区| 阿图什市| 盐边县|