| | 网站首页 | 技术文章 | 专业论文 | PLC可编程 | 单片机 | 变频器 | 传感器 | 嵌入式系统 | 电源技术 | 运动与伺服 | | 校园招聘 | 留言板 | |
|
![]() |
|
| 您现在的位置: 自动化学习网 >> 技术文章 >> 单片机 >> 文章正文 |
|
|||||
| 求减去最大和最小值后的值(数码显示) | |||||
作者:佚名 文章来源:本站原创 点击数: 更新时间:2007-3-23 ![]() |
|||||
|
7.33 求减去最大和最小值后的值(数码显示) 程序实例(add62.asm) ORG 0000H MAIN: ADNUMBER EQU 30H ;AD转换值 ADL EQU 32H ;// ADH EQU 33H ;ADL转换高低位值 DISL EQU 34H ;// DISH EQU 35H ;显示高低位值 ADDTOTAL EQU 36H ;第一次AD转换值 ADDJW EQU 37H ;加法进位数 ADDHOLD EQU 38H ADDFLAG EQU 39H ;加标志 ENDFLAG EQU 40H ADH1 EQU 41H ;AD中最大的值 40 ADL1 EQU 42H ;AD中最小的值 ADHOLDH EQU 43H ADHOLDL EQU 44H ;求AD最大值与最小 值时AD的比较值,即以此两个值为比较中转 FOUR EQU 45H SUB EQU 46H ;减去高低位后的值 JWHOLD EQU 47H ;保存进位值 ;赋初值/////////////////////////////////////////// MOV ADDHOLD,#00H MOV ADL,#00H MOV ADH,#00H MOV DISL,#00H MOV DISH,#00H MOV ADDJW,#00H MOV ADDFLAG,#00H MOV ENDFLAG,#00H MOV ADDTOTAL,#00H MOV ADH1,#00H MOV ADL1,#00H MOV ADHOLDH,#00H MOV FOUR,#00H MOV ADHOLDL,#00H MOV JWHOLD,#00H MOV SUB,#00H ;////////////////////////////////////////////////// MAIN1: ACALL DELAY ACALL DELAY 41 ACALL AD ;取AD值 MAIN3: ACALL CAIFEN ACALL DISPLAY ;显示 ACALL DELAY ACALL DELAY ;算最大值和最小值////////////////////////////////// ACALL ADDH ACALL ADDL ;////////////////////////////////////////////////// ;加和值显示/////////////////////////////////////// ACALL ADD1 ACALL DISPLAY ;///////////////////////////////////////////////// ;判是否加到了6次////////////////////////////////// INC ADDFLAG MOV A,ADDFLAG CJNE A,#06H,MAIN2 ;////////////////////////////////////////////////// ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL CAIFEN1 ;拆最小值 ACALL CAIFEN2 ;拆最大值 ACALL DISPLAY ;显示最大值最小值 ACALL DELAY 42 ACALL DELAY ACALL JIAN1 ;呼叫减最大值最小 值程序 ACALL CAIFEN3 ;拆分 ACALL DISPLAY ;显示减去最大值最 小值后的值 ACALL DELAY ACALL DELAY ACALL DELAY LOOP: AJMP LOOP ;判有没有来新AD值,没有显示以前,有显示现在的/// MAIN2: ACALL DELAY ACALL AD MOV A,ADNUMBER CJNE A,ADDTOTAL,MAIN3 AJMP MAIN2 ;///////////////////////////////////////////////// ;AD转换/////////////////////////////////////////// AD: MOV DPTR,#7F00H ;指向转换地址 MOV A,#03H ;指向转换口 MOVX @DPTR,A ;转换 MOV R1,#64H D1: DJNZ R1,D1 ;等100微秒转换完 MOVX A,@DPTR ;转换后的值给A MOV ADNUMBER,A ;转换的值给30H RET 43 ;////////////////////////////////////////////////// ;拆分AD值程序////////////////////////////////////// CAIFEN: MOV A,ADNUMBER ANL A,#0FH MOV ADL,A ;取低位 MOV A,ADNUMBER ANL A,#0F0H SWAP A MOV ADH,A ;取高位 MOV DISL,ADL MOV DISH,ADH ;给显示值 RET ;////////////////////////////////////////////////// ;显示////////////////////////////////////////////// DISPLAY: MOV A,DISL MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D3: JNB TI,D3 CLR TI MOV A,DISH MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D4: JNB TI,D4 CLR TI 44 MOV A,ADDJW MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D5: JNB TI,D5 CLR TI MOV A,FOUR MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV SBUF,A D6: JNB TI,D6 CLR TI RET ;///////////////////////////////////////////// ;加法程序///////////////////////////////////// ADD1: CLR C MOV ADDTOTAL,ADNUMBER MOV A,ADNUMBER ADDC A,ADDHOLD MOV ADDHOLD,A JNC ADDJW1 INC ADDJW ADDJW1: ANL A,#0FH MOV DISL,A ;加值取低位 MOV A,ADDHOLD ANL A,#0F0H 45 SWAP A MOV DISH,A ;加值取高位 RET ;///////////////////////////////////////////////// ;AD值中的最大值/////////////////////////////////// ADDH: MOV A,ADH1 CJNE A,#00H,ADDH1 MOV ADH1,ADNUMBER AJMP RE ADDH1: MOV A,ADNUMBER CLR C SUBB A,ADH1 JC RE MOV ADH1,ADNUMBER RE: RET ;////////////////////////////////////////////////// ;AD值中的最小值//////////////////////////////////// ADDL: MOV A,ADL1 CJNE A,#00H,ADDL1 MOV ADL1,ADNUMBER AJMP RE1 ADDL1: MOV A,ADNUMBER CLR C SUBB A,ADL1 JNC RE1 MOV ADL1,ADNUMBER 46 RE1: RET ;////////////////////////////////////////////////// ;分解AD最小值的个,十位//////////////////////////// CAIFEN1: MOV A,ADL1 ANL A,#0FH MOV ADL,A ;取低位 MOV A,ADL1 ANL A,#0F0H SWAP A MOV ADH,A ;取高位 MOV DISL,ADL MOV DISH,ADH ;给显示值 RET ;///////////////////////////////////////////////// ;分解AD最大值的个,十位/////////////////////////// CAIFEN2: MOV A,ADH1 ANL A,#0FH MOV ADL,A ;取低位 MOV A,ADH1 ANL A,#0F0H SWAP A MOV ADH,A ;取高位 MOV JWHOLD,ADDJW MOV ADDJW,ADL MOV FOUR,ADH ;给显示值 RET 47 ;////////////////////////////////////////////////// ;分解减去最高位和最低位的数//////////////////////// CAIFEN3: MOV A,SUB ANL A,#0FH MOV ADL,A MOV A,SUB ANL A,#0F0H SWAP A MOV ADH,A MOV DISL,ADL MOV DISH,ADH RET ;////////////////////////////////////////////////// ;减去最高位和最低位//////////////////////////////// JIAN1: MOV FOUR,#00H MOV ADDJW,JWHOLD MOV A,ADDHOLD ;取和值 CLR C SUBB A,ADH1 ;减最高位 JNC JIAN2 DEC ADDJW ;有进位,高位减一 JIAN2: CLR C SUBB A,ADL1 ;减低位 JNC TUI ;无进位出去,有进 位高位减一 48 DEC ADDJW TUI: MOV SUB,A ;取减的值给SUB RET ;////////////////////////////////////////////////// ;滤波////////////////////////////////////////////// DELAY: ;延时 MOV R3,#0AH DD1: MOV R1,#0FFH D2 : MOV R2,#0FFH DJNZ R2,$ DJNZ R1,D2 DJNZ R3,DD1 RET ;////////////////////////////////////////////////// SETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H DB 0EEH,3EH,9CH,7AH,9EH,8EH END |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 基于普通单片机的LIN协议实现… 提高单片机系统可靠性的设计… 利用单芯片MCU提高照明系统能… 基于MCU的风光互补独立电源系… 单片机控制GSM手机的技术及应… 用51内核网络单片机构成的远… 在Bank Switch基础上 实现大… 用单片机实现DSP在线调试的一… 利用Flash实现单片机系统的在… 基于AT89C52单片机的自动存取… |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 文章索引 | 网站地图 | |
| 声明:本网站资源均来源于网络,如涉及版权问题,请通知我们,我们将尽快删除! QQ:279619038 备案序号:吉ICP备06005743号 自动化学习网版权所有 站长:guxing |
|