⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sm1110.asm

📁 单片机C语言教程
💻 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 + -