| 网站首页 | 技术文章 | 专业论文 | 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条。评论内容只代表网友观点,与本站立场无关!)