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

📄 tempsend0531.asm

📁 PTR2000(短距离无线测试)的温度测试程序
💻 ASM
字号:
     		ORG  0000H
     		LJMP MAIN

     		ORG   0200H
MAIN:   CLR P1.0
        MOV TMOD,#20H
        MOV SCON,#40H
        MOV PCON,#00H
        MOV TL1,#0FAH
        MOV TH1,#0FAH
        SETB TR1
      	CLR  P1.1
				CLR A
     		LCALL GET_TEMP
      	CPL P1.1
      	LCALL T11
      	LCALL START
      	LJMP MAIN

START:  MOV R1,#LEN3;	发送10个55h,同步字
TX0:    MOV A,#55H
        MOV SBUF,A
        JNB TI,$
        CLR TI
        DJNZ R1,TX0
        
TX1:		MOV R5,#00H;	校验和
				MOV A,#0FFH;	发送FFh后紧跟00h不易出错,作为起始标志
        MOV SBUF,A
        JNB TI,$
        CLR TI
        ADD A,R5; 累加发送数据
        MOV R5,A;	存储校验和
        MOV A,#0FFH
        MOV SBUF,A
        JNB TI,$
        CLR TI
        ADD A,R5; 累加发送数据
        MOV R5,A;	存储校验和
        MOV A,#00H
        MOV SBUF,A
        JNB TI,$
        CLR TI
        ADD A,R5; 累加发送数据
        MOV R5,A;	存储校验和

TX3:    CLR A;	发送温度数据
        MOV A,R3;	发送温度低字节
        MOV SBUF,A
        JNB TI,$
        CLR TI
        ADD A,R5; 累加发送数据
        MOV R5,A;	存储校验和
				MOV A,R4;	发送温度低字节
        MOV SBUF,A
        JNB TI,$
        CLR TI
        ADD A,R5; 累加发送数据
        MOV R5,A;	存储校验和
        MOV A,R5;	发送校验和
        MOV SBUF,A
        JNB TI,$
        CLR TI
        CPL P1.1

TX4:		MOV A,#7FH; 发送7Fh,结束标志
        MOV SBUF,A
        JNB TI,$
        CLR TI
        RET

t11:    MOV  R0,#0FFH
time3:  MOV  R1,#0FFH
TIME1:  MOV  R2,#0Fh
time2:  DJNZ R2,time2
        DJNZ R1,TIME1
        DJNZ R0,TIME3
        RET

GET_TEMP:
        CLR EA ; 使用ds1820一定要禁止任何中断产生
        LCALL INT ; 调用初使化子程序
        MOV A,#0CCH
        LCALL WRITE ; 送入跳过ROM命令
        MOV A, #44H
        LCALL WRITE ; 送入温度转换命令
        LCALL INT ; 温度转换完全,再次初使化ds1820
        MOV A,#0CCH
        LCALL WRITE ; 送入跳过ROM命令
        MOV A,#0BEH
        LCALL WRITE ; 送入读温度暂存器命令
        LCALL READ
        MOV R3,A ; 读出温度值低字节存入R3
        LCALL READ
        MOV R4,A ;读出谩度值高字节存入R4
        RET

INT: 		CLR EA ; 初始化ds1820子程序
L0:			CLR P1.7 ; ds1820总线为低复位电平
    		MOV R2,#200
L1:			CLR P1.7
    		DJNZ R2,L1 ;总线复位电平保持400us
   			SETB P1.7 ; 释放ds1820总线
   			MOV R2,#30
L4:			DJNZ R2,L4 ;  释放ds1820总线保持60us
   			CLR C ;清存在信号
   			ORL C,P1.7
   			JC L0 ; 存在吗?不存在则重新来
   			MOV R6,#80
L5:			ORL C,P1.7
   			JC L3
   			DJNZ R6,L5
   			SJMP L0
L3:			MOV R2,#240
L2:			DJNZ R2,L2
   			RET

WRITE: 	CLR EA;向ds1820写操作命令子程序
       	MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit
WR1:		SETB P1.7
    		MOV R4,#8
    		RRC A ;  把一个字节data(A)分成8个bit环移给C
    		CLR P1.7 ; 开始写入ds1820总线要处于复位(低)状态
WR2:		DJNZ R4,WR2 ;  ds1820总线复位保持16us
   			MOV P1.7,C ;写入一个bit
   			MOV R4,#20
WR3:		DJNZ R4,WR3 ;等待40us
    		DJNZ R3,WR1 ;写入下一个bit
    		SETB P1.7 ;重新释放ds1820总线
    		RET

READ:		CLR EA
    		MOV R6,#8 ;连续读8个bit
RE1:		CLR P1.7 ;读前总线保持为低
    		MOV R4,#4
    		NOP
    		SETB P1.7 ;开始读总线释放
RE2:		DJNZ R4,RE2 ;持续8us
    		MOV C,P1.7 ;从ds1820总线读得一个bit
    		RRC A ;把读得的位值环移给A
    		MOV R5,#30
RE3:		DJNZ R5,RE3 ;持续60us
    		DJNZ R6,RE1 ;读下一个bit
    		SETB P1.7 ;重新释放ds1820总线
    		RET

        ORG 0500H
DATA1:  DB 'Hello! I am from SUDA.'
DATA2:  DB 'This is a test program.'
        LEN1 DATA 22
        LEN2 DATA 23
        LEN3 DATA 10

				END



⌨️ 快捷键说明

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