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

📄 dt005.asm

📁 at89C51的超级电池管理的程序,可管理3-4节电池,与ds2751用1-wire通讯
💻 ASM
📖 第 1 页 / 共 2 页
字号:
         mov a,zdata_h
         xrl a,zdata_l
         mov 36h,a
         mov 37h,#0beh
         mov a,#0b4h
         MOV SBUF,A
         ret
;-----------------------------
sent_B5:  ;向PC发送B5 DF_write OK
         mov s_point,#32h
         mov s_nnn,#6
         mov 37h,#0beh
         mov a,#0b5h
         MOV SBUF,A
         ret

;================================================
;串口中断处理程序================================
     INTI_SIO:  PUSH	PSW
		PUSH	A
                SETB    RS0     ;选寄存器组1
		CLR     RS1
		JB	TI,SEND_X
		JB	RI,REC
;接收中断-----------
	REC: 	CLR RI
                clr tr0
                MOV     TH0,#0cdH
                MOV     TL0,#01H        ;T0定时5ms
                MOV A,SBUF
                MOV r0,r_point
                mov @r0,a
                inc r0
                MOV r_point,r0
                cjne r0,#38h,rec_next
                clr     lamp_Y
                MOV r_point,#31h
                lcall do_pc_cmd  ;处理PC命令

              ajmp SIO_END
    rec_next: setb tr0
              ajmp SIO_END

 ;发送中断-------发送后续字节-----------
     SEND_X: CLR TI
             mov a,s_nnn
             jz sio_end
             dec a
             mov s_nnn,a
             mov r0,s_point
             mov a,@r0
             inc r0
             mov s_point,r0
             mov sbuf,a
             LJMP SIO_END
 ;结束串行中断-----------
     SIO_END:
              CLR RS0
              CLR RS1
              POP A
              POP PSW
              RETI

;-----------------------------------------------
init_t0:
              clr tr0
              MOV r_point,#31h
              RETI


;ok====================================================================
;定时器初始化,中断控制;通讯初始化(SIO)
sysini:	CLR	EA			;关所有中断
        MOV	TMOD,	#00100001B	;T1使用方式2自动重装载方式,T0使用方式1(16位定时器)
	MOV	SCON,	#01010000B	;串口方式1,接收允许为1
	MOV	TCON,	#00000101B	;外部中断INT0,INT1为下降沿触发
	MOV	IE,	#00010010B	;开放串口中断(IE.4)
                                                ;禁止总体中断(IE.7),T1中断(IE.3),INT1中断(IE.2),T0中断(IE.1),和INT0中断(IE.0)

	MOV	IP,#00000000B	;串口和INT0中断设为同级中断
        MOV     TH0,#80H
        MOV     TL0,#01H        ;T0定时32ms
	MOV     TH1,#0FDH       ;T1  晶振11.0592, 9600 (bit/s) 的定时常数
	MOV     TL1,#0FDH
	MOV	PCON,#00H	;与波特率有关,SMOD=0
        SETB	TR1	        ;T1 开始
        CLR	TR0	        ;T0 开始
	SETB	EA		;开中断总控
        RET


;--------------------------------------------
YS500MS:         MOV R7,#250
   YS001A:     MOV R6,#200
               nop
               nop
               nop
               nop
               DJNZ R7,YS002A
               RET
   YS002A:      DJNZ R6,YS002A
                AJMP YS001A
;------------------------------------
YS50MS:        MOV R7,#250
   YS001B:     MOV R6,#100
               DJNZ R7,YS002B
               RET
   YS002B:     DJNZ R6,YS002B
               AJMP YS001B

;-----------------------------------------------
write_2083_word:  ; cmd(32h), msb(34h), lsb(35h)
		call	tstart
		jc	Tx49		; abort if bus not available

		MOV	a, #ad_2083
		clr	acc.0		; specify write operation
		call	tshout		; send device address
		jc	Tx48		; abort if no acknowledge

		mov	a, 32h	        ; send cmd byte of address
		call	tshout		;
		jc	Tx48		; abort if no acknowledge

		mov	a, 35h	        ; get data lsb
		call	tshout		; send data
		jc	Tx48		; abort if no acknowledge

		mov	a, 34h	        ; get data msb
		call	tshout		; send data
		jc	Tx48		; abort if no acknowledge

		clr	c		; clear error flag
	Tx48:
		call	tstop
	Tx49:
		ret


;-----------------------------------------------
read_2083_word:   ;读回数据word 在 zdata_h,zdata_l
		push	b

		call	tstart
		jc	Tx47		; abort if bus not available

		MOV	a, #ad_2083	; add 1307 fixed address
		clr	acc.0		; specify write operation
		call	tshout		; send device address
		jc	Tx46    	; abort if no acknowledge

            	mov	a, pc_cmd_code	; send 命令号
		call	tshout		;
		jc	Tx46		; abort if no acknowledge

		; Call  Read word function.
		call	tstart
		jc	Tx46		; abort if bus not available

		MOV	a, #ad_2083	; add 1307 fixed address
		setb	acc.0		; specify read operation
		call	tshout		; send device address
		jc	Tx46		; abort if no acknowledge

		call	tshin		; receive data byte(L)
                mov zdata_l,a
		call	tACK		; do acknowledge byte

		call	tshin		; receive data byte(H)
                mov zdata_h,a
		call	tNAK		; do not acknowledge byte
		clr	c		; clear error flag
		call	tstop
                jmp Tx47
	Tx46:   mov i2c_err_num,#46h
		call	tstop
                jmp tx488
	Tx47:  mov i2c_err_num,#47h
	tx488:  pop b
		ret
;-----------------------------------------
read_block_xx:
                mov 41h,#0b3h
                mov 42h,pc_cmd_code
                mov a,pc_cmd_code
                cpl a
                mov 43h,a

		push	b
		call	tstart
		jc	Tx147		; abort if bus not available

		MOV	a, #ad_2083	; add 1307 fixed address
		clr	acc.0		; specify write operation
		call	tshout		; send device address
		jc	Tx146    	; abort if no acknowledge

            	mov	a, #20h	        ; send 命令号
		call	tshout		;
		jc	Tx146		; abort if no acknowledge

		; Call  Read word function.
		call	tstart
		jc	Tx146		; abort if bus not available

		MOV	a,#ad_2083	; add 1307 fixed address
		setb	acc.0		; specify read operation
		call	tshout		; send device address
		jc	Tx146		; abort if no acknowledge


                call	tshin
                mov 44h,a               ; byte_lenth
                mov block_xrl,a
      		call	tACK

                mov r0,byte_lenth
                dec r0
                mov r1,#45h

     shin_next: call	tshin
                mov @r1,a               ; D1 -- Dn
                xrl a,block_xrl
                mov block_xrl,a
      		call	tACK
                inc r1
                djnz r0,shin_next

		call	tshin
                mov @r1,a               ; byte lenth
                xrl a,block_xrl
                mov block_xrl,a
		call	tNAK		; do not acknowledge byte
		clr	c		; clear error flag
		call	tstop

                inc r1
                mov @r1,block_xrl

                inc r1
                mov @r1,#0beh
                clr c
                jmp Tx147
	Tx146:
		call	tstop
	Tx147:
		pop	b
            ret

;-----------------------------------------------
read_DF:  ;PC发送读Data Flash,read_DF 串行命令格式

⌨️ 快捷键说明

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