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

📄 lm92saa1064.#1

📁 C8051F.rar
💻 #1
📖 第 1 页 / 共 2 页
字号:
			SETB    STA
             JMP    SMB_ISR_END
;SMB_MRDBACK                    (SMB0STA  =50H)
;(MR)主收发器接收数据成功;主机发送ACK .
  ORG    SMB_STATE_TABLE+SMB_MRDBACK       
	MOV    RECEIVE_BYTEH, SMB0DAT
	CLR    AA ;主机发NACK(清除AA),下一次中断来时转入;SMB_MRDBNACK(58H)
	CLR    SM_BUSY;
  JMP     SMB_ISR_END
;SMB_MRDBNACK                  ;(SMB0STA  =58H)
;(MR)主收发器接收数据成功;主机发送NACK 
;读操作完成。读数据寄存器并发送STOP
      ORG     SMB_STATE_TABLE+SMB_MRDBNACK     
      MOV    RECEIVE_BYTEL, SMB0DAT
      SETB    STO
		  SETB    AA       ;主机发ACK,为下一次传输置位AA
      CLR    SM_BUSY;
      JMP    SMB_ISR_END
;状态表结束,处理"SMB_MTDBACK"状态码的程序段。
;对于地址字节刚发出的状态。通过检查RW位确定处理方法。
;如果为读,则转到RW_READ,如果为写,则将待发送数据装入SMBODAT。
    ADDRESS_SENT:
    JB     RW,RW_READ
    MOV    SMB0DAT,TRANSMIT_BYTE   ;装入数据
    JMP    SMB_ISR_END              ;中断返回
;对于地址字节刚发出的状态。重复发送START,启动存储器读操作
    RW_READ:
    SETB      STA                    ;重复发送START
    JMP      SMB_ISR_END            ;中断返回
;这是一个写操作,数据字节已发出。传输过程结束。发送STOP,释放总线,中断返回
    DATA_SENT:
    SETB    STO                     ;发送STOP后中断返回
    CLR     SM_BUSY                ; 释放 SMBus
    JMP     SMB_ISR_END            ; 中断返回
;SMBus ISR exit
;恢复现场,清除SI位,从中断返回
   SMB_ISR_END:
    CLR    SI
    POP    DPL 
    POP    DPH
    POP    ACC
    POP    PSW
    RETI
PORT_Init :
   ORL    OSCICN,#01H        ; 将内部振荡器频率设置为4MHz
   MOV    P0MDOUT,#00          ;P0口为开漏方式
   MOV    XBR0,#01H  ;通过功能选择开关将将SDA接P0.0引脚,SCL接P0.1引脚
   MOV   XBR2 ,#40H;      允许功能选择开关和弱上拉
   MOV   P74OUT ,#0FFH;   P4,P5,P6,P7为推拉式输出
	 RET
LDELAY:MOV  R4,#20H
LDE:   ACALL  DEL0
	  DJNZ   R4,LDE
	  RET
DEL0: MOV R7,#0FFH    ;延时子程序
TM:  MOV R6,#0FFH
     DJNZ R6,$
     DJNZ R7,TM
     RET
EXCHG:  MOV   A,30H    ;数据格式转换子程序.在30H,31H中存放从LM92读出的原始数据.
         MOV   20H,#0
         MOV   C,ACC.7   ;判断符号位
         MOV   7FH,C      
         RRC   A
         MOV    5,C
         RRC    A
         MOV    6,C
         RRC    A
         MOV    7,C
         ANL    A,#1FH
         MOV   32H,A
         MOV   A,31H
         RR    A
         RR    A
         RR    A
         ANL   A,#1FH
         ORL   A,20H
         MOV   33H,A  
         MOV    C,7FH
         JNC  G1  
         MOV   A,32H
         CPL   A
         MOV   32H,A
         MOV   A,33H
         CPL   A 
         MOV   33H,A 
 G1:     ACALL  DEGREE
         MOV   A,34H
         LCALL  EXCH
         LCALL  SAVEA
		LCALL  SAVEB
         RET
SAVEA:  MOV     R0,#78H  ;把整理后的数据保存在78H,79H,7AH,7BH中
        MOV     R7,#7
        MOV     R1,#36H
RPSA:   MOV     A,@R1
        ANL     A,#0FH
	      MOV	    @R0,A
      	INC 	  R1
	      INC     R0
	      DJNZ    R7,RPSA
		MOV     A,7DH
		MOV     7CH,A
	      RET
SAVEB:  MOV     58H,#20H
        MOV     R0,#70H
        MOV     R7,#7
        MOV     R1,#36H
RPSB:	  MOV     A,@R1
        MOV	@R0,A
      	INC 	R1
	      INC     R0
	      DJNZ    R7,RPSB
			
	      RET
DEGREE:  MOV  A,32H
         SWAP A
         MOV  B,A
         MOV  A,33H
         ANL  A,#0F0H
         SWAP A
         ADD  A,B
         MOV  34H,A
         MOV  A,33H
         ANL  A, #8
         RR  A
         RR  A
         RR  A
         MOV  35H,A
         RET
EXCH  : MOV     B,#10
         DIV     AB
         MOV     39H,B     
         MOV     B,#10
         DIV     AB
         ADD     A,#30H    ;37H:百位
         MOV     37H,A
         MOV     A,B
         ADD     A,#30H
         MOV     38H,A      ;38H:十位
         MOV     36H,#30H
         MOV     A,39H      ;39H:个位
         ADD     A,#30H
         MOV     39H,A  
         MOV     A,35H   
         MOV     3AH,#2EH    ;.5  OR  .0
         MOV     3BH,#35H
         CJNE    A,#1,POINT
         MOV     3BH,#30H
         MOV     3CH,#43H
   POINT:MOV     C,7FH
         JC      SIGN
         MOV     36H,#2BH      ;36H:SIGN
         RET
   SIGN: MOV     36H,#2DH
         RET 
	SAA1064: ;向SAA1064依次连续写入5个数 . 要显示的数据在78H,79H,7AH,7BH中
    SETB   EA   
         MOV      R1,#50H  
		MOV      DATA_COUNT,#5H    ; 装入待写数据块的长度
		MOV      SLA_ADD,#CHIP_B        ; 装入从器件的写地址 
		MOV      DATA_ADDR ,#0   
         MOV      78H,#10H
		MOV      R0,#78H
DISPP:    MOV    A,@R0
          MOV     DPTR,#BCD  ;查表,找到显示的数据(字型码)
		CLR     BYTE_SENT
		MOVC    A,@A+DPTR     
		CJNE    R0,#7BH,DD
		ORL     A,#80H
 DD:     MOV     TRANSMIT_BYTE ,A  
	     MOV     SUBADR_ADD,DATA_ADDR      ;  将存储器(SAA1064)的地址装入 SUBADR_ADD
         LCALL   SEND   
         INC     R0                 ;地址加1
         INC     DATA_ADDR 
		DJNZ    DATA_COUNT,DISPP          ; 计数器减1,不为0则循环到开始处
    CLR   EA
		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 	17H                       ;COM  
    END

⌨️ 快捷键说明

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