技术热线: 4007-888-234
设计开发

专注差异化嵌入式产品解决方案 给智能产品定制注入灵魂给予生命

开发工具

提供开发工具、应用测试 完善的开发代码案例库分享

技术支持

从全面的产品导入到强大技术支援服务 全程贴心伴随服务,创造无限潜能!

新品推广

提供新的芯片及解决方案,提升客户产品竞争力

新闻中心

提供最新的单片机资讯,行业消息以及公司新闻动态

采集11路AD2路频率由串口送PC

更新时间: 2019-03-23
阅读量:2109

十年专注单片机方案开发的方案公司英锐恩,分享采集11路AD\2路频率由串口送PC。英锐恩现提供服务产品涉及主控芯片:8位单片机、16位单片机、32位单片机及各类运算放大器等。

877A只有8路AD通过外加CD4053完成13路.以下为程序,多谢大家指教!

;************************************************************************************* ;波特率设为9600,数据位8位, ;停止位1位,无校验位,数组15组.第一个数组为0X55最后一个为0XAA,PC接收时校验用.

;DATE:2005-07-01 ;VERSION:1.0 ;************************************************************************************** LIST P=16F877 INCLUDE "P16F877.INC"

TXSTART EQU 20 ;累加校验高位 AD0 EQU 21 ;采样发送模拟数组 AD1 EQU 22 AD2 EQU 23 AD3 EQU 24 AD4 EQU 25 AD5 EQU 26 AD6 EQU 27 AD7 EQU 28 AD8 EQU 29 AD9 EQU 2A AD10 EQU 2B CK0 EQU 2C ;采样发送频率数组 CK1 EQU 2D TXEND EQU 2E ;累加校验低位

COUNTER EQU 2F ;ADC计数器 COUNT1 EQU 30 ;定时计数器1 COUNT2 EQU 31 ;定时计数器2 ADBUFF1 EQU 32 ;AD采样缓冲数组 ADBUFF2 EQU 33 ADBUFF3 EQU 34 ADBUFF4 EQU 35 ADBUFF5 EQU 36 ADBUFF6 EQU 37 TXPTR EQU 38 ;发送指针 TXCOUNT EQU 39 ;发送计数器 T2COUNT EQU 3A ;T2计数器 W_TEMP EQU 70H ;备份寄存器 S_TEMP EQU 71H F_TEMP EQU 72H

;********************************************************* ORG 0X00 GOTO MAIN

;********************************************************* ORG 0X04 GOTO INT ORG 0X05

;*********************************************************************************** INT ;*********************************************************************************** MOVWF W_TEMP SWAPF STATUS,W CLRF STATUS MOVWF S_TEMP MOVFW FSR MOVWF F_TEMP

CHKTXINT BTFSC PIR1,TMR2IF GOTO T2 CHTX BANKSEL PIE1 BTFSS PIE1,TXIE GOTO ENDINT CLRF STATUS BTFSS PIR1,TXIF GOTO ENDINT

MOVLW TXSTART MOVWF FSR MOVF TXPTR,W ADDWF FSR,F MOVF INDF,W MOVWF TXREG INCF TXPTR,F DECFSZ TXCOUNT GOTO ENDINT BANKSEL PIE1 BCF PIE1,TXIE GOTO ENDINT

T2 CLRF STATUS BCF PIR1,TMR2IF INCF T2COUNT MOVLW .10 SUBWF T2COUNT,W BTFSS STATUS,Z GOTO ENDINT MOVF TMR0,W MOVWF CK0 MOVF TMR1L,W MOVWF CK1 CLRF TMR0 CLRF TMR1L CLRF T2COUNT ENDINT CLRF STATUS MOVFW F_TEMP MOVWF FSR SWAPF S_TEMP,W MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W

RETFIE ;*********************************************************************************** INITIAL ;*********************************************************************************** BSF STATUS,RP0 ;设置寄存器体1 CLRF ADCON1 ;转换结果左对齐,A/D通道全选 MOVLW 0FFH ;RA0为模拟输入 MOVWF TRISA ;RA4=CK1,RA0~5=AD MOVWF TRISE ;RE0~2=AD MOVLW 00H ;不用设为输出 MOVWF TRISB MOVWF TRISD MOVLW B'10000001' ;RC7=RX,RC6=TX,RC2=选择输入,RC0=CK2, MOVWF TRISC MOVLW B'11111111' ;上拉+中断NO ;外部时钟//上升沿计数 MOVWF OPTION_REG ;预分频分给WDT;分频比为1:128 MOVLW B'00100100' ;8位数据/发送使能/异步方式 MOVWF TXSTA ;高速波特率/ MOVLW .25 ;9600// 51 (4800) MOVWF SPBRG ; MOVLW 0C3H ;设定每50MS中断一次 MOVWF PR2 CLRF PIE1 BSF PIE1,TMR2IE

BCF STATUS,RP0 ;恢复寄存器体0 MOVLW B'10010000' MOVWF RCSTA MOVLW B'01000001' ;选择:时钟时钟源为FOSC/8,允许ADC工作 MOVWF ADCON0 ;通道AN0,暂时不启动转换过程 MOVLW B'00000010' ;外部计数/分频1:1/暂不启动 MOVWF T1CON MOVLW B'01111111' ;预后分频1:16,计数暂停 MOVWF T2CON CLRF TMR0

CLRF PORTC MOVLW 0x20 MOVWF FSR RE CLRF INDF INCF FSR,F MOVLW 0x3B XORWF FSR,W BTFSS STATUS,Z GOTO RE CLRF INTCON BSF INTCON,PEIE BSF INTCON,GIE RETURN ;*********************************************************************************** MAIN ;*********************************************************************************** CALL INITIAL LOOP CLRWDT BCF PORTC,2 ;RE通道1 CALL DELAY NOP CALL ADC MOVLW B'01001001' ;选择通道1 MOVWF ADCON0 CALL LEACH MOVWF AD0 

CALL ADC MOVLW B'01010001' ;选择通道2 MOVWF ADCON0 CALL LEACH MOVWF AD1

CALL ADC MOVLW B'01011001' ;选择通道3 MOVWF ADCON0 CALL LEACH MOVWF AD2

CALL ADC MOVLW B'01100001' ;选择通道4 MOVWF ADCON0 CALL LEACH MOVWF AD3

CALL ADC MOVLW B'01101001' ;选择通道5 MOVWF ADCON0 CALL LEACH MOVWF AD4

CALL ADC MOVLW B'01110001' ;选择通道6 MOVWF ADCON0 CALL LEACH MOVWF AD5

CALL ADC MOVLW B'01111001' ;选择通道7 MOVWF ADCON0 CALL LEACH MOVWF AD6

CALL ADC MOVLW B'01101001' ;选择通道5 MOVWF ADCON0 CALL LEACH MOVWF AD7

BSF PORTC,2 ;RE通道2 CALL DELAY

CALL ADC MOVLW B'01110001' ;选择通道6 MOVWF ADCON0 CALL LEACH MOVWF AD8

CALL ADC MOVLW B'01111001' ;选择通道7 MOVWF ADCON0 CALL LEACH MOVWF AD9

CALL ADC MOVLW B'01000001' ;选择通道0 MOVWF ADCON0 CALL LEACH MOVWF AD10

MOVLW 55H MOVWF TXSTART MOVLW 0AAH MOVWF TXEND CLRF TXPTR MOVLW .15 MOVWF TXCOUNT BANKSEL PIE1 BSF PIE1,TXIE CLRF STATUS GOTO 

LOOP ;************************************************************************ ;*********************************************************************************** ADC ;*********************************************************************************** MOVLW ADBUFF1 MOVWF FSR MOVLW 6H MOVWF COUNTER ADCLOOP BSF ADCON0,GO ;开启A/D转换过程 WAIT BTFSC ADCON0,GO ;等待A/D转换过程结束,检测ADC中断标志位 GOTO WAIT ;如果没有转换结束,则返回循环检测 MOVF ADRESH,W ;仅取高8位,把A/D结果读到W MOVWF INDF INCF FSR DECFSZ COUNTER,F GOTO ADCLOOP RETURN ;*********************************************************************************** 

LEACH ;过滤 (采用6驵数据去掉最高最低数,中间四位取平均) ;***********************************************************************************

MOVF ADBUFF1,W SUBWF ADBUFF6,W BTFSS STATUS,C GOTO CHANGE1 BUFF2 MOVF ADBUFF2,W SUBWF ADBUFF6,W BTFSS STATUS,C GOTO CHANGE2 MOVF ADBUFF2,W SUBWF ADBUFF1,W BTFSC STATUS,C GOTO CHANGE3 BUFF3 MOVF ADBUFF3,W SUBWF ADBUFF6,W BTFSS STATUS,C GOTO CHANGE4 MOVF ADBUFF3,W SUBWF ADBUFF1,W BTFSC STATUS,C GOTO CHANGE5 BUFF4 MOVF ADBUFF4,W SUBWF ADBUFF6,W BTFSS STATUS,C GOTO CHANGE6 MOVF ADBUFF4,W SUBWF ADBUFF1,W BTFSC STATUS,C GOTO CHANGE7 BUFF5 MOVF ADBUFF5,W SUBWF ADBUFF6,W BTFSS STATUS,C GOTO CHANGE8 MOVF ADBUFF5,W SUBWF ADBUFF1,W BTFSC STATUS,C GOTO CHANGE9 ;****************************************************************************************** AVERAGE ;平均 ;******************************************************************** 

CLRF ADBUFF1 MOVF ADBUFF2,W ADDWF ADBUFF3,F BTFSC STATUS,C INCF ADBUFF1 MOVF ADBUFF4,W ADDWF ADBUFF3,F BTFSC STATUS,C INCF ADBUFF1 MOVF ADBUFF5,W ADDWF ADBUFF3,F BTFSC STATUS,C INCF ADBUFF1 RRF ADBUFF1 RRF ADBUFF3 RRF ADBUFF1 RRF ADBUFF3 MOVF ADBUFF3,W RETURN ;*********************************************************************************** CHANGE1 ;互换 ;************************************************************************ 

ADDWF ADBUFF1,F SUBWF ADBUFF6,F GOTO BUFF2 CHANGE2 ADDWF ADBUFF2,F SUBWF ADBUFF6,F GOTO BUFF3 CHANGE3 ADDWF ADBUFF2,F SUBWF ADBUFF1,F GOTO BUFF3 CHANGE4 ADDWF ADBUFF3,F SUBWF ADBUFF6,F GOTO BUFF4 CHANGE5 ADDWF ADBUFF3,F SUBWF ADBUFF1,F GOTO BUFF4 CHANGE6 ADDWF ADBUFF4,F SUBWF ADBUFF6,F GOTO BUFF5 CHANGE7 ADDWF ADBUFF4,F SUBWF ADBUFF1,F GOTO BUFF5 CHANGE8 ADDWF ADBUFF5,F SUBWF ADBUFF6,F GOTO AVERAGE CHANGE9 ADDWF ADBUFF5,F SUBWF ADBUFF1,F GOTO AVERAGE ;****************************************************************************************** DELAY ;显示廷时常数,廷时时间为3*255*65+6us+4us=50ms MOVLW 41H MOVWF COUNT1 L2 CLRWDT MOVLW 0FFH MOVWF COUNT2 L3 DECFSZ COUNT2,1 GOTO L3 DECFSZ COUNT1,1 GOTO L2 RETLW 0 ;************************************************************************************* END