📄 ad7416a.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 + -