陈洋德:基于51单片机的自学习型遥控器设计与实现
RLC A
DJNZ R3,LOOP6 MOV ZHENGMA,A
LOOP8:
MOV R3,#8 LOOP9:JNB P3.2,$ LCALL D088MS MOV C,P3.2 JNC LOOP10 LCALL D1MS LOOP10: RLC A
DJNZ R3,LOOP9 MOV FANGMA,A MOV A,35H CPL A
CJNE A,34H,EXIT LJMP STORE
EXIT:
SETB EA AJMP $
D8S:
MOV R4,#200
D1:
MOV R5,#200
D2: MOV R6,#98 DJNZ R6,$ DJNZ R5,D2 DJNZ R4,D1 RET D088MS:
MOV R4,#20
D3: MOV R5,#20 DJNZ R5,$ DJNZ R4,D3
- 26 -
铜陵学院毕业设计
RET D474MS:
MOV R4,#10
D4: MOV R5,#235 DJNZ R5,$ DJNZ R4,D4 RET D1MS: MOV R4,#2 D5: MOV R5,#248 DJNZ R5,$ DJNZ R4,D5 RET
STORE:
MOV MACHINEAD,#10100000B
AJMP START ORG 0030H START:
MOV SP,#60H
MOV R0,#30H
MAIN: LCALL KEY JNZ M2 MOV R6,#6 MOV R2,#0
M1:
MOV RAMADDRESS,R0 INC R0
MOV I2CADDRESS,R2 CALL I2CWRITE INC R2
DJNZ R6,M1 LJMP SELECT M2:
CJNE A,#1,M3
MOV R6,#6 MOV R2,#6
M4: MOV RAMADDRESS,R0
;程序开始 ;存入I2C中的地址- 27 -
陈洋德:基于51单片机的自学习型遥控器设计与实现
INC R0
MOV I2CADDRESS,R2 ;存入I2C中的地址 CALL I2CWRITE INC R2
DJNZ R6,M4
M3: LJMP SELECT
;************************************************** ; 写串行E2PROM子程序I2CWRITE ;************************************************** I2CWRITE:
SETB RS1 ;选择寄存器2组
CLR RS0 ;保护寄存器0、1组中的内容 MOV R1,RAMADDRESS SETB SCL SETB SDA
CLR SDA ;发开始信号 MOV A,#MACHINEAD ;送器件地址 CALL BITS
MOV A,I2CADDRESS ;将存入I2c总线的内部地址单元 CALL BITS
MOV A,@R1 ;预送I2C保存数据的RAM内容送ACC CALL BITS ;调发送单字节子程序 CLR SDA ;SDA置0, 准备送停止信号 CALL DELAYI2C ;延时以满足传输速率要求 SETB SCL ;发停止信号; CALL DELAYI2C SETB SDA RET
;************************************************** ; 发送单字节子程序
;************************************************** BITS:
MOV R0,#08H MOOP: CLR SCL; RLC A ;
- 28 -
铜陵学院毕业设计
MOV SDA,C; NOP SETB SCL; CALL DELAYI2C
DJNZ R0,MOOP ;循环8次送8个bit
CLR SCL; CALL DELAYI2C SETB SCL REP: MOV C,SDA
JC REP ;判应答到否,未到则等待 CLR SCL ; RET
;************************************************** ;按键去抖延时子程序 ;Delay time=10ms
;************************************************** KEYDELAY:
MOV R6,#20H KEYDELA2: MOV R7,#248 KEYDELA1:
DJNZ R7,KEYDELA1 DJNZ R6,KEYDELA2 RET
;************************************************** ; I2C器件延时子程序 ; Delay time=4us
;************************************************** DELAYI2C: NOP NOP RET ;键盘程序 KEY:
LCALL KS
- 29 -
陈洋德:基于51单片机的自学习型遥控器设计与实现
JZ KEY LCALL DELAY LCALL KS JZ KEY MOV R2,#0EFH MOV R4,#00H
K1: MOV P1,R2 L1:
JB P1.0,L2 MOV A,#00H AJMP LK
L2:
JB P1.1,L3 MOV A,#04H AJMP LK L3:
JB P1.2,L4 MOV A,#8 AJMP LK L4:
JB P1.3,NEXT MOV A,#12 LK:
ADD A,R4 PUSH ACC K2:
LCALL DELAY LCALL KS JNZ K2 POP ACC RET NEXT:
INC R4
MOV A,R2
JNB ACC.7,KEY
- 30 -