PIC单片机AD转换汇编程序

上传人:洪易 文档编号:39960851 上传时间:2018-05-21 格式:DOC 页数:9 大小:28.50KB
返回 下载 相关 举报
PIC单片机AD转换汇编程序_第1页
第1页 / 共9页
PIC单片机AD转换汇编程序_第2页
第2页 / 共9页
PIC单片机AD转换汇编程序_第3页
第3页 / 共9页
PIC单片机AD转换汇编程序_第4页
第4页 / 共9页
PIC单片机AD转换汇编程序_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PIC单片机AD转换汇编程序》由会员分享,可在线阅读,更多相关《PIC单片机AD转换汇编程序(9页珍藏版)》请在金锄头文库上搜索。

1、PIC 单片机单片机 AD 转换汇编程序转换汇编程序;此汇编程序实现 A/D 转换功能,应用于 pic 单片机上,A/D 采用中断方式。该程序通过单片机的 RA2 模拟通道送入;一直流电压,当送入的直流电压大于 2.5V 时,8 个 LED 闪动,当直流电压恢复到 2.5V 以下;时,LED 停止闪动。为了防止干扰,本程序对直流电压采样 10 次后再作判断,中间的采样结;果用间接寻址的方式存取。LIST P=18F458INCLUDE “P18F458.INC“TIMES EQU 0X20 DEY EQU TIMES+1ACCALO EQU TIMES+2 ;ACCA 为双精度加数寄存器ACC

2、AHI EQU TIMES+3ACCBLO EQU TIMES+4 ;ACCB 为双精度加法的结果寄存器ACCBHI EQU TIMES+5FLAG EQU TIMES+6DEYH EQU TIMES+7DEYL EQU TIMES+9BEGFSR EQU 0X30 ;间接寻址 FSR 的起始值(宏定义方式给出)ORG 0X0000GOTO MAINORG 0X0008GOTO INTSERVE ;转向中断服务子程序ORG 0X30;*双字节减法子程序,入口地址 ACCB-ACCA,出口地址 ACCB*D_SUBCALL NEG_A ;求 ACCA 的补码;*双字节加法子程序,入口地址 ACC

3、B+ACCA,出口地址 ACCB*D_ADDMOVF ACCALO,0 ;ACCB 和 ACCA 低半字节相加ADDWF ACCBLOBTFSC STATUS,C ;有进位否?INCF ACCBHI ;有,ACCB 高字节加 1,再加 ACCAHIMOVF ACCAHI,0 ;ACCA、ACCB 高半字节相加ADDWF ACCBHIRETURN ;子程序返回;* ACCA 取补子程序*NEG_ACOMF ACCALO ;ACCALO 取反加 1INCF ACCALOBTFSC STATUS,Z ;低 8 位有进位吗?DECF ACCAHI ;有,ACCAHI 减 1,再取反COMF ACCAH

4、I ;否则 ACCAHI 直接取反RETURN ;子程序返回;*初始化子程序*INITIALCLRF INTCON ;禁止总中断和外围中断MOVLW 0X51 MOVWF ADCON0 ;选择 AD 通道为 RA2,且打开 A/D 转换器;在工作状态,且使 AD 转换时钟为 8ToscMOVLW 0X80 MOVWF ADCON1 ;转换结果右移,即 ADRESH 寄存器的高 6;位为“0“,且把 RA2 口设置为模拟量输入式;(注意后面要把 RA5 改成数据 I/O 方式,以;输出显示琐存信号) BCF PIR1,ADIF ;清除 A/D 转换标志BSF PIE1,ADIE ;A/D 转换中

5、断允许BSF INTCON,PEIE ;外围中断允许BSF IPR1,ADIP ;B 口变位中断高优先级BSF RCON,7 ;使能中断优先级BSF TRISA,2 ;设置 RA2 为输入方式 BCF TRISA,5 ;置 RA5 为输出方式,以输出锁存信号BCF TRISC,5BCF TRISC,3 ;设置 SCK 与 SDO 为输出方式MOVLW 0XC0MOVWF SSPSTAT ;设置 SSPSTAT 寄存器 MOVLW 0X30MOVWF SSPCON1 ;设置 SPI 的控制方式,允许 SSP 方式,并;且时钟下降沿发送,与“74HC595 当其;SCLK 从低到高电平跳变时,串行

6、输入数据;(DI)移入寄存器“的特点相应CLRF FLAG RETURN;*软件延时子程序*DELAYMOVLW 0XFFMOVWF DEYHAGAIN1 MOVLW 0XFFMOVWF DEYLAGAIN2 NOPDECFSZ DEYLGOTO AGAIN2DECFSZ DEYHGOTO AGAIN1RETURN;* A/D 中断服务子程序*INTSERVEBCF PIR1,ADIF ;清除 A/D 转换标志MOVF ADRESH,WMOVWF INDF0 ;读取并存储 A/D 转换结果的高两位INCF FSR0LMOVF ADRESL,WMOVWF INDF0INCF FSR0L ;读取并

7、存储 A/D 转换结果的低 8 位DECF TIMES,1 ;A/D 转换次数减 1MOVLW 0X02MOVWF DEYLOOP13 DECFSZ DEY,1GOTO LOOP13 ;给予一定的延时,保证两次 A/D 转换期间;2Tad 的间隔时间和电容的采样时间BSF ADCON0,2 ;启动下一次 A/D 转换RETFIE ;中断返回;* LED 闪烁报警子程序*ALARMMOVLW 0X01XORWF FLAG,1BTFSS FLAG,0 CALL DISPLAY0 ;调用显“0”子程序NOPBTFSC FLAG,0CALL DISPDARK ;调用显“DARK”子程序RETURN;*

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

9、RKTRANSMIT1 ;SPI 发送显示子模块CLRF PORTA ;LACK 送低电平,为锁存做准备MOVLW 0X08MOVWF TIMESLOOP8D MOVLW 0XFF ;显示值为 0,FFH 为 DARK 的段码MOVWF SSPBUF ;启动发送 WAIT1BTFSS PIR1,SSPIFGOTO WAIT1 ;等待发送结束BCF PIR1,SSPIF ;清除中断标志DECFSZ TIMESGOTO LOOP8D ;一次要发送完 8 个数据 BSF PORTA,5 ;最后给一个锁存信号,代表一次显示任务完成RETURN;*PIC 单片机 A/D 转换汇编程序主程序*;转载 单

10、片机网MAIN NOPCALL INITIAL ;初始化LOOPMOVLW 0X80 ;转换结果右移,及 ADRESH 寄存器的高 6 位为“0“;且把 RA2 口设置为模拟量输入式(注意后面要把; RA5 改成数据 I/O 方式,以输出显示琐存信号)MOVWF ADCON1MOVLW BEGFSRMOVWF FSR0L ;给出间接寻址时 FSR 的初值MOVLW 0X0AMOVWF TIMES ;每一轮 A/D 连续采样 10 次BSF INTCON,GIE ;总中断打开,及可以进行 A/D 转换中断BSF ADCON0,2 ;启动 A/D 转换LOOP1 MOVF TIMES,WBTFSS

11、 STATUS,ZGOTO LOOP1 ;等待 A/D 转换中断BCF INTCON,GIE ;A/D 转换次数到 10 次,关闭中断NOPCLRF ACCBHICLRF ACCBLO ;双精度加法的结果寄存器清 0,为后面准备MOVLW 0X0AMOVWF TIMESMOVLW BEGFSRMOVWF FSR0LLOOP15 MOVF INDF0,WMOVWF ACCAHIINCF FSR0LMOVF INDF0,WMOVWF ACCALOINCF FSR0LCALL D_ADDDECFSZ TIMESGOTO LOOP15NOP ;计算得到 10 次 A/D 转换的和MOVLW 0X84M

12、OVWF ADCON1 ;把 RA5 设成数字 I/O,以输出显示锁存信号MOVLW 0X14MOVWF ACCAHICLRF ACCALOCALL D_SUB ;通过双精度减判断模拟量是否达到报警限;度(1400H=200H*0AH,200H 与 2.5V 对应)BTFSS ACCBHI,7CALL ALARM ;若 ACCBHI 的最高位为 1,则证明减法结;果为负,即直流电压值超过 2.5V,则报警NOPBTFSC ACCBHI,7CALL DISPLAY0 ;若没有超过 2.5V,则不报警,8 个 LED;同时显示 0CALL DELAY ;软件延时,使电压检测不要过于频繁GOTO LOOP ;重复检测输入的直流电压值END

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号