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

📄 ad7416a.asm

📁 单片机C语言教程
💻 ASM
字号:
;/* 这是被CALL7416.C调用的AD7416汇编程序,文件名为AD7416A.ASM     */
;/* 功能:本程序作用是读出数字温度传感器AD7416芯片的温度值。      */

   NAME AD7416A
   ?PR?_a_func?AD7416A     SEGMENT CODE
   ?DT?_a_func?AD7416A     SEGMENT DATA OVERLAYABLE
   ?DT?AD7416A             SEGMENT DATA

   PUBLIC   chai
   PUBLIC   ?_a_func?BYTE
   PUBLIC    _a_func
   RSEG  ?DT?_a_func?AD7416A
	 ?_a_func?BYTE:
	 data_addr:DS 1
   RSEG  ?DT?AD7416A
	 chai:     DS 2
   RSEG  ?PR?_a_func?AD7416A
	 _a_func:

ADCH 	EQU 	32H 	;采样值高字节
ADCL 	EQU 	31H 	;采样值低字节
ADCNUM 	EQU 	30H 	;采样次数
DATA1 	EQU 	33H 	;
ADSCL 	BIT 	P1.1 	;AD7416时钟
ADSDA 	BIT 	P1.0	;AD7416数据I/O

         MOV data_addr,R7    ;R7中放传递进来的字符型参数
SAMPLE74:MOV 	ADCNUM, #8   ;连续采样8次
SE074:   MOV A,data_addr
         MOV 	R6, A        ;片选AD7416的地址写操作
	 MOV 	R5, #1       ;选中配置寄存器
	 MOV 	R4, #18H     ;给配置寄存器赋值
	 LCALL 	WRCOM        ;三字节的写操作
         MOV A,data_addr
         MOV 	R6, A        ;片选AD7416的地址写操作
	 MOV 	R5,#3        ;选中温度上限寄存器
	 MOV 	R4,#40H      ;上限温度=64
	 LCALL 	WRCOM
         MOV A,data_addr
         MOV 	R6, A        ;片选AD7416的地址写操作 	
   	 MOV 	R5,#2        ;选中温度下限寄存器
 	 MOV 	R4,#20H      ;上限温度=32
	 LCALL 	WRCOM
	 MOV A,data_addr
         MOV 	R6, A        ;片选AD7416的地址写操作
	 MOV 	R5,#0        ;选中温度寄存器
	 LCALL 	WREXE        ;两字节的写操作
         MOV A,data_addr
         INC A
         MOV 	DATA1,A      ;片选AD7416,读操作
	 LCALL 	RDCOM
	 DJNZ 	ADCNUM,SE074 ;采样未完,返回
         MOV A,ADCL
         MOV R7,A            ;R7中放返回转换值低8位
         MOV A,ADCH
         MOV R6,A            ;R6中放返回转换值高8位。
         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 + -