为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

水位检测仪

2017-11-26 17页 doc 38KB 23阅读

用户头像

is_842972

暂无简介

举报
水位检测仪水位检测仪 ;****************************************************************** ;《水位检测仪装置》程序清单 ;程序文件名为: Leval_TEST.ASM ;****************************************************************** LIST P=16F877 INCLUDE P16F877.INC STATUS EQU 03H ;定义状态寄存器地址 PCL EQU 02H ;定义程序...
水位检测仪
水位检测仪 ;****************************************************************** ;《水位检测仪装置》程序清单 ;程序文件名为: Leval_TEST.ASM ;****************************************************************** LIST P=16F877 INCLUDE P16F877.INC STATUS EQU 03H ;定义状态寄存器地址 PCL EQU 02H ;定义程序计数器低8位指针地址 PORTA EQU 05H ;定义端口RA的数据寄存器地址 PORTC EQU 07H ;定义端口RC的数据寄存器地址 PORTD EQU 08H ;定义端口RC的数据寄存器地址 PORTE EQU 09H ;定义端口RC的数据寄存器地址 TRISA EQU 85H ;定义端口RA的方向控制寄存器地址 TRISC EQU 87H ;定义端口RC的方向控制寄存器地址 TRISD EQU 88H ;定义端口RC的方向控制寄存器地址 TRISE EQU 89H ;定义端口RC的方向控制寄存器地址 INTCON EQU 0BH ;定义中断控制寄存器地址 T1CON EQU 10H ;定义TMR1中断控制寄存器 TMR0 EQU 01H ;定义TMR0寄存器地址 PIR1 EQU 0CH ;定义第一外设中断标志寄存器地址 PIE1 EQU 8CH ;定义第一外设中断屏蔽寄存器地址 ADRESH EQU 1EH ;定义ADC结果寄存器高字节地址 ADCON0 EQU 1FH ;定义ADC控制寄存器0地址 ADCON1 EQU 9FH ;定义ADC控制寄存器1地址 T1CON EQU 10H ;定义TMR1控制寄存器地址 TMR1L EQU 0EH ;定义TMR1低字节地址 TMR1H EQU 0FH ;定义TMR1高字节地址 SSPBUF EQU 13H ;定义SPI收发缓冲寄存器地址 SSPCON EQU 14H ;定义同步控制串口寄存器地址 SSPSR EQU 94H ;定义同步串口状态寄存器地址 ;==============================变量声明======================================= TEMP EQU 20H ;定义暂存寄存器 HEIGHT EQU 22H ;定义采样结果寄存器,用以标识水位高度 SELECT_COUNT EQU 23H ;定义翻转计数器,用以标识选通的显示通道 AD_COUNT EQU 24H ;定义翻转计数器,用以标识选通的采样通道 TX_LED EQU 25H ;LED数据串行发送暂存寄存器 TX_DATA EQU 26H ;数码管数据串行发送暂存寄存器 LED1 EQU 29H ;发光二极管显示数据寄存器1 LED2 EQU 30H ;发光二极管显示数据寄存器2 LED3 EQU 31H ;发光二极管显示数据寄存器3 LED4 EQU 32H ;发光二极管显示数据寄存器4 SEG1 EQU 33H ;数码管显示数据寄存器1 SEG2 EQU 34H ;数码管显示数据寄存器2 SEG3 EQU 35H ;数码管显示数据寄存器3 SEG4 EQU 36H ;数码管显示数据寄存器4 ;==============================常量声明======================================= (定时1秒) TMR1LB EQU 0DCH ;定义TMR1低字节寄存器初始值 TMR1HB EQU 0BH ;定义TMR1高字节寄存器初始值 TMR0B EQU 0D9H ;定义TMR0寄存器初始值(定时10毫秒) GATE_VALUE EQU 07FH ;定义采样结果门槛值,用以区分水和空气阻值 ; ************************复位矢量和中断矢量****************************** ORG 000H NOP GOTO MAIN ORG 004H ;******************************中断服务程序******************************** BTFSC PIR1,0 ;检测是否是TMR1中断 GOTO TMR1_INT ;是,则转TMR1中断 BTFSC INTCON,2 ;否,检测是否是TMR0中断 GOTO TMR0_INT ;是,则转TMR0中断 REFIE ;否,中断返回 ;==============================TMR1中断服务程序============================== TMR1_INT BCF PIR1,0 ;清TMR1中断标志位 BCF STATUS,5 MOVLW 0FH ;水位检测通道为15个 MOVWF AD_COUNT ;通道数送翻转计数器 TEST_LOOP DECF AD_COUNT,0 IORLW 0F0H ;屏蔽高4位 ANDWF PORTD,1 ;输出到CD4051通道译码端,以选通某一采样通道 BSF STATUS,5 MOVLW 0EH MOVWF ADCON1 ;AD采样结果左对齐,选择RA0口为模拟量输入口 BCF STATUS,5 MOVLW 41H MOVWF ADCON0 ;选择系统时钟8分频,通道0,关闭AD启动位 NOP ;等待采样值稳定 NOP ;等待采样值稳定 NOP ;等待采样值稳定 BSF ADCON0,2 ;启动AD采样 AD_LOOP NOP BTFSC ADCON0,2 ;检测采样是否结束 GOTO AD_LOOP ;否,继续检测 MOVF ADRESH,0 ;是,读取采样结果高8位 MOVWF TEMP ;采样结果送暂存寄存器TEMP MOVF AD_COUNT,0 MOVWF HEIGHT ;将当前通道数送HEIGHT DECFSZ AD_COUNT,1 ;当前通道数减1后是否为0 GOTO TMR1_NEXT1 ;否,将采样结果与门限值比较 MOVLW 00H ;是,置水位高度为0 MOVWF HEIGHT GOTO TMR1_NEXT2 ;退出采样循环 TMR1_NEXT1 MOVF TEMP SUBWF GATE_VALUE,0 ;门限值减去采样结果 BTFSC STATUS,0 ;检测是否产生借位 GOTO TEST_LOOP ;否,继续进行下一个通道采样 TMR1_NEXT2 BCF PORTD,4 ;是,熄灭下限报警灯 BCF PORTD,5 ;熄灭下限报警灯 BCF STATUS,0 ;清借位标志位 MOVLW 15H SUBWF HEIGHT ;采样结果与上限值比较 BTFSS STATUS,0 ;检测借位标志位是否为1 GOTO TMR1_NEXT3 ;否,转下限检测 BSF PORTD,5 ;是,点亮上限报警灯 TMR1_NEXT3 BCF STATUS,2 ;清零标志位 MOVLW 00H SUBWF HEIGHT ;采样结果与下限值比较 BTFSS STATUS,2 ;检测零标志位是否为1 GOTO TMR1_NEXT4 ;否,转采样结果转换 BSF PORTD,4 ;是,点亮下限报警灯 TMR1_NEXT4 CALL ADRES_CON ;调转采样结果转换子程序 MOVLW 04H MOVWF SELECT_COUNT ;将显示通道选择翻转计数器赋初值 MOVLW TMR1LB MOVWF TMR1L ;写入TMR1寄存器低字节数 MOVLW TMR1HB MOVWF TMR1H ;写入TMR1寄存器高字节数 RETFIE ;中断返回 ;==============================TMR0中断服务程序============================== TMR0_INT BCF INTCON,2 ;清TMR0中断标志位 BCF STATUS,0 DECF SELECT_COUNT,0 MOVWF TEMP ;将翻转计数器内容减1送TEMP寄存器 RLF TEMP,0 ;TEMP寄存器内容乘以2,作为查询显示数据的 ;地址偏移量 ADDWF PCL,1 ;将地址偏移量与程序计数器值叠加 MOVF LED1 GOTO TMR0_NEXT1 MOVF LED2 GOTO TMR0_NEXT1 MOVF LED3 GOTO TMR0_NEXT1 MOVF LED4 TMR0_NEXT1 MOVWF TX_LED ;将本次显示的LED数据送LED发送寄存器 RLF TEMP ;TEMP寄存器内容乘以2,作为查询显示数据的 ;地址偏移量 ADDWF PCL,1 ;将地址偏移量与程序计数器值叠加 MOVF SEG1 GOTO TMR0_NEXT2 MOVF SEG2 GOTO TMR0_NEXT2 MOVF SEG3 GOTO TMR0_NEXT2 MOVF SEG4 TMR0_NEXT2 MOVWF TX_DATA ;将本次显示的数码管数据送数码管发送寄存器 BCF PORTD,7 ;清74LS244使能位,暂时禁止数据输出显示 BSF STATUS,5 CLRF SSPSTAT ;SPI方式清SMP位、CKE位和BF位,在脉冲上 ;沿移位输出数据跳 MOVLW 30H MOVWF SSPCON ;允许串口工作,时钟频率为系统时钟的1/4 MOVF TX_LED,0 ;将第一个待发送的字节送缓冲寄存器 CALL SPI_TX ;调发送完成查询子程序 MOVF TX_DATA,0 ;将第二个待发送的字节送缓冲寄存器 CALL SPI_TX ;调发送完成查询子程序 DECF SELECT_COUNT,0 ;通道寄存器减1 MOVWF PORTE ;选通待显示的通道 BSF PORTD,7 ;置74LS244使能位,允许数据输出显示 DECFSZ SELECT_COUNT,1 ;通道寄存器减1,并检测是否为0 GOTO TMR0_NEXT3 ;否,转TMR0_NEXT3 MOVLW 04H ;是,重新对通道寄存器赋初值 MOVWF SELECT_COUNT TMR0_NEXT3 MOVLW TMR0B MOVWF TMR0 ;TMR1寄存器赋初值 RETFIE ;中断返回 ;**********************************主程序*********************************** MAIN BSF STATUS,5 MOVLW 01H MOVWF TRISA ;置RA0口为输入方式 MOVLW 00H MOVWF TRISC ;置RC口为输出方式 MOVWF TRISD ;置RD口为输出方式 MOVWF TRISE ;置RE口为输出方式 ;================================TMR0初始化================================ MOVLW 07H MOVWF OPTION_REG ;分频器给TMR0,分频比1:128,选用系统时钟 BCF STATUS,5 MOVLW 0E0H MOVWF INTCON ;开全局中断,允许响应TMR0及第二梯队中断 ;请求(TMR1中断),TM0中断标志位清零 MOVLW TMR0B MOVWF TMR0 ;TMR0寄存器赋初值 ;================================TMR1初始化================================ BSF STATUS,5 MOVLW 01H MOVWF PIE1 ;允许TMR1中断 BCF STATUS,5 MOVLW 00H MOVWF PIR1 ;TMR1中断标志位清零 MOVLW 30H MOVWF T1CON ;分频比为1:8,选用内部时钟源 MOVLW TMR1LB MOVWF TMR1L ;TMR1寄存器低字节赋初值 MOVLW TMR1HB MOVWF TMR1H ;TMR1寄存器高字节赋初值 BSF T1CON,0 ;启动TMR1定时 MOVLW 04H MOVWF SELECT_COUNT ;显示通道寄存器赋初值 MAIN_LOOP GOTO MAIN_LOOP ;************************SPI发送完成查询子程序************************ SPI_TX MOVWF SSPBUF BCF STATUS,6 SPI_LOOP BSF STATUS,5 BTFSS SSPSTAT,BF ;查询发送受否完成 GOTO SPI_LOOP ;否,继续查询 BCF STATUS,5 ;是,选择BANK0 MOVF SSPBUF ;将缓冲寄存器的数据读出,不管数据是否有用 RETURN ;子程序返回 ;************************数据转换子程序*********************************** ADRES_CON ;===============================LED1赋值================================ MOVF HEIGHT,0 CALL LED1_CON MOVWF LED1 ;===============================LED2赋值================================ MOVF HEIGHT,0 CALL LED2_CON MOVWF LED2 ;===============================LED3赋值================================ MOVF HEIGHT,0 CALL LED3_CON MOVWF LED3 ;===============================LED4赋值================================ MOVF HEIGHT,0 CALL LED4_CON MOVWF LED4 ;===============================SEG1赋值================================ MOVF HEIGHT,0 CALL SEG1_CON MOVWF SEG1 ;===============================SEG2赋值================================ MOVF HEIGHT,0 CALL SEG2_CON MOVWF SEG2 ;===============================SEG3赋值================================ MOVF HEIGHT,0 CALL SEG3_CON MOVWF SEG3 ;===============================SEG4赋值================================ MOVF HEIGHT,0 CALL SEG4_CON MOVWF SEG4 RETURN ;===============================LED1查子程序=============================== LED1_CON ADDWF PCL,1 RETLW 0F0H RETLW 0E1H RETLW 0C3H RETLW 87H RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH ;===============================LED2查表子程序=============================== LED2_CON ADDWF PCL,1 RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0E1H RETLW 0C3H RETLW 87H RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH ;===============================LED3查表子程序=============================== LED3_CON ADDWF PCL,1 RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0E1H RETLW 0C3H RETLW 87H RETLW 0FH RETLW 0FH RETLW 0FH RETLW 0FH ;===============================LED4查表子程序=============================== LED4_CON ADDWF PCL,1 RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0F0H RETLW 0E1H RETLW 0C3H RETLW 87H ;===============================SEG1查表子程序=============================== SEG1_CON ADDWF PCL,1 RETLW 40H RETLW 40H RETLW 40H RETLW 40H RETLW 40H RETLW 40H RETLW 40H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H ;===============================SEG2查表子程序=============================== SEG2_CON ADDWF PCL,1 RETLW 40H RETLW 5BH RETLW 06H RETLW 06H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 00H RETLW 06H RETLW 06H RETLW 5BH ;===============================SEG3查表子程序=============================== SEG3_CON ADDWF PCL,1 RETLW 40H RETLW 66H RETLW 7DH RETLW 5BH RETLW 7FH RETLW 6DH RETLW 5BH RETLW 06H RETLW 00H RETLW 06H RETLW 5BH RETLW 6DH RETLW 7FH RETLW 5BH RETLW 7DH RETLW 66H ;===============================SEG4查表子程序=============================== SEG4_CON ADDWF PCL,1 RETLW 40H RETLW 3FH RETLW 3FH RETLW 3FH RETLW 3FH RETLW 3FH RETLW 6DH RETLW 3FH RETLW 3FH RETLW 3FH RETLW 6DH RETLW 3FH RETLW 3FH RETLW 3FH RETLW 3FH RETLW 3FH END
/
本文档为【水位检测仪】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索