51單片機(jī)的PD控溫程序
;(21)標(biāo)號: BH2 功能:雙字節(jié)BCD碼整數(shù)轉(zhuǎn)換成雙字節(jié)十六進(jìn)制整數(shù)
;入口條件:待轉(zhuǎn)換的雙字節(jié)BCD碼整數(shù)在R2、R3中。
;出口信息:轉(zhuǎn)換后的雙字節(jié)十六進(jìn)制整數(shù)仍在R2、R3中。
;影響資源:PSW、A、B、R2、R3、R4 堆棧需求: 4字節(jié)
BH2: MOV A,R3; ;將低字節(jié)轉(zhuǎn)換成十六進(jìn)制
LCALL BCDH
MOV R3,A
MOV A,R2; ;將高字節(jié)轉(zhuǎn)換成十六進(jìn)制
LCALL BCDH
MOV B,#100; ;擴(kuò)大一百倍
MUL AB
ADD A,R3; ;和低字節(jié)按十六進(jìn)制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;(20)標(biāo)號:BCDH 功能:單字節(jié)BCD碼整數(shù)轉(zhuǎn)換成單字節(jié)十六進(jìn)制整數(shù)
;入口條件:待轉(zhuǎn)換的單字節(jié)BCD碼整數(shù)在累加器A中。
;出口信息:轉(zhuǎn)換后的單字節(jié)十六進(jìn)制整數(shù)仍在累加器A中。
;影響資源:PSW、A、B、R4 堆棧需求: 2字節(jié)
BCDH: MOV B,#10H ; ;分離十位和個(gè)位
DIV AB
MOV R4,B ; ;暫存?zhèn)€位
MOV B,#10 ; ;將十位轉(zhuǎn)換成十六進(jìn)制
MUL AB
ADD A,R4 ; ;按十六進(jìn)制加上個(gè)位
RET
;(17) 標(biāo)號: HB2 功能:雙字節(jié)十六進(jìn)制整數(shù)轉(zhuǎn)換成雙字節(jié)BCD碼整數(shù)
;入口條件:待轉(zhuǎn)換的雙字節(jié)十六進(jìn)制整數(shù)在R6、R7中。
;出口信息:轉(zhuǎn)換后的三字節(jié)BCD碼整數(shù)在R3、R4、R5中。
;影響資源:PSW、A、R2~R7 堆棧需求: 2字節(jié)
HB2: CLR A ; ;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ; ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)
HB3: MOV A,R7 ; ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ; ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2
ADDC A,R5
DA A ; ;十進(jìn)制調(diào)整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ; ;雙字節(jié)十六進(jìn)制數(shù)的萬位數(shù)不超過6,不用調(diào)整
DJNZ R2,HB3 ; ;處理完16bit
RET
;(5) 標(biāo)號: MULD 功能:雙字節(jié)二進(jìn)制無符號數(shù)乘法
;
;入口條件:被乘數(shù)在R2、R3中,乘數(shù)在R6、R7中。
;出口信息:乘積在R2、R3、R4、R5中。
;影響資源:PSW、A、B、R2~R7 堆棧需求: 2字節(jié)
MULD: MOV A,R3 ; ;計(jì)算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ; ;暫存部分積
MOV R5,A
MOV A,R3 ; ;計(jì)算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ; ;累加部分積
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ; ;計(jì)算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ; ;累加部分積
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ; ;計(jì)算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ; ;累加部分積
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
評論