📄 c2262.asm
字号:
;****使用764做调幅2262控制输出****餐台呼叫器**************
;
OUT BIT P0.1
KEY BIT P1.3 ;INT0
;************************************
F_GET_KEY BIT 01H
F_TIMEUP BIT 12H
F_DELAY_OK BIT 13H ;选定的延时完成了的标志
;*************************************
OUT_TIMER_H EQU 042H ;
OUT_TIMER_L EQU 043H ;
DELAY_NO EQU 044H ;现在正在使用的延时选择号
DELAY_TIME EQU 045H ;延时的时间,在定时中断中会进行递减
;*******764****************************
ORG 0000H
NOP
AJMP SYS_START
ORG 0003H ;X INT 0
NOP
LJMP INT_KEY0
ORG 001BH ; TIME1 OUT,
NOP
LJMP INT_TIMER1
;*************************************************
SYS_START:
CLR EA
MOV SP,#070H ;堆栈从070开始
MOV P0M1,#00000000B ;
MOV P0M2,#00000001B ;
MOV TMOD,#011H ;T0和T1为16位定时器
MOV TCON,#055H ;外部中断1下降沿触发
SETB EX0
SETB ET1
SETB EA
CLR OUT
;***********************************************************************
CLEAR_RAM:
MOV R0,#00H
CLEAR_RAM0:
MOV @R0,#00H
INC R0
MOV A,R0
NOP
NOP
CJNE A,#070H,CLEAR_RAM0
NOP
NOP
;*********开机10秒内没有任何操作的,就会进入省电模式***************
;MOV OUT_TIMER_H,#1 ; 12s TIMER SET
;MOV OUT_TIMER_L,#0B2H
MOV OUT_TIMER_H,#1 ; 5s TIMER SET
MOV OUT_TIMER_L,#051H
;******************************************************
SYS_START1:
JNB F_GET_KEY,SYS_START2
CLR F_GET_KEY
MOV DPTR,#TIME_TABLE ;取出这一次的延时时间
MOV A,DELAY_NO
CJNE A,#7,CHOOSE_TIME_1
MOV DELAY_NO,#0
CHOOSE_TIME_1:
MOV A,DELAY_NO
MOVC A,@A+DPTR
MOV DELAY_TIME,A
CLR F_DELAY_OK
INC DELAY_NO
SETB ET1
CHOOSE_TIME_2: ;延时开始
NOP
JNB F_DELAY_OK,CHOOSE_TIME_2
CLR ET1
SETB OUT
LCALL DELAY_100MS
LCALL DELAY_100MS
LCALL DELAY_100MS
;LCALL DELAY_50MS
LCALL DELAY_100MS
CLR OUT
;LCALL DELAY_100S
;LCALL DELAY_5S
SETB F_TIMEUP
SYS_START2:
JNB F_TIMEUP,SYS_START3
CLR F_TIMEUP
SETB EX1
CLR ET1
MOV PCON,#02H ;STOP
NOP
NOP
LJMP SYS_START1
SYS_START3:
NOP
NOP
LJMP SYS_START1
TIME_TABLE: ;每次差200MS
DB 1,7,0DH,13H,19H,20H,27H,30H
;*************************70MS中断一次*************************8
INT_TIMER1:
PUSH A
PUSH PSW
DJNZ DELAY_TIME,INT_TIMER0_1
SETB F_DELAY_OK
INT_TIMER0_1:
;JNB F_START_COUNT,INT_TIMER0_2
NOP
NOP
DJNZ OUT_TIMER_L,INT_TIMER0_2
NOP
NOP
DJNZ OUT_TIMER_H,INT_TIMER0_2
SETB F_TIMEUP
INT_TIMER0_2:
MOV TH1,#00H
MOV TL1,#05H
POP PSW
POP A
RETI
;*****************************************************************
INT_KEY0:
MOV C,KEY
JC NO_KEY
LCALL DELAY_1MS
LCALL DELAY_1MS
LCALL DELAY_1MS
MOV C,KEY
JC NO_KEY
SETB F_GET_KEY
AJMP INT_KEY0_RETI
NO_KEY:
MOV OUT_TIMER_H,#1 ;
MOV OUT_TIMER_L,#01H
SETB ET1 ;如果是错误的抖动,就设置很短的时间,让进入STOP
INT_KEY0_RETI:
RETI
;******************************************
DELAY_100MS:
NOP
MOV R6,#055H
MOV R7,#055H
DELAY_100MS_1:
NOP
NOP
DJNZ R6,DELAY_100MS_1
NOP
NOP
DJNZ R7,DELAY_100MS_1
RET
;******************************************
DELAY_50MS:
NOP
MOV R6,#0AAH
MOV R7,#02AH
DELAY_50MS_1:
NOP
NOP
DJNZ R6,DELAY_50MS_1
NOP
NOP
DJNZ R7,DELAY_50MS_1
RET
;***************2分频下的1MS 延时*****************************
DELAY_1MS:
NOP
MOV R6,#0E3H
MOV R7,#01H
DELAY_1MS_1:
NOP
NOP
DJNZ R6,DELAY_1MS_1
NOP
NOP
DJNZ R7,DELAY_1MS_1
NOP
NOP
RET
;**************************************
DELAY_100S:
NOP
MOV R4,#00H
MOV R5,#00H
MOV R6,#00H
MOV R7,#02H
DELAY_100S_1:
NOP
NOP
DJNZ R4,DELAY_100S_1
NOP
NOP
DJNZ R5,DELAY_100S_1
NOP
NOP
DJNZ R6,DELAY_100S_1
NOP
NOP
DJNZ R7,DELAY_100S_1
RET
DELAY_5S:
NOP
MOV R4,#00H
MOV R5,#00H
MOV R6,#015
DELAY_5S_1:
NOP
NOP
DJNZ R4,DELAY_5S_1
NOP
NOP
DJNZ R5,DELAY_5S_1
NOP
NOP
DJNZ R6,DELAY_5S_1
RET
ORG 0FA0H
ERR: ;ROM的最后,当程序错误跳到外面,最后会执行到这里,返回
NOP
NOP
LJMP SYS_START
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -