PIC单片机AD转换汇编程序

时间:2012-12-11来源:网络

;*********软件延时子程序****************
DELAY
MOVLW 0XFF
MOVWF DEYH
AGAIN1 MOVLW 0XFF
MOVWF DEYL
AGAIN2 NOP
DECFSZ DEYL
GOTO AGAIN2
DECFSZ DEYH
GOTO AGAIN1
RETURN

;*************** A/D中断服务子程序*****************
INTSERVE
BCF PIR1,ADIF ;清除A/D转换标志
MOVF ADRESH,W
MOVWF INDF0 ;读取并存储A/D转换结果的高两位
INCF FSR0L
MOVF ADRESL,W
MOVWF INDF0
INCF FSR0L ;读取并存储A/D转换结果的低8位
DECF TIMES,1 ;A/D转换次数减1
MOVLW 0X02
MOVWF DEY
LOOP13 DECFSZ DEY,1
GOTO LOOP13 ;给予一定的延时,保证两次A/D转换期间
;2Tad的间隔时间和电容的采样时间
BSF ADCON0,2 ;启动下一次A/D转换
RETFIE ;中断返回

;********** LED闪烁报警子程序*************
ALARM
MOVLW 0X01
XORWF FLAG,1
BTFSS FLAG,0
CALL DISPLAY0 ;调用显“0”子程序
NOP
BTFSC FLAG,0
CALL DISPDARK ;调用显“DARK”子程序
RETURN

;**********显全0子程序*************
DISPLAY0
TRANSMIT ;SPI发送显示子模块
CLRF PORTA ;LACK送低电平,为锁存做准备
MOVLW 0X08
MOVWF TIMES
LOOP80 MOVLW 0XC0 ;显示值为0,C0H为0的段码
MOVWF SSPBUF ;启动发送
WAIT
BTFSS PIR1,SSPIF
GOTO WAIT ;等待发送结束
BCF PIR1,SSPIF ;清除中断标志
DECFSZ TIMES
GOTO LOOP80 ;一次要发送完8个数据
BSF PORTA,5 ;最后给一个锁存信号,代表一次显示任务完成
RETURN

;**********显示全DARK子程序*************
DISPDARK
TRANSMIT1 ;SPI发送显示子模块
CLRF PORTA ;LACK送低电平,为锁存做准备
MOVLW 0X08
MOVWF TIMES
LOOP8D MOVLW 0XFF ;显示值为0,FFH为DARK的段码
MOVWF SSPBUF ;启动发送
WAIT1
BTFSS PIR1,SSPIF
GOTO WAIT1 ;等待发送结束
BCF PIR1,SSPIF ;清除中断标志
DECFSZ TIMES
GOTO LOOP8D ;一次要发送完8个数据
BSF PORTA,5 ;最后给一个锁存信号,代表一次显示任务完成
RETURN

;*********PIC单片机A/D转换汇编程序主程序************
;转载请保留文章原始出处http://www.51hei.com 单片机网
MAIN NOP
CALL INITIAL ;初始化
LOOP
MOVLW 0X80 ;转换结果右移,及ADRESH寄存器的高6位为"0"
;且把RA2口设置为模拟量输入式(注意后面要把
; RA5改成数据I/O方式,以输出显示琐存信号)
MOVWF ADCON1
MOVLW BEGFSR
MOVWF FSR0L ;给出间接寻址时FSR的初值
MOVLW 0X0A
MOVWF TIMES ;每一轮A/D连续采样10次
BSF INTCON,GIE ;总中断打开,及可以进行A/D转换中断
BSF ADCON0,2 ;启动A/D转换
LOOP1 MOVF TIMES,W
BTFSS STATUS,Z
GOTO LOOP1 ;等待A/D转换中断
BCF INTCON,GIE ;A/D转换次数到10次,关闭中断
NOP
CLRF ACCBHI
CLRF ACCBLO ;双精度加法的结果寄存器清0,为后面准备
MOVLW 0X0A
MOVWF TIMES
MOVLW BEGFSR
MOVWF FSR0L
LOOP15 MOVF INDF0,W
MOVWF ACCAHI
INCF FSR0L
MOVF INDF0,W
MOVWF ACCALO
INCF FSR0L
CALL D_ADD
DECFSZ TIMES
GOTO LOOP15
NOP ;计算得到10次A/D转换的和
MOVLW 0X84
MOVWF ADCON1 ;把RA5设成数字I/O,以输出显示锁存信号
MOVLW 0X14
MOVWF ACCAHI
CLRF ACCALO
CALL D_SUB ;通过双精度减判断模拟量是否达到报警限
;度(1400H=200H*0AH,200H与2.5V对应)
BTFSS ACCBHI,7
CALL ALARM ;若ACCBHI的最高位为1,则证明减法结
;果为负,即直流电压值超过2.5V,则报警
NOP
BTFSC ACCBHI,7
CALL DISPLAY0 ;若没有超过2.5V,则不报警,8个LED
;同时显示0
CALL DELAY ;软件延时,使电压检测不要过于频繁
GOTO LOOP ;重复检测输入的直流电压值
END

1 2

关键词: PIC单片机 AD转换 汇编程序

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版