PIC16C711 直流电压表汇编程序

发布者:TranquilSmile最新更新时间:2017-12-06 来源: eefocus关键字:PIC16C711  直流电压表  汇编程序 手机看文章 扫描二维码
随时随地手机看文章

定义用户寄存器 
WEI1 EQU H’0C’ ;BIT0=MODS:选择模式位 0:模式1 1:模式2 
;BIT1=BREK:断路判别位 0:无断路 1:有断路 
;BIT2= 
;BIT3= 
;BIT4= 
;BIT5=慢响 
;BIT6=快响 
;BIT7=长响 
WEI2 EQU H’0D’ ;“百位值运算”的启始值  

WEI3 EQU H’0E’ ;“十位值运算”的启始值 
WEI4 EQU H’0F’ ;个位值 
WEI5 EQU H’10’ ;百位值 
WEI6 EQU H’11’ ;十位值 
WEI7 EQU H’12’ ; 
WEI8 EQU H’13’ ; 
WEI9 EQU H’14’ ; 
WEIA EQU H’15’ ;  
WEIB EQU H’16’ 
WEIC EQU H’17’ 
WEID EQU H’18’ 
WEIE EQU H’19’ 
WEIF EQU H’1A’ 
WEIG EQU H’1B’  
WEIH EQU H’1C’ 
WEII EQU H’1D’  
CHECK EQU H’7’ 
DP EQU H’1’ 
AD EQU H’0’ 
BUZZER EQU H’3’ 
R EQU H’2’ 
L EQU H’4’ 
;************************************************************************ 
;矢量地址 
ORG H’00’ ;复位矢量 
GOTO MAIN 
ORG H’04’ ;中断矢量 
NOP  
GOTO INTER  
;************************************************************************ 
;数码值 
TABLE:  
ADDWF PCL,F ; 
RETLW B’01000000’ ;“0”值 
RETLW B’01111001’ ;“1”值 
RETLW B’00100100’ ;“2”值 
RETLW B’00110000’ ;“3”值 
RETLW B’00011001’ ;“4”值 
RETLW B’00010010’ ;“5”值 
RETLW B’00000010’ ;“6”值 
RETLW B’01011000’ ;“7”值 
RETLW B’00000000’ ;“8”值 
RETLW B’00010000’ ;“9”值 
;------------------------------------------------------------------------ 
;清除寄存器WEI1-WEIG  
MAIN:  
CLRF WEI1 ; 
CLRF WEI2 ; 
CLRF WEI3 ; 
CLRF WEI4 ; 
CLRF WEI5 ; 
CLRF WEI6 ; 
CLRF WEI7 ; 
CLRF WEI8 ; 
CLRF WEI9 ; 
CLRF WEIA ; 
CLRF WEIB ; 
CLRF WEIC ; 
CLRF WEID ; 
CLRF WEIE ; 
CLRF WEIF ; 
CLRF WEIG ;  
CLRF WEIH ; 
CLRF WEII ;  
BSF STATUS,RP0 ; 
BCF OPTION_REG,NOT_RBPU 
BCF STATUS,RP0 ; 
MOV F PORTB,1 ; 
BTFSS PORTB,1 ; 
BSF WEI1,0 ; 
;------------------------------------------------------------------------  
;设置A/D通道及A/D结构  
BSF STATUS,RP0 ;  
MOV LW B’00000010’ ;设置一个“A/D口” 
MOV WF ADCON1 ;参考电压:工作电压5V  
MOV LW B’10000000’ ; 
MOV WF TRISB ; 
MOV LW B’00000001’ ; 
MOV WF TRISA ; 
MOV LW B’10000111’ ; 
MOV WF OPTION_REG ; 
MOV LW B’10100000’ ; 
MOV WF INTCON ;  
;-----------------------------------------------------------------------  
;设置端口“输入/输出”并设置初始状态  
BCF STATUS,RP0 ; 
MOV LW B’01000000’ ;设置A/D通道:AN0 
MOV WF ADCON0 ;选用内部1:8时钟振荡 
MOV LW B’01111111’ ; 
MOV WF PORTB ; 
MOV LW B’00010110’ ; 
MOV WF PORTA ; 
MOV LW D’252’ ; 
MOV WF TMR0 ;设置TMR0初始值  
;------------------------------------------------------------------------  
;选择模式 
BTFSC WEI1,0 ;判断“模式开关”是否闭合 
GOTO MODLE2 ;“模式开关”闭合,则进入“模式2” 
GOTO MODLE1 ;“模式开关”断开,则进入“模式1” 
;------------------------------------------------------------------------ 
;“模式1”初始化 
MODLE1:  
MOV F PORTB,1 ; 
BTFSS PORTB,CHECK ;判断是否有断路 
GOTO $+7 ; 
BSF WEI1,1 ; 
BSF WEI1,6 ;有断路:蜂鸣器快响并且“无显示”延时3秒 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
CALL DELAY3S ;无断路:“无显示”延时3秒 
GOTO START ;  
CALL DELAY3S ;  
GOTO START ; 
;------------------------------------------------------------------------ 
;“模式2”初始化 检测数码管各段,蜂鸣器“长响 ” 
MODLE2:  
BSF WEI1,0 ;设置“模式选择位” 
BSF WEI1,7 ;打开蜂鸣器“长响 ” 
BCF WEI1,5 ; 
BCF WEI1,6 ; 
BCF STATUS,C ;设置“进位标志位”  
MOV LW B’11111111’ ;  
MOV WF WEI7 ;  
RLF WEI7,F ; 
MOV F WEI7,W ;  
MOV WF PORTB ;设置“检测数码管段值”给PORT5 
BCF PORTA,R ;开通“右数码管” 
BCF PORTA,L ;开通“左数码管” 
CALL DELAYP5 ; 
BSF PORTA,R ;关闭“右数码管” 
BSF PORTA,L ;关闭“左数码管” 
MOV LW B’11111111’ ; 
MOV WF PORTB ;清除给PORT5的“检测数码管段值” 
BTFSC WEI7,6 ;检测是否完毕 
GOTO $-D’11’ ;没有完毕 继续检测 
BCF PORTA,DP ;已完毕 设置“小数点”及“1”值 
BCF PORTA,R ;开通“右数码管”  
BCF PORTA,L ;开通“左数码管” 
CALL DELAYP5 ; 
BSF PORTA,R ;关闭“右数码管” 
BSF PORTA,L ;关闭“左数码管” 
BSF PORTA,DP ;清除“小数点”及“1”值 
BCF WEI1,7 ;关闭蜂鸣器“长响 ” 
BCF WEI1,6 ; 
BCF WEI1,5 ;  
GOTO START ; 
;------------------------------------------------------------------------ 
;开始工作 
START:  
MOV F PORTB,F ; 
BTFSC PORTB,CHECK ;判断是否有断路 
GOTO DUANLU ;有断路 
BCF WEI1,1 ;清0断路判别位  
GOTO PANZHI ;无断路 
;------------------------------------------------------------------------ 
;断路处理 
DUANLU:  
BSF WEI1,1 ;设置断路判别位 
BSF WEI1,6 ; 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
GOTO PANZHI ;  
;------------------------------------------------------------------------ 
;判断电压值 
PANZHI:  
BSF ADCON0,ADON ;A/D处于工作状态 
BSF ADCON0,GO_DONE ;A/D开始运行 
BTFSC ADCON0,GO_DONE ;判A/D是否完成 
GOTO $-1 ;A/D没完成 
BCF ADCON0,ADIF ; 
BCF ADCON0,ADON ;A/D已完成 关闭A/D 
CALL CV ; 
MOV F ADRES,W ; 
MOV WF WEI8 ; 
MOV WF WEI2 ;A/D值传给WEI2 
BCF STATUS,C ;清零“进位标志位”  
SUBLW D’200’ ; 
BTFSS STATUS,C 
GOTO V_20 ;跳到“20V以上”程序 
MOV F ADRES,W 
BCF STATUS,C ;清零“进位标志位” 
SUBLW D’160’ 
BTFSS STATUS,C 
GOTO V16 ;跳到“16V-19.9V之间”程序 
MOV F ADRES,W 
BCF STATUS,C ;清零“进位标志位” 
SUBLW D’100’ 
BTFSS STATUS,C 
GOTO V10 ;跳到“10V-15.9V之间”程序 
MOV F ADRES,W  
BCF STATUS,C ;清零“进位标志位” 
SUBLW D’50’ 
BTFSS STATUS,C 
GOTO V5 ;跳到“5V-9.9V之间”程序 
GOTO V4.9 ;跳到4.9V以下程序  
;-------------------------------------------------------------------------  
V4.9: ;4.9V以下 数码管显示LL 
BTFSC WEI1,1 ;判断是否有断路 
GOTO $+6 ; 
BSF WEI1,7 ;无断路 长响 
BCF WEI1,6 ; 
BCF WEI1,5 ; 
CALL LL ; 
GOTO START ; 
BSF WEI1,6 ;有断路 快响 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
CALL LL ; 
GOTO START ;  
;------------------------------------------------------------------------- 
V5: ;5V-9.9V之间  
BTFSC WEI1,1 ;判断是否有断路 
GOTO $+5 ; 
BSF WEI1,5 ;无断路 慢响 
BCF WEI1,6 ; 
BCF WEI1,7 ; 
GOTO DISPLAY ; 
BSF WEI1,6 ;有断路 快响 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
GOTO DISPLAY ;  
;------------------------------------------------------------------------- 
V10: ;10V-15.9V之间 
BTFSC WEI1,1 ;判断是否有断路 
GOTO $+5 ; 
BCF WEI1,5 ;无断路 不响 
BCF WEI1,6 ; 
BCF WEI1,7 ; 
GOTO DISPLAY ; 
BSF WEI1,6 ;有断路 快响 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
GOTO DISPLAY ; 
;------------------------------------------------------------------------- 
V16: ;16V-19.9V  
BSF WEI1,6 ;快响 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
GOTO DISPLAY ; 
;------------------------------------------------------------------------- 
V_20: 
BTFSC WEI1,1 ;判断是否有断路 
GOTO $+6 ; 
BSF WEI1,7 ;无断路 长响 
BCF WEI1,6 ; 
BCF WEI1,5 ; 
CALL HH ; 
GOTO START ; 
BSF WEI1,6 ;有断路 快响 
BCF WEI1,5 ; 
BCF WEI1,7 ; 
CALL HH ; 
GOTO START ; 
;------------------------------------------------------------------------- 
;运算“显示值” 
DISPLAY:  
NOP ; 
HUN:  
MOV F WEI2,W ; 
MOV WF WEI3 ;WEI2-100D的余值传给WEI3作为“十位值运算”的启始值 
MOV LW D’100’ 
BCF STATUS,C ;清零“进位标志位” 
SUBWF WEI2,F ;WEI2-100D余值传给WEI2 
BTFSS STATUS,C ;判WEI2是否大于100D 
GOTO TEN ;小于100D 跳到“十位值运算”处 
INCF WEI5,F ;大于100D WEI5+1:百位值 
GOTO HUN  
TEN:  
MOV F WEI3,W ; 
MOV WF WEI4 ; 
MOV LW D’10’ ;WEI3-10D的余值传给WEI4作为“个位值运算”的启始值 
BCF STATUS,C ;清零“进位标志位” 
SUBWF WEI3,F ;WEI3-10D余值传给WEI3 
BTFSS STATUS,C ;判WEI2是否大于10D 
GOTO NUMB ;小于10D 跳到“个位值运算”处 
INCF WEI6,F ;大于10D WEI6+1:十位值 
GOTO TEN 
;------------------------------------------------------------------------ 
;显示“十位值”“小数点” 
NUMB:  
MOV F WEI6,W 
CALL TABLE ; 
MOV WF PORTB ;设置“十位值” 
BCF PORTA,DP ;设置小数点  
BCF PORTA,L ;打开显示“十位值” 
CALL DELAY ; 
MOV LW B’11111111’ ;  
MOV WF PORTB ;清除“十位值” 
BSF PORTA,DP ;清除小数点  
BSF PORTA,L ;关闭显示“十位值” 
;------------------------------------------------------------------------ 
;显示“个位值” “百位值”  
MOV F WEI4,W 
CALL TABLE 
MOV WF PORTB ;设置“个位值” 
BCF STATUS,Z ;清除“零标志位” 
CLRW ;清除W 
IORWF WEI5,W ; 
BTFSS STATUS,Z ;判有无“百位值” 
BCF PORTA,DP ;显示“百位值” 
BCF PORTA,R ;打开显示“个位值” 
CALL DELAY ; 
MOV LW B’11111111’ ; 
MOV WF PORTB ;清除“个位值” 
BSF PORTA,DP ;清除“百位值” 
BSF PORTA,R ;关闭显示“个位值” 
CLRF WEI6 ; 
CLRF WEI5 ; 
GOTO START ;  
;************************************************************************ 
;延时20MS秒程序 
DELAY: 
MOV LW D’10’ ; 
MOV WF WEIE ; 
DELAY1:  
MOV LW D’10’ ; 
MOV WF WEIF ; 
DELAY2: 
MOV LW D’10’ ; 
MOV WF WEIG ; 
DELAY3:  
DECFSZ WEIG,F ; 
GOTO DELAY3 ; 
DECFSZ WEIF,F ; 
GOTO DELAY2 ; 
DECFSZ WEIE,F ; 
GOTO DELAY1 ; 
RETURN ; 
;------------------------------------------------------------------------ 
;延时0.5秒程序 
DELAYP5:  
CLRF WEI9 ; 
CLRF WEIA ; 
BTFSS WEIA,2 ; 
GOTO $-1 ; 
CLRF WEI9 ; 
CLRF WEIA ; 
RETURN ; 
;------------------------------------------------------------------------ 
;延时3秒程序 
DELAY3S: 
CLRF WEI9 ; 
CLRF WEIA ; 
BTFSS WEIA,4 ; 
GOTO $-1 ; 
CLRF WEI9 ; 
CLRF WEIA ; 
RETURN ; 
;------------------------------------------------------------------------ 
CV:  
BTFSS WEI1,0 ; 
RETURN ; 
MOV LW B’11100000’ ; 
ANDWF WEI1,W ; 
BTFSS STATUS,Z ; 
RETURN ; 
MOV F ADRES,W ; 
XORWF WEI8,W ; 
BTFSS STATUS,Z ; 
GOTO CLEAR ; 
BTFSS WEIA,4 ; 
RETURN ; 
BSF INTCON,RBIE ;使能PORTB引脚电平变化中断 
BCF INTCON,GIE ;禁止全局中断 
BCF INTCON,T0IE ; 
MOV F PORTB,F ;读状态 
SLEEP ;进入休眠状态 
NOP ; 
CLRF INTCON ; 
BSF INTCON,GIE ; 
BSF INTCON,T0IE ; 
CLRF WEI9 ; 
CLRF WEIA ; 
RETURN ; 
CLEAR: 
CLRF WEI9 ; 
CLRF WEIA ; 
RETURN ; 
;------------------------------------------------------------------------ 
LL: 
MOV LW B’11000111’ ; 
MOV WF PORTB ; 
BCF PORTA,L ; 
BCF PORTA,R ; 
CALL DELAY ; 
MOV LW B’11111111’ ; 
MOV WF PORTB ; 
BSF PORTA,L ; 
BSF PORTA,R ; 
RETURN 
;------------------------------------------------------------------------ 
HH: 
MOV LW B’10001001’ ; 
MOV WF PORTB ; 
BCF PORTA,L ; 
BCF PORTA,R ; 
CALL DELAY ; 
MOV LW B’11111111’ ; 
MOV WF PORTB ; 
BSF PORTA,L ; 
BSF PORTA,R ; 
RETURN 
;************************************************************************ 
;TMR0中断  
INTER:  
MOV WF WEIH ;W,STATUS压入堆栈 
SWAPF STATUS,W ; 
MOV WF WEII ; 
BCF INTCON,T0IF ; 
MOV LW D’252’ ; 
MOV WF TMR0 ;设置TMR0初始值  
INCFSZ WEI9,F ; 
GOTO $+2 ; 
INCF WEIA,F ; 
MOV LW B’11100000’ ; 
ANDWF WEI1,W ; 
BTFSC STATUS,Z ; 
GOTO OUT2 ; 
MOV LW B’00001000’ ; 
XORWF PORTA,F ; 
BTFSS WEI1,6 ; 
GOTO $+D’10’ ; 
INCFSZ WEIB,F ; 
GOTO OUT ; 
BCF PORTA,BUZZER ; 
BSF STATUS,RP0 ; 
MOV F TRISA,W ; 
XORLW B’00001000’ ; 
MOV WF TRISA ; 
BCF STATUS,RP0 ; 
GOTO OUT ; 
;------------------------------------------------------------------------ 
BTFSS WEI1,5 ; 
GOTO OUT1 ; 
INCFSZ WEIC,F ; 
GOTO OUT ; 
INCF WEID,F ; 
BTFSS WEID,2 ; 
GOTO OUT ; 
CLRF WEIC ; 
CLRF WEID ; 
BCF PORTA,BUZZER ; 
BSF STATUS,RP0 ; 
MOV F TRISA,W ; 
XORLW B’00001000’ ; 
MOV WF TRISA ; 
BCF STATUS,RP0 ; 
GOTO OUT ; 
OUT1:  
BSF STATUS,RP0 ; 
MOV F TRISA,W ; 
ANDLW B’11110111’ ; 
MOV WF TRISA ; 
BCF STATUS,RP0 ; 
GOTO OUT ; 
OUT2:  
BCF PORTA,BUZZER ; 
OUT:  
SWAPF WEII,W ;W,STATUS弹出堆栈 
MOV WF STATUS ; 
SWAPF WEIH,F ; 
SWAPF WEIH,W ; 
RETFIE ;允许中断并返回 
END 


关键字:PIC16C711  直流电压表  汇编程序 引用地址:PIC16C711 直流电压表汇编程序

上一篇:pic16c54警报声程序
下一篇:HT1621LCD驱动 PIC单片机

推荐阅读最新更新时间:2024-03-16 15:48

STC单片机串口发送数据汇编程序
本段程序是在STC官方程序的基础上精简而成,只保留了串口单向发送,使用串口助手可以接收到数据。 本段代代码目的是为了调试的方便,单片机内部一些工作状态和数据可以通过串口发送出来,比如AD采集到的数据等,对调试程序会起到事半功倍的效果。以下为asm格式汇编代码: ; --- 使用伟福6000编译,STC15W401AS 实测通过------------ ;-----定时器2用作串口1的波特率发生器------- ;在Keil开发环境下请选择Intel的8058芯片型号进行编译 ;工作频率为11.0592MHz ;----------------------------------------- AUXR EQU 08EH
[单片机]
数字信号处理器的汇编程序优化方案的研究
  虽然目前大多数DSP都支持C语言缟程,但是在实际工程应用中,多是用C语言编写流程控制,搭建工程框架。   具体的算法模块以及比较耗时的功能模块还是采用汇编语言来编写。因为用汇编语言进行编程可以利用电路自身硬件结构的特点对其进行优化与精简,从而能够使一些复杂的算法和功能模块在实时性方面取得非常好的效果。文中从指令并行和软件流水二方面出发。以ADI公司PSl01系列电路的程序为实例,概括归纳出对DSP汇编程序进行优化的一般方法。    1 引言   数字信号处理器(DSP)相对于模拟信号处理器有很大的优越性,表现在精度高,灵活性大,可靠性好,易于大规模集成等方面。随着半导体制造工艺的发展和计算机体系结构的改进,数字信号处理器
[嵌入式]
51单片机的315M接收头接收汇编程序(从机)
;防盗器子机程序 FSDY EQU P1.7 ;发射电源端,高电平为输出 FSKZ EQU P1.6 ;发射控制端,低电平有效 FSDD EQU P1.5 ;发射控制D端,高电平控制有效 FSCC EQU P1.4 ;发射控制C端,高电平控制有效 FSBB EQU P1.3 ;发射控制B端,高电平控制有效 CGDY EQU P1.2 ;传感器电源端,高电平为输出 SPK1 EQU P1.1 ;报警喇叭,高电平为输出,暂时不用 DYAD EQU P1.0 ;电源AD输入端
[单片机]
温度传感器ds1820 的汇编程序
晶振:12M TEMPER_L EQU 36H TEMPER_H EQU 35H TEMPER_NUM EQU 60H FLAG1 BIT 00H DQ BIT P3.3 AAA:MOV SP,#70H LCALL GET_TEMPER LCALL TEMPER_COV LJMP AAA NOP ;------------------读出转换后的温度值 GET_TEMPER: SETB DQ ; 定时入口 BCD:LCALL INIT_1820 JB FLAG1,S22 LJMP BCD ; 若DS18B20不存在则返回 S22:LCALL DELAY1 MOV A,#0CCH ; 跳过ROM匹配------0CC LCALL W
[单片机]
ADC0832数码管显示电压表汇编程序
;*********************************************************** ;* * ;* 数字电压表演示程序 * ;* * ;*********************************************************** ;功能: 数码管显示ADC0832采样值 ;适用于 MCS-51 开发板 ;创作人: Jihao ;===================================================== AD_CLK EQU P1.5 AD_DAT EQU P1.6 AD_CS EQU P1.4 DISSTART EQU 30H ;显示单
[单片机]
将C程序转换成汇编程序
在keil软件中 方法:(假设当前工程中只有一个C代码文件) 第1步:新建一个工程,添加C文件,编译通过 第2步:右击Keil界面中Project Workspace里的C文件名,选择 Option for 第3步:点击 Generate Assembler SRC File Assemble SRC File 两个三态复选框使它们呈高亮并勾选,点击确定 第4步:将KEIL安装目录下C51/LIB/C51S.LIB(如果是SMALL模式)文件复制到工程目录下 第5步:添加库文件C51S.LIB文件到工程,即右击 Source Group $2,选择 Add Files to Group ,
[单片机]
PIC入门汇编程序集锦
适合3ePIC试验板,爱晶产品销售服务做的不好,好多C程序都是自己写的,不过汇编程序参考一下不错。 ;------------------------------------------------------------------------------------------ ;单双位变换显示实验参考程序注意:此程序请用单步执行(实验1-1.asm) ;------------------------------------------------------------------------------------------ STATUS EQU 03H ;特殊功能寄存器定义 TRISD EQU 88H ;特殊功
[单片机]
ARM读取DS1302汇编程序
GPACON EQU 0x56000000 GPADAT EQU 0x56000004 GPAUP EQU 0x56000008 EXPORT xmain AREA Init,CODE,READONLY ENTRY xmain ldr r0,=GPACON ldr r1, bic r1,r1,#0xff bic r1,r1,#0x1f00
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved