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

📄 ad74162.asm

📁 单片机C语言教程
💻 ASM
字号:
;****************************************************************
;/* 这是AD7416的汇编程序,  文件名AD74162.ASM                    */
;/* 功能:本程序主要是读出温度传感器AD7416芯片的温度值,并把它  */
;/*    放在变量ADCH,ADCL中,ADCH中放高8位。注意,这两个8 位共   */
;/*    16位中,只有高1O位有效。测温范围是-55℃~125℃。          */
;/*    本程序适合AD7416 和51系列单片机的连接,晶振为12MHZ左右。  */
;******************************************************************
	ADCH 	EQU 	32H 	;采样值高字节
	ADCL 	EQU 	31H 	;采样值低字节
	ADCNUM 	EQU 	30H 	;采样次数
        DATA1 	EQU 	33H 	;中间变量
	ADSCL 	BIT 	P1.1 	;AD7416时钟
	ADSDA 	BIT 	P1.0	;AD7416数据I/O

         ORG   0000H
MAIN:    LCALL SAMPLE74
         SJMP $
SAMPLE74:MOV 	ADCNUM, #8 ;连续采样8次
SE074:	 MOV 	R6, #90H;  ;片选AD7416的地址写操作
	 MOV 	R5, #1     ;选中配置寄存器
	 MOV 	R4, #18H   ;给配置寄存器赋值
	 LCALL 	WRCOM      ;三字节的写操作
	 MOV 	R6,#90H    ;#10011110B
	 MOV 	R5,#3      ;选中温度上限寄存器
	 MOV 	R4,#40H    ;上限温度=64
	 LCALL 	WRCOM
 	 MOV 	R6,#90H    ;#10010000B
   	 MOV 	R5,#2      ;选中温度下限寄存器
 	 MOV 	R4,#20H    ;上限温度=32
	 LCALL 	WRCOM
	 MOV 	R6,#90H    ;#10011110B
	 MOV 	R5,#0      ;选中温度寄存器
	 LCALL 	WREXE      ;两字节的写操作
	 MOV 	DATA1,#91H;#10010001B ,片选AD7416,读操作
	 LCALL 	RDCOM
	 DJNZ 	ADCNUM,SE074 ;采样未完,返回
         RET
WRCOM:  LCALL 	BEGIN ;三字节的写操作
        MOV 	DATA1,R6
	LCALL 	OUTBYTE ;输出字节
	MOV 	DATA1,R5
	LCALL 	OUTBYTE
	MOV 	DATA1,R4
	LCALL 	OUTBYTE
	LCALL 	STOP
	RET
WREXE: 	LCALL 	BEGIN ;两字节的写操作
	MOV 	DATA1,R6
	LCALL 	OUTBYTE
	MOV 	DATA1,R5
	LCALL 	OUTBYTE
	LCALL 	STOP
	RET
RDCOM: 	LCALL 	BEGIN ;读操作
	LCALL 	OUTBYTE
	LCALL 	INBYTE ;输入字节
	MOV 	ADCH,DATA1
	LCALL 	NACK ;MCU使ADSDA数据线变为低电平
	LCALL 	INBYTE
	MOV 	ADCL,DATA1
	LCALL 	ACK ;MCU使ADSDA数据线变为高电平
	LCALL 	STOP
	RET
OUTBYTE: 	MOV 	R7,#8 ;输出字节
OE1: 	MOV 	A,DATA1
	RLC A
	MOV 	ADSDA,C
	MOV 	DATA1,A
	LCALL 	CLOCK
	DJNZ 	R7,OE1
	LCALL 	ACK ;AD7416产生应答
	RET
INBYTE: 	SETB 	ADSDA ;输入字节
	MOV 	R7,#8
INE1: 	LCALL 	CLOCK
	MOV 	A,DATA1
	RLC A
	MOV 	DATA1,A
	DJNZ 	R7,INE1
	RET
NACK: 	CLR 	ADSDA ;AD7416无应答
	LCALL 	CLOCK ;ADSDA数据线为0,一个时钟脉冲之后,ADSDA为1
	RET
ACK: 	SETB 	ADSDA ;AD7416有应答
	LCALL 	CLOCK ;ADSDA为1,一个时钟脉冲之后,ADSDA为0
	RET
STOP: 	CLR 	ADSDA ;产生停止信号
	SETB 	ADSCL
	NOP
	NOP
	NOP
	NOP
	SETB 	ADSDA
	RET
BEGIN: 	SETB 	ADSDA ;产生开始信号
	SETB 	ADSCL
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR 	ADSDA
	NOP
	NOP
	NOP
	NOP
	CLR 	ADSCL
	RET
CLOCK: 	NOP 	      ;产生时钟脉冲
	SETB 	ADSCL
	NOP
	NOP
	NOP
	NOP
	MOV 	C,ADSDA
	CLR 	ADSCL
	RET
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -