📄 hdasghd.asm
字号:
;放每次修改日期:---------2005-04-04-07-------------
;---------------------------
VDATA BIT P0.6 ;VRXD 数据线以替代 RXD,即P3.6
VCLK BIT P0.5 ;VTXD 时钟线以替代 TXD,即P3.7
S1 BIT P0.4
S2 BIT P0.3
S3 BIT P0.2
S4 BIT P0.1
S5 BIT P0.0
;---------------------------
FF1 BIT P1.0
FF2 BIT P1.1
FF3 BIT P1.2
SPEAK BIT P1.3
LEDT1 BIT P1.4;
LEDT2 BIT P1.5;
LEDT3 BIT P1.6;
RUNK BIT P0.7;
;-----------------------------
ADDK BIT P2.0;
NEXTK BIT P2.1;
SETK BIT P2.2;
LOOKK BIT P2.3;
RESK BIT P2.4;
SELK BIT P2.5;
STOPK BIT P2.6;
CLRK BIT P2.7;
;----------------------------------
;-----------------------------------
T100MS DATA 08H ;100MS单元
T1S DATA 09H ;1S单元;放计时时间值
T20 DATA 0AH ;50ms*20=1s
DELA DATA 0BH ;供延时用寄存器
DELB DATA 0CH ;供延时用寄存器
DELC DATA 0DH ;供延时用寄存器
DTIMES DATA 0EH ;供延时20机器周期用
T10 DATA 0FH ;T10单元进10 次
;-----------------------------------
;-------------------------------
BITDIF DATA 20H
T1S50 BIT BITDIF.0;
PASS BIT BITDIF.1;放PASS的值
FLAG BIT BITDIF.2;
FLAGDT2 BIT BITDIF.3;状态2延时T4到否的标志
FLAGDT3 BIT BITDIF.4;状态2延时T2到否的标志
FLAGDT4 BIT BITDIF.5;状态2延时T2+T3到否的标志
FLAGF1 BIT BITDIF.6;放F1状态
FLAGF2 BIT BITDIF.7;放F1状态
;-----------------------------------
;------------------------------------
BITDISP DATA 21H
LED5 BIT BITDISP.2
LED4 BIT BITDISP.3
LED3 BIT BITDISP.4
LED2 BIT BITDISP.5
LED1 BIT BITDISP.6
LEDRUN BIT BITDISP.7
;------------------------------------
;-------------------------------------
FLAGSRT DATA 22H ;FLAG SECOND RUN TI
;ACK BIT FLAGSRT.0;I2C器件非应答信号;---此位以被占用----
FLAGSRT2 BIT FLAGSRT.3;状态2延时T2第一次标志
FLAGSRT3 BIT FLAGSRT.4;状态2延时T3第一次标志
FLAGSRT4 BIT FLAGSRT.5;状态2延时T4第一次标志
FLAGT500 BIT FLAGSRT.6;延时500MS反转标志
;------------------------------------------
;--------------I2C------------------
SLVADR DATA 0A0H ;为24C04地址,第一页256字节为A0,第二页256字节为A2
BITCNT DATA 26H ;数据位计数器
ADDR DATA 27H ;被控器单元地址,即写入24C04的地址(页内256byte)
SDA BIT P3.5 ;I2C器件的数据线
SCL BIT P3.4 ;I2C器件的时钟线
ACK BIT FLAGSRT.0;I2C器件非应答信号
;ACK BIT BITDIF.6;I2C器件非应答信号;---与FLAGF1 BIT BITDIF.6;放F1状态重合----
;-------------------------------------
;--------------LOOP,RUN中放BCD码-----------------------
FRUNNUML DATA 30H
FRUNNUMM DATA 31H
FRUNNUMH DATA 32H
FLOOPNUML DATA 33H
FLOOPNUMM DATA 34H
FLOOPNUMH DATA 35H
;------------------------
GUODU1 DATA 32H
GUODU2 DATA 33H
GUODU3 DATA 34H
GUODU4 DATA 35H
;------------------------
SRUNNUML DATA 3AH
SRUNNUMM DATA 3BH
SRUNNUMH DATA 3CH
SLOOPNUML DATA 3DH
SLOOPNUMM DATA 3EH
SLOOPNUMH DATA 3FH
;-----------放BCD码-----------------
LITH1L DATA 41H
LITH1M DATA 42H
LITH1H DATA 43H
LITH2L DATA 44H
LITH2M DATA 45H
LITH2H DATA 46H
LAGH1L DATA 47H
LAGH1M DATA 48H
LAGH1H DATA 49H
LAGH2L DATA 4AH
LAGH2M DATA 4BH
LAGH2H DATA 4CH
LAGKL DATA 4DH
LAGKM DATA 4EH
LAGKH DATA 4FH
;-----------放BCD码----------------
LITHHL DATA 50H
LITHHH DATA 51H
LAGHHL DATA 52H
LAGHHH DATA 53H
LAGKKL DATA 54H
LAGKKH DATA 55H
LITHL1L DATA 56H
LITHL1H DATA 57H
LITHL2L DATA 58H
LITHL2H DATA 59H
LAGHL1L DATA 5AH
LAGHL1H DATA 5BH
LAGHL2L DATA 5CH
LAGHL2H DATA 5DH
KLL DATA 5EH
KLH DATA 5FH
;---------TI中放BCD码--------------------
FT1L DATA 80H
FT1H DATA 81H
FT2L DATA 82H
FT2H DATA 83H
FT3L DATA 84H
FT3H DATA 85H
FT4L DATA 86H
FT4H DATA 87H
FT5L DATA 88H
FT5H DATA 89H
FT6L DATA 8AH
FT6H DATA 8BH
FT7L DATA 8CH
FT7H DATA 8DH
FT8L DATA 8EH
FT8H DATA 8FH
;------------------------
;SLVADR DATA 0A0H ;为24C04地址,第一页256字节为A0,第二页256字节为A2
;-----------------------
ST1L DATA 0A1H
ST1H DATA 0A2H
ST2L DATA 0A3H
ST2H DATA 0A4H
ST3L DATA 0A5H
ST3H DATA 0A6H
ST4L DATA 0A7H
ST4H DATA 0A8H
ST5L DATA 0A9H
ST5H DATA 0AAH
ST6L DATA 0ABH
ST6H DATA 0ACH
ST7L DATA 0ADH
ST7H DATA 0AEH
ST8L DATA 0AFH
ST8H DATA 0B0H
ST9L DATA 0B1H
ST9H DATA 0B2H
STAL DATA 0B3H
STAH DATA 0B4H
;-----------------------
TT1L DATA 0C0H
TT1H DATA 0C1H
TT2L DATA 0C2H
TT2H DATA 0C3H
TT3L DATA 0C4H
TT3H DATA 0C5H
TT4L DATA 0C6H
TT4H DATA 0C7H
TT5L DATA 0C8H
TT5H DATA 0C9H
TT6L DATA 0CAH
TT6H DATA 0CBH
TT7L DATA 0CCH
TT7H DATA 0CDH
;----------------------
TTL DATA 0CEH
TTH DATA 0CFH
;---------------------------------------
;**************跳转到主程序*****************
ORG 0000H
JMP MAIN
ORG 0003H
JMP WI0
ORG 001BH
JMP T1
;*******************************************
;***************中断************************
ORG 0050H
T1: MOV TH1 , #3CH ;50MS
MOV TL1 , #0B0H ;
;---------------
DJNZ T10 , T1AA
CPL FLAGT500
MOV T10 , #7;T10单元进5 次
T1AA: NOP
;---------------
CPL T1S50;反转标志位,0,1循环
JB T1S50 , T1A
INC T100MS ;100MS计数单元,放100MS次数
T1A: DJNZ T20 , T1B ;T20放20次循环数,减1不为零跳出
MOV T100MS ,#00H
INC T1S ;1S 计数单元
MOV T20 , #20;T20单元进20 次
T1B: RETI
;******************************************
WI0: NOP
RET
;****************主程序********************
ORG 0100H
MAIN: NOP
MOV SP , #60H
MOV T20 , #20
MOV T10 , #7
MOV T100MS , #00H
MOV T1S , #00H
LCALL SETUP
NOP
MAINLOOP: CALL FSTATE;跳到状态选择
CALL SSTATE;
CALL TSTATE;
JMP MAINLOOP;
;*****************************************
;###############初使化 ##################
SETUP: MOV R0 , #00H
MOV R1 , #00H
MOV R2 , #00H
MOV R3 , #00H
MOV R4 , #00H
MOV R5 , #00H
MOV R6 , #00H
MOV R7 , #00H
MOV BITDISP , #00H ;小灯全灭
CALL DISPLED
SETB LEDT1;大灯全灭
SETB LEDT2
SETB LEDT3
CLR PASS;PASSW清零
;----------------------
CLR RS0 ;
CLR RS1 ;
;--------------------
;SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
MOV SCON , #00H ; 串行控制
;TMOD GATE C/-T M1 M0 GATE C/-T M1 M0
MOV TMOD, #11H ;定时器T1工作于模式1
;THx TLx放定时/计数值
MOV TH1 , #3CH ;50MS
MOV TL1 , #0B0H ;
;TCON TF1(定时器1益处中断标志) TR1(定时器运行控制位) TF0() TR0() IE1(请求标志位) IT1(外部中断请求0为下降沿1为低电平有效) IE0() IT0() (88H)
SETB TR1 ;启动T1记数
;IE EA(开放禁止所有中断) X X ES(开放禁止串行中断) ET1(开放禁止定时器1益处中断) EX1(开放禁止外部中断源1) ET0 EX0
MOV IE , #00H ;禁止其它中断
SETB ET1 ;允许T1中断
SETB EA ;CPU开中断
RET
;===每个数码管、指示灯依次闪亮0.2S,蜂鸣器短鸣2声0.3S==
;======================================================
;####################################################
;##########精确延时200MS##################R4=DELA;R5=DELB;R6=DELC;
DEL200: NOP ;DELAY TIME=R6*R5*R4*2*E-6=100MS
MOV DELC , #02H
MOV DELB , #0BFH
MOV DELA , #00H
DEL2001: DJNZ DELA , $
DJNZ DELB , DEL2001
DJNZ DELC , DEL2001
RET
;#########################################
;##########精确延时100MS##################
DEL100: NOP ;DELAY TIME=R6*R5*R4*2*E-6=100MS
MOV DELC , #1
MOV DELB , #0BFH
MOV DELA , #00
DEL1001: DJNZ DELA , $
DJNZ DELB , DEL1001
DJNZ DELC , DEL1001
RET
;#########################################
;##########精确延时50MS##################
DEL50: NOP ;DELAY TIME=R6*R5*R4*2*E-6=100MS
MOV DELC , #1
MOV DELB , #0BFH
MOV DELA , #00
DEL501: DJNZ DELA , $
DJNZ DELB , DEL501
DJNZ DELC , DEL501
RET
;#########################################
;##########精确延时10MS##################
DEL10: NOP ;DELAY TIME=R6*R5*R4*2*E-6=10MS
MOV DELC , #01H
MOV DELB , #15H
MOV DELA , #00H
DEL102: DJNZ DELA , $
DJNZ DELB , DEL102
DJNZ DELC , DEL102
RET
;#########################################
;##########精确延时5MS##################
DEL5: NOP ;DELAY TIME=R6*R5*R4*2*E-6=10MS
MOV DELC , #01H
MOV DELB , #15H
MOV DELA , #00H
DEL52: DJNZ DELA , $
DJNZ DELB , DEL52
DJNZ DELC , DEL52
RET
;#########################################
;##########精确延时1MS##################
DEL1: NOP ;DELAY TIME=R6*R5*R4*2*E-6=10MS
MOV DELC , #01H
MOV DELB , #02H
MOV DELA , #00H
DEL13: DJNZ DELA , $
DJNZ DELB , DEL13
DJNZ DELC , DEL13
RET
;#########################################
;*******************************I2C BUS;**************************************
;########### 发送数据程序################
;要发的数放于R0中,一次发一个,地址为:ADDR
SENDDATA: LCALL START
MOV A,#SLVADR ;为24C04地址,第一页256字节为A0,第二页256字节为A2
LCALL SENTBYTE ;字节数据发送子程序
JB F0,SENDRETURN
MOV A,ADDR ;被控器单元地址,即写入24C04的地址(页内256byte)
LCALL SENTBYTE ;字节数据发送子程序
JB F0,SENDRETURN
SENTNEXT: MOV A,R0
LCALL SENTBYTE
JB F0,SENDRETURN
ACALL STOP
CALL DEL10
SENDRETURN:RET
;#########################################################
;#################接收数据程序############################
;收到的数放于R0中,一次收一个,地址为:ADDR
RCVDATA: ACALL START
MOV A,#SLVADR ;为24C04地址,第一页256字节为A0,第二页256字节为A2
ACALL SENTBYTE ;字节数据发送子程序
JB F0,RCVRETURN
MOV A,ADDR ;被控器单元地址,即写入24C04的地址(页内256byte)
ACALL SENTBYTE ;字节数据发送子程序
JB F0,RCVRETURN
ACALL START
MOV A,#SLVADR ;为24C04地址,第一页256字节为A0,第二页256字节为A2
SETB ACC.0
ACALL SENTBYTE ;字节数据发送子程序
JB F0,RCVRETURN
RCVLAST: SETB ACK ;发非应答信号,接收完最后一个数据后发出非应答以停止接收数据
ACALL RCVBYTE ;字节数据接收子程序
MOV R0,A
ACALL STOP
RCVRETURN: RET
;#################################################
;NAME:START 起始条件
;--------------------------
START: SETB SDA
NOP
nop
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
;------------------------------
;NAME:STOP 停止条件
;-------------------------------
STOP: CLR SDA
NOP
nop
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
;--------------------------------
;NAME:SENTBYTE ;字节数据发送子程序
;--------------------------------
SENTBYTE: MOV BITCNT,#08H ;数据位计数器
SENTB: RLC A
JC SENT1
CLR SDA
SJMP SENT
SENT1: SETB SDA
NOP
SENT: nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -