;**************************************************************
;8位格雷碼轉(zhuǎn)換成二進(jìn)制碼
;8位格雷碼在ACC中,轉(zhuǎn)換后一字節(jié)二進(jìn)制碼仍在ACC中
;占用R7,PSW
G2B8: MOV R7,#7
RL A
GB1: JNB ACC.0,GB2
CPL ACC.7
GB2: RL A
DJNZ R7,GB1
RET
;**************************************************************
;16位格雷碼轉(zhuǎn)換成二進(jìn)制碼
;16位格雷碼高字節(jié)在R2中,低字節(jié)在R3中.轉(zhuǎn)換結(jié)果仍在R2R3中
;占用:ACC,PSW,R7
G2B16: MOV R7,#15 ;計(jì)數(shù)器賦值
MOV A,R3 ;第一次左移一位
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
MOV ACC.0,C
MOV R3,A
G2B161: JNB ACC.0,G2B162 ;移出的一位異或尚未移出的最高位,結(jié)果在尚未移出
MOV A,R2 ;的最高位
CPL ACC.7
MOV R2,A
G2B162: MOV A,R3 ;左移一位
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
MOV ACC.0,C
MOV R3,A
DJNZ R7,G2B161 ;未完成則繼續(xù)
RET
;**************************************************************
;8位二進(jìn)制數(shù)(在ACC中)轉(zhuǎn)換成格雷碼,轉(zhuǎn)換結(jié)果仍在ACC中
B2G8: MOV R7,#7
RLC A ;B1->CY
MOV ACC.0,C ;B1->ACC.0
BGLOP: JNB ACC.7,BG4
CPL C ;CY(Bi-1) XOR Bi->CY
BG4: RLC A ;CY->Gi,Bi->CY
DJNZ R7,BGLOP
RET
;**************************************************************
;16位二進(jìn)制數(shù)轉(zhuǎn)換成格雷碼
;16位二進(jìn)制碼在R2R3中(R2高字節(jié)),轉(zhuǎn)換結(jié)果仍在R2R3中
;占用:ACC,PSW,R7
B2G16: MOV R7,#15
MOV A,R2 ;B1->CY
MOV C,ACC.7
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
JNB ACC.7,BG161
CPL C ;CY(Bi-1) XOR Bi->CY
BG161: MOV A,R3
RLC A ;CY->Gi
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
JNB ACC.7,BG162
CPL C
BG162: DJNZ R7,BG161
RET
;**************************************************************
貼兩個(gè)小小的子程序,支持版主工作!
全部回復(fù)(6)
正序查看
倒序查看