📄 sm111b.asm
字号:
;/* 这是被CALL111.C调用的MAX111汇编程序,文件名为MAX111B.ASM */
;/* 功能:本程序主要是读出芯片MAX111输入通道CH0和CH1的模数转换值, */
;/* 转换值放在寄存器R6,R7中,R6放高位。MAX111芯片的2个通道 */
;/* 可编程为单极性/双极性和差动/单端工作, 这里采用单端\单极性 */
;/* 输入。MAX111有内部时钟和外部时钟两种工作模式。这里采用内 */
;/* 部时钟模式 */
NAME MAX111B
?PR?_a_func?MAX111B SEGMENT CODE
?DT?_a_func?MAX111B SEGMENT DATA OVERLAYABLE
?DT?MAX111B SEGMENT DATA
PUBLIC chai
PUBLIC ?_a_func?BYTE
PUBLIC _a_func
RSEG ?DT?_a_func?MAX111B
?_a_func?BYTE:
aa:DS 2
RSEG ?DT?MAX111B
chai:DS 2
RSEG ?PR?_a_func?MAX111B
_a_func:
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
MOV aa,R7 ;在入口:R6,R7中放传递进来的一个整型数
MOV aa+1,R6
MOV ctrlh,R6
MOV ctrll,R7
LCALL M111
MOV R6,byteinh ;在出口,R6和R7中放返回整型值
MOV R7,byteinl
RET
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 + -