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

📄 24c08lamp.asm

📁 单片机汇编例程学习,大量的汇编例程
💻 ASM
字号:
;///////////////////////////////////////////
;本程序源代码由单片机培训网提供.
;单片机培训网,让更多人学习单片机更容易.
;第一网址----www.mcuedu.com
;第二网址----http://51_train.nease.net
;创办人------刘永忠
;热线电话----(0755)27529998
;email-------aa815@163.com
;本程序使用24C08存储流水灯的实时状态
;///////////////////////////////////////////
i2c_clk bit p3.4				;时钟信号
i2c_data bit p3.5				;数据信号
	org	0000h					;
	ajmp	main
	org	0030h
main:
	mov dptr,#tab				;表头
	mov	r0,#30h					;r0为指针					
	mov	2bh,#00h				;2bh为地址L    
	lcall	r_d					;调用读EEPROM子程序
	lcall	delay10ms			;延时10ms
	mov a,30h					;
	cjne	a,#20h,com1			;将读回的内容与20H相比较,
com1: 
	jc loop						;如果超过20H,则清零,否则跳到LOOP显示.
	mov	30h,#00h
	mov	a,30h
loop:
	movc a,@a+dptr				;查表显示到P0口
	mov p0,a
	inc 30h						;取下一内容显示到P2口
	mov a,30h
	movc a,@a+dptr
	mov p2,a

	mov r4,#10
tt3:
	lcall delay10ms				;延时一秒钟
	djnz	r4,tt3

	inc 30h
	mov	r0,#30h
	mov	2bh,#00h
	lcall	w_t					;将当前的30H写入到EEPROM.
	lcall delay10ms

	mov a,30h
	cjne a,#32,loop				;再做一次比较,此步也可省去.
	mov	30h,#00h
	mov	a,30h

	ajmp	loop				;重复循环.

delay10ms:
	mov r6,#100
tt2:
	mov r5,#50
	djnz r5,$
	djnz r6,tt2
	ret
	
tab: 	dw 0fffeh,0fffdh,0fffbh,0fff7h
	dw 0ffefh,0ffdfh,0ffbfh,0ff7fh
dw 07fffh,0bfffh,0dfffh,0efffh
dw 0f7ffh,0fbffh,0fdffh,0feffh


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;  2bh为地址L    r0为指针
w_t:
a067EH: SETB  i2c_data          ;;;;写
        SETB  i2c_clk    ;;;clk
        CLR   i2c_data    ;;;sda//start 
        LCALL a0799H
        CLR   i2c_clk
        LCALL a0799H
        MOV   A, #0A0H
        LCALL a06EEH
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        lcall ledb;;;          JB    i2c_data,    $
        CLR   i2c_clk
        LCALL a0799H
        MOV   A,    2bh     ;;;;;写地址L
        LCALL a06EEH
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        lcall ledb;;; JB    i2c_data,   $
        CLR   i2c_clk
        LCALL a0799H
a06BDH: MOV   A, @R0   ;;;;写数据
        LCALL a06EEH
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        lcall ledb;;; JB    i2c_data,    $
        CLR   i2c_clk
        LCALL a0799H
        CLR   i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        SETB  i2c_data
         RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06EEH: MOV   R6, #08H
a06F0H: RLC   A          ;;;
        MOV   i2c_data, C
        lcall a0799h
        SETB  i2c_clk
        lcall a0799h
        CLR   i2c_clk
        lcall a0799h
        DJNZ  R6, a06F0H
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
ae6EEH: MOV   R6, #08H
ae6F0H: RLC   A          ;;;
        MOV   i2c_data, C
        lcall a0799h
        SETB  i2c_clk
        lcall a0799h
        CLR   i2c_clk
        lcall a0799h
        DJNZ  R6, ae6F0H
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
r_d:
a0718H: SETB  i2c_data          ;;;;写
        SETB  i2c_clk
        CLR   i2c_data
        LCALL a0799H
        CLR   i2c_clk
        LCALL a0799H
        MOV   A, #0A0H
        LCALL ae6EEH
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        lcall leda;;    JB    i2c_data,    $
        CLR   i2c_clk
        LCALL a0799H
        MOV   A,    2bh     ;;;;;写地址L
        LCALL ae6EEH
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        lcall leda;;  JB    i2c_data,   $
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        CLR   i2c_clk
        LCALL a0799H
        CLR   i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        SETB  i2c_data
        lcall delay10ms
        SETB  i2c_data              ;;;;;;;读
        SETB  i2c_clk
        CLR   i2c_data
        LCALL a0799H
        CLR   i2c_clk
        LCALL a0799H
        MOV   A, #0A1H
        LCALL ae6EEH
        LCALL a0799H
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        lcall leda;;  JB    i2c_data,      $
        CLR   i2c_clk
        LCALL a0799H
        NOP
        NOP
a0747H: MOV   R6, #08H       ;;;
        CLR   A
        CLR   C
        SETB  i2c_data
        LCALL a0799H
a0750H: SETB  i2c_clk           ;;;
        LCALL a0799H
        MOV   C, i2c_data
        RLC   A
        CLR   i2c_clk
        LCALL a0799H
        DJNZ  R6, a0750H
        MOV   @R0, A
        INC   R1
        SETB  i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        CLR   i2c_clk
        LCALL a0799H
        CLR   i2c_data
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        SETB  i2c_data
        RET
a0784H: CLR   i2c_data       ;;;
        LCALL a0799H
        SETB  i2c_clk
        LCALL a0799H
        CLR   i2c_clk
        LJMP  a0747H
;;;;;;
a0799H: NOP
        NOP
        NOP
        nop
        NOP
        NOP
        NOP
        nop
        NOP
        NOP
        NOP
        nop
        NOP
        NOP
        NOP
        nop
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leda:   mov   b,     #50h
  led1: jnb   i2c_data,  led0
        lcall a0799h
        djnz  b,     led1
        ;mov   4ch,   #0ddh
        nop
  led0: ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ledb:  mov   b,     #50h
 led0b: jnb   i2c_data,  led0a
        lcall a0799h
        djnz  b,     led0b
        nop
  led0a: ret
  end

⌨️ 快捷键说明

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