⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.txt

📁 软件思路:选择RAO做为模拟输入通道 连续转换4次再求平均值做为转换结果最后结构只取低8位结果送数码管的低3位显示 硬件要求:拨码开关S14第2位置ON
💻 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 + -