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

📄 myproj.asm

📁 暑假为学生培训写的51相关接口的所有源码及项目代码
💻 ASM
字号:
DAT     BIT  P3.7 ;数据通信口
WDLSB   DATA 30H ;读出的温度低字节
WDHSB   DATA 31H ;读出的温度高字节
TEMP10  DATA 32H ;十位
TEMP01  DATA 33H ;个位
TEMP00  DATA 34H ;小数点
TEMP11  DATA 35H ;十分位
TEMP21  DATA 36H ;百分位
TEMP31  DATA 37H ;千分位
TEMP41  DATA 38H ;万分位
RS      bit  P2.0
RW      bit  P2.1       
E       bit  P2.2
	ORG 0000H
        AJMP MAIN
MAIN:
	mov WDLSB,#00h
	mov WDHSB,#00h
        mov P2,#0ffh
        Call InitLCD
        mov 34H,#2Eh
        mov 31H,#02H
        mov 30H,#4Fh
Again:	  	  
        Call ReadTemp
        Call TRANS14
        mov R0,#40H
        mov R2,#7H
        mov R1,#32H
        Call WriteStrD
        AJMP Again
;取温度
ReadTemp:
        LCall RST
      
        mov A,#0cch
        LCALL SendBY
      
        mov A,#44h
        Lcall SendBY
      
        ;MOV R5,#08H                        ;延时1秒
        ;LCALL DelaySs
      
        LCall RST
      
        mov A,#0cch
        LCALL SendBY
      
        mov A,#0BEh
        Lcall SendBY
      
        Lcall ReadBY
        RET
;复位子程序        
RST: 
        SETB DAT
        NOP
        CLR DAT        ;发复位脉冲
        MOV R7,#250  ;主机持续2×250微秒
        LCALL DelayUs
        SETB DAT        ;主机释放总线,口线改为输入
        nop 
        nop
read_zt: 
        MOV C,DAT      ;接受b20发送的应答       
        JNC read_ok
        mov r7,#20              ;延时40微秒后再读一次
        LCALL DelayUs
        djnz r4,read_zt              ;最多读三次
read_ok:
        mov R7,#100
        LCALL DelayMs                     ;等待200US以后,再去做其它动作
        MOV R4,#04H
        SETB DAT
        RET
    
    
SendBY:                                                 ;大概微480微秒
	mov R3,#8
	clr C
SendBit:
	clr Dat
	MOV R7,#4
	LCALL DelayUs
	RRC  A
	mov DAT,C
	mov R7,#30              ;30*2微秒
	LCALL DelayUs
	SETB DAT
	DJNZ R3,SendBit
	ret
	
ReadBY:                                     ;大概为一毫秒
	mov R6,#2
	clr C
read_again:
        mov r3,#8
        mov WDLSB,A       
ReadBit:
	setb Dat
	Nop
	Clr Dat
	nop
	setb Dat
	mov r7,#5
	lcall DelayUs  ;延时12微秒
	mov C,Dat
	RRC A
	mov R7,#30                ;60微秒
	LCALL DelayUs
	DJNZ R3,ReadBit
	DJNZ R6,read_again
	mov WDHSB,A
	RET
 
TRANS12:
       MOV A,WDLSB
       ANL A,#0F0H
       MOV 3AH,A            ;取低字节高四位
       MOV A,WDHSB
       ANL A,#0FH          ;取高字节低四位
       ORL A,3AH            ;相或结合
       SWAP A               ;高低位交换(低字节高四位在后,高字节低四位在前.整数部分)
       MOV B,#10
       DIV AB                ;除10,分别给不同的显示。
       MOV 32H,A             ;高位存在R_8,十位数
       MOV A,B
       MOV 33H,A             ;低位存在R_9 个位数
       MOV A,WDLSB
       ANL A,#0FH          ;取低字节低四位(小数位)
       MOV B,#2            ;只要取一位小数,所以最后一位舍去;
       DIV AB
       MOV 35H,A         ;小数位是存到R_10
       RET
;数据转换
TRANS14:
        MOV A,30H
        ANL A,#0F0H
        MOV 3AH,A            ;取低字节高四位
        MOV A,31H
        ANL A,#07H          ;取高字节低三位
        ORL A,3AH            ;相或结合
        SWAP A               ;高低位交换(低字节高四位在后,高字节低四位在前.整数部分)
        MOV B,#10
        DIV AB                ;除10,分别给不同的显示。
        Add A,#30H
        mov TEMP10,A             ;高位存在R_8,十位数
        MOV A,B
        ADD A,#30H
        MOV TEMP01,A
                        ;计算小数位
        MOV A,30H
        ANL A,#0FH
        mov B,#0AH
        MUL AB
        MOV 3BH,A
        ANL A,#0F0H
        swap A
        ADD A,#30H
        
        MOV TEMP11,A         ;小数位是存到R_10
        MOV A,3BH
        ANL A,#0FH
        mov B,#0AH
        MUL AB
        MOV 3BH,A
        ANL A,#0F0H
        swap A
        ADD A,#30H
        MOV TEMP21,A         ;小数位是存到R_10
        
        MOV A,3BH
        ANL A,#0FH
        mov B,#0AH
        MUL AB
        mov 3BH,A
        ANL A,#0F0H
        swap A
        ADD A,#30H
        MOV TEMP31,A         ;小数位是存到R_10
        
        MOV A,3BH
        ANL A,#0FH
        mov B,#0AH
        MUL AB
        mov 3BH,A
        ANL A,#0F0H
        swap A
        ADD A,#30H
        MOV TEMP41,A         ;小数位是存到R_10
        RET
;初始化LCD
InitLCD:
	MOV A,#038H         
        LCALL EnterI
        LCALL LcdBUSY    ;判忙
        MOV A,#038H   ;设置为8总线16*2 5*8点阵      
        LCALL EnterI
        MOV A,#01H    ;清屏
        LCALL EnterI
        MOV A,#06H    ;设读写字符时地址加1,且整屏显示不移动
        LCALL EnterI
        MOV A,#0cH    ;开显示,开光标显示,光标和光标所在的字符闪烁
        LCALL EnterI
        LCALL Delay
	ret
;LCD判忙操作
LcdBUSY:
        PUSH  ACC
        CLR RS
        SETB RW
TT0:    
        SETB E
        MOV A,P1
        CLR E
        ANL A,#80H
        JNZ TT0
        POP   ACC
        RET
;显示表结构数据 R0位置 DPTR字符首址 R2个数
WriteStrC:
        mov R4,#00h
Write:
        mov A,R4
	movc A,@A+DPTR
	mov R3,A
	Call WriteByte
	inc R0
	inc R4
	DJNZ R2,Write
	ret
;显示内存中数据R0位置 R1源地址 R2个数
WriteStrD:
        mov A,@R1
        mov R3,A
	Call WriteByte
	inc R0
	inc R1
	DJNZ R2,WriteStrD
	ret
;R0位置 R3字符
WriteByte: ;送单个字符
        mov A,R0
        add A,#80H
        Call EnterI      
	mov A,R3
	Call EnterD
	ret 

EnterI: ;送命令
        Clr RS
        CLR RW
        SETB E
        MOV P1,A
        CLR E
        Call Delay
	RET
EnterD: ;送数据
	SETB RS
        CLR RW
        SETB E
        MOV P1,A
        CLR E
        Call Delay
	RET
		
;延时子程序固定延时	
Delay: 
	mov r7,#2H
	d1:mov r6,#255 
	d2:djnz r6,d2
	djnz r7,d1
	ret

;秒级延时子程序以130050us为单位,最大为130050us		
DelaySs:		
	mov 	r6,#0ffh
ss:	
	mov 	r7,#0ffh
	djnz 	r7,$
	djnz 	r6,ss
	djnz	r5,DelaySs
	ret
;毫秒延时子程序以510us为单位,最大为130050us		
DelayMs:		
	mov 	r7,#0ffh
	djnz 	r7,$
	djnz 	r6,DelayMs
	ret
;微秒延时以2us为单位,最大为510us
DelayUs:
	djnz r7,$           
        ret
DATE:    DB 32H,30H,30H,38H,2Dh,30H,37H,2DH,32H,39H
TIME:    DB 31H,31H,3AH,31H,31H,3AH,33H,36H,2EH
END

⌨️ 快捷键说明

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