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

📄 wlm74uart0.asm

📁 采用UART方式0与LM74通信。 用C8051f020的P0.7作片选
💻 ASM
字号:
;参考程序; WLM74UART0.ASM      程序功能: 采用UART方式0与LM74通信。
;用P0.7作片选,主机通过TXD发送时钟信号,实现同步通信,半双工.RXD
;作双向数据线.用六位数码管显示LM74采集的温度值:029.5C
$include (c8051f020.inc)                    // SFR declarations
 PPA 	          EQU 	8000H  ;8255的端口地址,8255驱动数码管显示温度值
 PPB 	          EQU 	8001H    ;8255驱动数码管显示LM74测量出的温度值
 PPC 	          EQU 	8002H     ;LM74是高精度数字式温度传感器
 CWR             EQU   8003H
ORG		0
CS    EQU   P0.7
MAIN:   MOV		WDTCN,#0DEH   	;关看门狗
    	MOV		WDTCN,#0ADH
	    LCALL	PORT_Init	  	;初始化I/O口
        ACALL   INIT74       ;初始化LM74
TES:    ACALL   READLM74     ;从LM74中读出当前温度值,并加以整理
	    LCALL  DISPLED        ;成为LED数码管可显示的格式
	    AJMP   TES
INIT74 : CLR      CS
         MOV      A,#0h   ;CONTINUE MODE
         ACALL    WR_16BIT 
         SETB     CS
         RET
 READLM74:  CLR     CS
         ACALL    IN_16BIT ;READ   TEMPERATURE
         SETB    CS
         MOV  A,43H     ; 2x(41h)+2x(42h)
         RLC  A
         MOV  A,42H
         RL   A
         ADDC A,#0
         ACALL   EXCH
         MOV  7DH,#0    ;     
         MOV  A,43H
         ANL  A,#40H
         CJNE A,#40H,PP1     ;加上小数点.
         MOV  7DH,#5H
 PP1:    MOV  7EH,#0CH
	     MOV  79H,#0
	     MOV   A,42H        ;从42H最高位位符号判别位,
	     ANL   A,#80H
		 CJNE  A,#80H,PP2   ; 正号:79H<--#0
		 MOV   79H,#40H     ;负号: 79H<--#40H ("-")
  PP2:   RET 
 WR_8BIT:MOV    SBUF0,A
          JNB   TI,$
          CLR   TI
          RET
 IN_8BIT: SETB   REN
          JNB    RI,$
          CLR    REN
          CLR    RI
          MOV    A,SBUF0
          RET
  IN_16BIT:SETB   REN    ;读出的原始数据在40H,41H中。
           JNB    RI,$
           CLR    REN    
           CLR    RI
           MOV    A,SBUF0
           MOV    40h,A
           SETB   REN
           JNB    RI,$
           CLR    REN
           CLR    RI
           MOV    A,SBUF0
           MOV    41H,A
           ACALL  EXCHG0   ;初步整理(倒置)后的数据存放在42H,43H中。
           MOV    43H,A
           MOV    B,A
           MOV    A,40H
           ACALL  EXCHG0
           MOV    42H,A  
           RET
  EXCHG0:   RRC  A     ;因从LM74读出数据的顺序为:D15,D14。。。D0,故应倒置。
            MOV  7H,C
            RRC  A
            MOV 6H,C
            RRC  A
            MOV  5H,C
            RRC  A
            MOV 4H,C
            RRC  A
            MOV  3H,C
            RRC  A
            MOV 2H,C
            RRC  A
            MOV  1H,C
            RRC  A
            MOV 0H,C
            MOV  A,20H
            RET
  WR_16BIT: MOV    SBUF0,A    ;CPU写入16位数据到LM74
            JNB   TI,$
            CLR   TI
            MOV    SBUF0,#0h
            JNB   TI,$
            CLR   TI
            RET            
EXCH  : MOV     B,#10    ;化为四位十进制数
        DIV     AB
        MOV     7CH,B  ;   7AH存百位数
        MOV     B,#10
        DIV     AB
        MOV     7AH,A  ;   7BH存十位数
        MOV     A,B
        MOV     7BH,A 
        MOV     A,7CH   ;   7CH存个位数
        MOV     7CH,A
        RET 
DEL0:MOV R6,#0FH
TM:  MOV R7,#0FFH
     DJNZ R7,$
     DJNZ R6,TM
     RET
;长延时子程序
DELY:MOV R5,#0FFH
TTM1: ACALL DEL0
      DJNZ R5,TTM1
      RET
DELYL:MOV R5,#0FFH
TTM2:CALL DEL0
     DJNZ R5,TTM2
     RET  
;TEMP: DB 54H,45H,4DH,50H,3AH,20H        
PORT_Init: ;初始化I/O口
	MOV		XBR0,#04H					;交叉开关使能TXD,RXD
	MOV		XBR2,#40H					;使能交叉开关和弱上拉
  MOV   P0MDOUT ,#01    ;选择P0.0为推拉方式,P0.1为漏极开路
	MOV   0E3H,#40H       ; 使能交叉开关,弱上拉
  MOV   P74OUT,#3FH       ;设置P7为漏极开路P4,P5,P6为推拉模式.
  MOV   EMI0CF,#2CH         ;EMIF工作在地址/数据复用方式,只用外部存储器,
; ALE高/低脉宽占1个SYSCLK周期(EMIOCF)
    MOV   EMI0TC,#6DH        ;地址建立/保持时间占1个SYSCLK周期,/WR和/RD占12个SYSCLK周期(EMIOTC)
    MOV   SCON0,#0           ;设定串口方式0(UART为同步移位方式 )   
	RET   
	;显示功能子程序:被显示的数据在79H,7AH,7BH,7CH,7DH,7EH中
DISPLED:  ACALL   C8255    ;格式样品:     +/-029.5C
          MOV	R2,#01H
	      MOV	R5,#6
	      MOV	R0,#79H
DSP1:	  MOV	DPTR,#PPB
	      MOV	A,R2
	      MOVX	@DPTR,A
	      MOV	A,@R0
          ANL  A,#0FH
DSP2:	  MOV	DPTR,#BCD
     	  MOVC	A,@A+DPTR
          MOV   B,A
          MOV	DPTR,#PPC
          MOV   A,R5
          CJNE A,#3,SS0
          MOV  A,B
          ADD   A,#80H
          AJMP   SS1
 SS0:     MOV   A,B
 SS1:     MOVX	@DPTR,A
	      ACALL   DEL0
	      MOV	A,R2
    	  RL	A
	      MOV	R2,A
	     INC	R0
	     DJNZ	R5,DSP1
	     RET
BCD:    DB      3FH,06H,5BH,4FH ;显示数值,0,1,2,3
        DB      66H,6DH,7DH,07H           ;4,5,6,7
	    DB 	7FH,6FH,77H,7CH           ;8,9,A,B
	    DB 	39H,5EH,79H,71H           ;C,D,E,F
	    DB 	73H,3EH,31H,6EH           ;P,U,Z,Y
	    DB      0FFH,00H                  ;8,灭     
C8255:	MOV	A,#80H      ; 设置PC口,PB口为输出,PA口为输入
	    MOV 	DPTR,#CWR       ;#8003H为8255的控制寄存器地址
	    MOVX	@DPTR,A
	    RET
	    END

⌨️ 快捷键说明

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