?? ad7416a.asm
字號(hào):
;/* 這是被CALL7416.C調(diào)用的AD7416匯編程序,文件名為AD7416A.ASM */
;/* 功能:本程序作用是讀出數(shù)字溫度傳感器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 ;采樣值高字節(jié)
ADCL EQU 31H ;采樣值低字節(jié)
ADCNUM EQU 30H ;采樣次數(shù)
DATA1 EQU 33H ;
ADSCL BIT P1.1 ;AD7416時(shí)鐘
ADSDA BIT P1.0 ;AD7416數(shù)據(jù)I/O
MOV data_addr,R7 ;R7中放傳遞進(jìn)來(lái)的字符型參數(shù)
SAMPLE74:MOV ADCNUM, #8 ;連續(xù)采樣8次
SE074: MOV A,data_addr
MOV R6, A ;片選AD7416的地址寫操作
MOV R5, #1 ;選中配置寄存器
MOV R4, #18H ;給配置寄存器賦值
LCALL WRCOM ;三字節(jié)的寫操作
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 ;兩字節(jié)的寫操作
MOV A,data_addr
INC A
MOV DATA1,A ;片選AD7416,讀操作
LCALL RDCOM
DJNZ ADCNUM,SE074 ;采樣未完,返回
MOV A,ADCL
MOV R7,A ;R7中放返回轉(zhuǎn)換值低8位
MOV A,ADCH
MOV R6,A ;R6中放返回轉(zhuǎn)換值高8位。
RET
WRCOM: LCALL BEGIN ;三字節(jié)的寫操作
MOV DATA1,R6
LCALL OUTBYTE ;輸出字節(jié)
MOV DATA1,R5
LCALL OUTBYTE
MOV DATA1,R4
LCALL OUTBYTE
LCALL STOP
RET
WREXE: LCALL BEGIN ;兩字節(jié)的寫操作
MOV DATA1,R6
LCALL OUTBYTE
MOV DATA1,R5
LCALL OUTBYTE
LCALL STOP
RET
RDCOM: LCALL BEGIN ;讀操作
LCALL OUTBYTE
LCALL INBYTE ;輸入字節(jié)
MOV ADCH,DATA1
LCALL NACK ;MCU使ADSDA數(shù)據(jù)線變?yōu)榈碗娖? LCALL INBYTE
MOV ADCL,DATA1
LCALL ACK ;MCU使ADSDA數(shù)據(jù)線變?yōu)楦唠娖? LCALL STOP
RET
OUTBYTE:MOV R7,#8 ;輸出字節(jié)
OE1: MOV A,DATA1
RLC A
MOV ADSDA,C
MOV DATA1,A
LCALL CLOCK
DJNZ R7,OE1
LCALL ACK ;AD7416產(chǎn)生應(yīng)答
RET
INBYTE: SETB ADSDA ;輸入字節(jié)
MOV R7,#8
INE1: LCALL CLOCK
MOV A,DATA1
RLC A
MOV DATA1,A
DJNZ R7,INE1
RET
NACK: CLR ADSDA ;AD7416無(wú)應(yīng)答
LCALL CLOCK ;ADSDA數(shù)據(jù)線為0,一個(gè)時(shí)鐘脈沖之后,ADSDA為1
RET
ACK: SETB ADSDA ;AD7416有應(yīng)答
LCALL CLOCK ;ADSDA為1,一個(gè)時(shí)鐘脈沖之后,ADSDA為0
RET
STOP: CLR ADSDA ;產(chǎn)生停止信號(hào)
SETB ADSCL
NOP
NOP
NOP
NOP
SETB ADSDA
RET
BEGIN: SETB ADSDA ;產(chǎn)生開始信號(hào)
SETB ADSCL
NOP
NOP
NOP
NOP
NOP
CLR ADSDA
NOP
NOP
NOP
NOP
CLR ADSCL
RET
CLOCK: NOP ;產(chǎn)生時(shí)鐘脈沖
SETB ADSCL
NOP
NOP
NOP
NOP
MOV C,ADSDA
CLR ADSCL
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -