📄 sm1110.asm
字号:
;/* 这是MAX111的汇编程序, 文件名为MAX1110.ASM */
;/* 功能:本程序主要是读出芯片MAX111输入通道CH0和CH1的模数转换值, */
;/* 转换值放在内存单元30H和31H中,30H放高位以及32H和33H中,32H放高位。*/
;/* MAX111芯片的2个通道 可编程为单极性/双极性和差动/单端工作, 这 */
;/* 里采用单端\单极性输入。MAX111有内部时钟和外部时钟两种工作模式。 */
;/* 这里采用内部时钟模式。 */
;/* 控制字中CONV4、CONV3、CONV2、CONV1取0110B,表示转换分辨率为14位; */
;/* 控制字中DV2,DV4取01B,表示对计数脉冲发生器发出的脉冲作二分频。 */
;/* 因采用+1.5V的参考电压,故两个通道的电压输入范围都是0~1.5V。 */
CS BIT P1.0
DOUT BIT P1.3
DIN BIT P1.2
SCK BIT P1.1
BUSY BIT P1.7
count EQU 20H
ctrlh EQU 21H
ctrll EQU 22H
byteinh EQU 23H
byteinl EQU 24H
ORG 0000H
MOV SP,#60H
LCALL DELAY
CLR EA
LJMP AAA
MOV ctrlh,#8DH ;零偏校准
MOV ctrll,#0CH
LCALL M111
LCALL DELAY
MOV ctrlh,#8DH ;增益校准
MOV ctrll,#08H
LCALL M111
LCALL DELAY
MOV ctrlh,#8DH ;通道调零校准
MOV ctrll,#04H
LCALL M111
LCALL DELAY ;以上三步校准程序在上电时或需要校准时调用一次即可
AAA: MOV byteinh,#00H
MOV byteinl,#00H
MOV ctrlh,#8DH ;送第1输入通道CH0的控制字,但把转换值舍去
MOV ctrll,#00H
LCALL M111
MOV ctrlh,#8DH ;送第2输入通道CH1的控制字,读第1通道CH0转换值
MOV ctrll,#10H
LCALL M111
;JC,SSS
MOV 30H,byteinh
MOV 31H,byteinl
LCALL DELAY
MOV ctrlh,#8DH ; 送下一输入通道CH0的控制字,读第2通道CH1转换值
MOV ctrll,#00H
LCALL M111
;jc,W1
MOV 32H,byteinh
MOV 33H,byteinl
LCALL DELAY
QQQ: LJMP QQQ
W1:
M111: SETB BUSY ; 送通道控制字及读出转换值子程序
SETB DOUT
JNB ctrlh.7,WAIBUSY
MOV R3, #0CH ;等待BUSY信号为高电平
DLP3: MOV R2, #0FFH
DLP2: MOV R1, #0FFH
DLP1: JB BUSY,WAIBUSY
DJNZ R1, DLP1
DJNZ R2, DLP2
DJNZ R3, DLP3
SJMP TIMEOUT ;超时转
WAIBUSY: CLR SCK
CLR CS
MOV COUNT,#08H ;处理高8位
LOOP1: NOP
MOV C,ctrlh.7
MOV DIN,C
SETB SCK
MOV C,DOUT
MOV byteinh.7,C
CLR SCK
MOV A,ctrlh
RL A
MOV ctrlh,A
MOV A,byteinh
RL A
MOV byteinh,A
DJNZ COUNT,LOOP1
MOV COUNT,#08H ;处理低8位
LOOP2: NOP
MOV C,ctrll.7
MOV DIN,C
SETB SCK
MOV C,DOUT
MOV byteinl.7,C
CLR SCK
MOV A,ctrll
RL A
MOV ctrll,A
MOV A,byteinl
RL A
MOV byteinl,A
DJNZ COUNT,LOOP2
SETB CS
CLR C
RET
TIMEOUT: SETB CS ;超时置进位位
SETB C
RET
Delay: NOP ;延时程序
MOV R2, #1
MOV R1, #0
MOV R0, #0
DLP: NOP
DJNZ R0, DLP
DJNZ R1, DLP
DJNZ R2, DLP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -