您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机AD转换汇编程序 正文
PIC单片机AD转换汇编程序

PIC单片机AD转换汇编程序

点击数:7660 次   录入时间:03-04 11:53:39   整理:http://www.55dianzi.com   PIC单片机
;此汇编程序实现A/D转换功能,应用于pIC 单片机 上,A/D采用中断方式。该程序通过单片机的RA2模拟通道送入 
;一直流电压,当送入的直流电压大于2.5V时,8个LED闪动,当直流电压恢复到2.5V以下 
;时,LED停止闪动。为了防止干扰,本程序对直流电压采样10次后再作判断,中间的采样结 
;果用间接寻址的方式存取。 

LIST P=18F458 
INCLUDE "P18F458.INC" 

TIMES EQU 0X20  
DEY EQU TIMES+1 
ACCALO EQU TIMES+2 ;ACCA为双精度加数寄存器 
ACCAHI EQU TIMES+3 
ACCBLO EQU TIMES+4 ;ACCB为双精度加法的结果寄存器 
ACCBHI EQU TIMES+5 
FLAG EQU TIMES+6 
DEYH EQU TIMES+7 
DEYL EQU TIMES+9 
BEGFSR EQU 0X30 ;间接寻址FSR的起始值(宏定义方式给出) 

ORG 0X0000 
GOTO MAIN 
ORG 0X0008 
GOTO INTSERVE ;转向中断服务子程序 
ORG 0X30 

;***双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB*** 
D_SUB 
CALL NEG_A ;求ACCA的补码 

;***双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCB*** 
D_ADD 
MOV F ACCALO,0 ;ACCB和ACCA低半字节相加 
ADDWF ACCBLO 
BTFSC STATUS,C ;有进位否? 
INCF ACCBHI ;有,ACCB高字节加1,再加ACCAHI 
MOV F ACCAHI,0 ;ACCA、ACCB高半字节相加 
ADDWF ACCBHI 
RETURN ;子程序返回 

;************** ACCA取补子程序***************** 
NEG_A 
COMF ACCALO ;ACCALO取反加1 
INCF ACCALO 
BTFSC STATUS,Z ;低8位有进位吗? 
DECF ACCAHI ;有,ACCAHI减1,再取反 
COMF ACCAHI ;否则ACCAHI直接取反 
RETURN ;子程序返回 

;*********初始化子程序*************** 
INITIAL 
CLRF INTCON ;禁止总中断和外围中断 
MOV LW 0X51  
MOV WF ADCON0 ;选择AD通道为RA2,且打开A/D转换器 
;在工作状态,且使AD转换时钟为8Tosc 
MOV LW 0X80  
MOV WF ADCON1 ;转换结果右移,即ADRESH寄存器的高6 
;位为"0",且把RA2口设置为模拟量输入式 
;(注意后面要把RA5改成数据I/O方式,以 
;输出显示琐存信号)  
BCF PIR1,ADIF ;清除A/D转换标志 
BSF PIE1,ADIE ;A/D转换中断允许 
BSF INTCON,PEIE ;外围中断允许 
BSF IPR1,ADIP ;B口变位中断高优先级 
BSF RCON,7 ;使能中断优先级 
BSF TRISA,2 ;设置RA2为输入方式  
BCF TRISA,5 ;置RA5为输出方式,以输出锁存信号 
BCF TRISC,5 
BCF TRISC,3 ;设置SCK与SDO为输出方式 
MOV LW 0XC0 
MOV WF SSPSTAT ;设置SSPSTAT寄存器  
MOV LW 0X30 
MOV WF SSPCON1 ;设置SPI的控制方式,允许SSP方式,并 
;且时钟下降沿发送,与"74HC595当其 
;SCLK从低到高电平跳变时,串行输入数据 
;(DI)移入寄存器"的特点相应 
CLRF FLAG  
RETURN 

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

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

;********** LED闪烁报警子程序************* 
ALARM 
MOV LW 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送低电平,为锁存做准备 
MOV LW 0X08 
MOV WF TIMES 
LOOP80  MOV LW 0XC0 ;显示值为0,C0H为0的段码 
MOV WF 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送低电平,为锁存做准备 
MOV LW 0X08 
MOV WF TIMES 
LOOP8D  MOV LW 0XFF ;显示值为0,FFH为DARK的段码 
MOV WF 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 
MOV LW 0X80 ;转换结果右移,及ADRESH寄存器的高6位为"0" 
;且把RA2口设置为模拟量输入式(注意后面要把 
; RA5改成数据I/O方式,以输出显示琐存信号) 
MOV WF ADCON1 
MOV LW BEGFSR 
MOV WF FSR0L ;给出间接寻址时FSR的初值 
MOV LW 0X0A 
MOV WF TIMES ;每一轮A/D连续采样10次 
BSF INTCON,GIE ;总中断打开,及可以进行A/D转换中断 
BSF ADCON0,2 ;启动A/D转换 
LOOP1  MOV F TIMES,W 
BTFSS STATUS,Z 
GOTO LOOP1 ;等待A/D转换中断 
BCF INTCON,GIE ;A/D转换次数到10次,关闭中断 
NOP 
CLRF ACCBHI 
CLRF ACCBLO ;双精度加法的结果寄存器清0,为后面准备 
MOV LW 0X0A 
MOV WF TIMES 
MOV LW BEGFSR 
MOV WF FSR0L 
LOOP15  MOV F INDF0,W 
MOV WF ACCAHI 
INCF FSR0L 
MOV F INDF0,W 
MOV WF ACCALO 
INCF FSR0L 
CALL D_ADD 
DECFSZ TIMES 
GOTO LOOP15 
NOP ;计算得到10次A/D转换的和 
MOV LW 0X84 
MOV WF ADCON1 ;把RA5设成数字I/O,以输出显示锁存信号 
MOV LW 0X14 
MOV WF ACCAHI 
CLRF ACCALO 
CALL D_SUB ;通过双精度减判断模拟量是否达到报警限 
;度(1400H=200H*0AH,200H与2.5V对应) 
BTFSS ACCBHI,7 

[1] [2]  下一页


本文关键字:单片机  PIC单片机单片机-工控设备 - PIC单片机