📄 ds1620b.asm
字号:
;****************************************************************
;/* 这是被CALL20B.C调用的DS1620汇编语言程序,文件名为DS1620B.ASM */
;/* 功能:本程序主要是读出DS1620芯片转换后的温度值,并把它放在 */
;/* 寄存器R1,R2中,R2中放高8位。注意,这两个8 位共16位中,只 */
;/* 有低9位有效。这里测温范围是-55℃~125℃。 */
;/* 本程序是被调用的汇编语言程序,由外部传递进来的参数在R7中,*/
;/* 是字符型的,在程序中未用;返回的参数是整形的,放在寄存器 */
;/* R6,R7中,R6中放高8位。 */
;******************************************************************
DQ BIT P1.0
CLK BIT P1.1
RST BIT P1.2
NAME DS1620
?PR?_a_func?DS1620 SEGMENT CODE
?DT?_a_func?DS1620 SEGMENT DATA OVERLAYABLE
?DT?DS1620 SEGMENT DATA
PUBLIC chai
PUBLIC ?_a_func?BYTE
PUBLIC _a_func
RSEG ?DT?_a_func?DS1620
?_a_func?BYTE:
aa:DS 1
RSEG ?DT?DS1620
chai:DS 2
RSEG ?PR?_a_func?DS1620
_a_func:
MOV aa,R7 ;R7中放传递进来的字符型参数
LCALL CONFIGURE ;写DS1620配置寄存器设定值
LCALL STARTCONVERT ;使DS1620 开始转换温度
LCALL READTEMPERATURE ;读出转换后的温度值
MOV A,R1
MOV R7,A
MOV A,R2
MOV R6,A ;R6,R7中放返回温度值,R6中放高位
RET
WRITE1620: ; 写DS1620
MOV R0,#08H ; 每次写入8B
ITWRITE:
CLR CLK ; 时钟脉冲置零
RRC A ; 右移A , 使最低位移入进位位C 中
MOV DQ ,C ; 输出1B (即C) 到DQ
SETB CLK ; 产生时钟脉冲的上升沿
DJNZ R0,ITWRITE
RET
READ1620: ; 读DS1620
MOV R0, #08H ; 每次读出8B
SETB DQ ; 置DQ为1, 使其做为输入端
ITREAD:
CLR CLK ; 时钟脉冲置零
MOV C,DQ ; 将DQ 来的1 B 移入C
SETB CLK ; 产生时钟脉冲的上升沿
RRC A ; 右移A ,使进位C 移入A 中的最高位
DJNZ R0,ITREAD
CLR DQ
RET
CONFIGURE: ; DS1620写配置,入回参数为配置寄存器新配置内容
SETB RST ; 使DS1620的RST为高电平, 开始发送
MOV A , #0CH ; 发送“写”命令给DS1620
ACALL WRITE1620
;MOV A,R7
MOV A , #00001010B ; 使工作方式寄存器中CUP=1,1SHOT=0,THF= 0, TLF= 0
ACALL WRITE1620
CLR RST ; 结束发送
RET
STARTCONVERT: ; 使DS1620 开始转换温度
SETB RST ; 使DS1620 的RST 为高电平, 开始发送命令
MOV A,#0EEH ; 发送“开始转换”命令给DS1620
ACALL WRITE1620
CLR RST ; 结束发送
RET
READTEMPERATURE: ; 读取温度值
SETB RST
MOV A,#0AAH ; 发送“读温度”命令给DS1620
ACALL WRITE1620
ACALL READ1620 ; 读取第1 字节
MOV R1,A ; 首字节送R1
ACALL READ1620 ; 读取第2 字节
MOV R2,A ; 第2字节送R2
CLR RST
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -