📄 ad.txt
字号:
AD转换程序[汇编语言]2007年10月12日 星期五 13:46;实验目的:熟悉A/D转换
;软件思路:选择RAO做为模拟输入通道;
; 连续转换4次再求平均值做为转换结果
; 最后结构只取低8位
; 结果送数码管的低3位显示
;硬件要求:拨码开关S14第2位置ON,第1位置OFF
; 拨码开关S6全部置ON,S5第4-6位置ON,第1-3位置OFF
; 为不影响结果,其他拨码开关置OFF。
#INCLUDE<P16F877a.INC> ;包含芯片头文件
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;*********************寄存器定义*********************
TEMP EQU 20H ;临时寄存器
BAI EQU 21H ;转换结果的百位
SHI EQU 22H ;转换结果的十位
GE EQU 23H ;转换结果的个位
;****************************************************
ORG 00H ;复位入口地址
NOP ;ICD需要的空指令
GOTO MAIN ;跳转到主程序入口
ORG 04H ;中断入口地址
RETFIE ;放置一条中断返回指令,防止以外中断发生
;***********************查表程序*********************
;入口参数:W
;出口参数:W
TABLE
ADDWF PCL,1 ;指令寄存器加上偏移地址
RETLW 0C0H ;0的编码(公阳极数码管)
RETLW 0F9H ;1的编码
RETLW 0A4H ;2的编码
RETLW 0B0H ;3的编码
RETLW 99H ;4的编码
RETLW 92H ;5的编码
RETLW 082H ;6
RETLW 0F8H ;7
RETLW 080H ;8
RETLW 090H ;9
;***********************主程序***********************
MAIN
MOVLW 30H
MOVWF FSR ;转换结果存放起始地址
LOOP
BSF STATUS,RP0 ;选择体1
MOVLW 7H ;A口高3位为输出,低3位输入
MOVWF TRISA
CLRF TRISD ;D口设为输出
MOVLW 8EH
MOVWF ADCON1 ;结果左对齐,只选择RA0做ADC口,其余做普通数字口
BCF STATUS,RP0 ;回体0
MOVLW 41H
MOVWF ADCON0 ;选择时钟源为fosc/8,允许ADC工作
CALL DELAY ;调用延时程序,保证足够的采样时间
BSF ADCON0,GO ;启动ADC转换
WAIT
BTFSS PIR1,ADIF ;转换是否完成
GOTO WAIT ;等待转换的完成
BSF STATUS,RP0
MOVFW ADRESL ;读取转换的结果
BCF STATUS,RP0
MOVWF INDF ;保存到临时寄存器里
INCF FSR,1
BTFSS FSR,2 ;连续转换4次,求平均值
GOTO LOOP
CALL CHANGE ;调用结果转换程序
CALL DISPLAY ;调用显示程序
GOTO MAIN ;循环工作
;************************转换程序*********************
;入口参数:30H---33H
;出口参数:BAI,SHI,GE
CHANGE
CLRF BAI
CLRF SHI
CLRF GE ;先清除结果寄存器
MOVFW 31H ;以下8条指令求4次转换结果的平均值
ADDWF 30H,1
MOVFW 32H
ADDWF 30H,1
MOVFW 33H
ADDWF 30H,1
RRF 30H,1
RRF 30H,0
MOVWF TEMP
MOVLW 64H ;减100,结果保留在W中
SUBWF TEMP,0
BTFSS STATUS,C ;判断是否大于100
GOTO SHI_VAL ;否,转求十位结果
MOVWF TEMP ;是,差送回TEMP中
INCF BAI,1 ;百位加1
GOTO $-6 ;返回继续求百位的值
SHI_VAL
MOVLW 0AH ;减10,结果保留在W中
SUBWF TEMP,0
BTFSS STATUS,C ;判断是否大于10
GOTO GE_VAL ;否,转去判断个位结果
MOVWF TEMP ;是,差送回TEMP中
INCF SHI,1 ;十位值加1
GOTO $-6 ;转会继续求十位的值
GE_VAL
MOVFW TEMP
MOVWF GE ;个位的值
RETURN
;**************************显示程序********************
;入口参数:BAI,SHI,GE
;出口参数:无
DISPLAY
MOVFW BAI ;显示百位
CALL TABLE
MOVWF PORTD
BCF PORTA,3
CALL DELAY
CALL DELAY
BSF PORTA,3
MOVFW SHI ;显示十位
CALL TABLE
MOVWF PORTD
BCF PORTA,4
CALL DELAY
CALL DELAY
BSF PORTA,4
MOVFW GE ;显示个位
CALL TABLE
MOVWF PORTD
BCF PORTA,5
CALL DELAY
CALL DELAY
BSF PORTA,5
RETURN
;***************************延时程序***********************
;入口参数:无
;出口参数:无
DELAY
MOVLW 5FH
MOVWF TEMP
DECFSZ TEMP,1
GOTO $-1
RETURN
;*********************************************************
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -