📄 du_追加.dt
字号:
;**********************************************************
;123456789
;project name :
;writer :
;establish date :
;modify date :
;CHIP EM78P153s F= 4MHZ T=1us
;SETUP : CYCLE=2,CLOCK=4,ENABLE WDT
;*********************************** ***********************
;define ram
;**********************************************************
IND == 0
TCC == 1
PC == 2
STATUS == 3
FSR == 4
P5 == 5
P6 == 6
R4 == 0X04
;define stutas bit
;**********************************************************
PSW == 0x03
C == 0
Z == 2
;define p5 bit
;**********************************************************
led1 equ 1
led2 equ 2
led3 equ 3
SDA EQU 0 ;OUT, P6.7, data in/out
;define P6 bit
;********************************************************
IRIN EQU 7 ;IN, IR CECEIVE IN
SCL EQU 6 ;OUT, P6.6, serial clock
key1 EQU 5
key2 EQU 4
key3 EQU 3
check_led2 == 0
check_led3 == 1
;define cont bit
;**********************************************************
PAB == 3
TE == 4
TS == 5
INT_FLG == 6
;DEFINE PULL_DOWN
;**********************************************************
IOCB == 0xb
;DEFINE OPEN_DRAIN
;**********************************************************
IOCC == 0xc
;DEFINE PULL_HIGH
;**********************************************************
IOCD == 0xd
;define wdt bit
;**********************************************************
IOCE == 0xe
EIS == 6
WDTE == 7
;DEFINE INT MASK
;**********************************************************
IOCF == 0xf
TCIE == 0
ICIE == 1
EXIE == 2
;define RF
;**********************************************************
RF == 0x0f
TCIF == 0
ICIF == 1
EXIF == 2
;DEFINE INTR
;define ram
;**********************************************************
REC_BUF == 0x24 ;EEPROM
REC_DATA0 == 0x12;*
REC_DATA1 == 0x13;*
REC_DATA2 == 0x14;*
KEY_CODE == 0x14;*
ADD_TIME == 0x20 ;ERCODE
TIMER0 == 0x16 ;DATAO
TMEP_CI == 0x17 ;DATAI
tmep_code == 0x18 ;TXBUF
add_nop == 0x19;* ADDR
tmep_data2 == 0x1a ;RXBUF
key_1_buf == 0x1b;
key_2_buf == 0x1c
key_3_buf == 0x1d
delay_time == 0x1e; *
have_many_key == 0x23 ;COUNT
key2_add_t == 0x1f ;/*/*/*
flag2 == 0x21
set_key_one == 1
set_key_two == 2
open_set_key == 3
key2_flag == 4
two_end_hight == 5
two_end_low == 6
key1_flag == 7
flag3 == 0x22
set_key_three == 1
key3_flag == 2
three_end_hight == 3
three_end_low == 4
have_an_key == 5
open_close_key2 == 6
open_close_key3 == 7
key3_add_t == 0x15
FLAG EQU 0x11
LIGHT EQU 0x25
ma1_one == 0x26
ma1_two == 0x27
ma1_three == 0x28
ma2_one == 0x29
ma2_two == 0x2a
ma2_three == 0x2b
ma3_one == 0x2c
ma3_two == 0x2d
ma3_three == 0x2e
add_delay_time == 0x2f
;*****************************************************************************
;** EM78单片机与24Cxx / 85Cxx 串行CMOS EEPROM接口I2C总线读/写的程序
;** (所有时隙均基于2MHZ晶体震荡器频率)
;*****************************************************************************
; 存储器定义
/* EEPROM EQU 0x20 ; Bit buffer
ERCODE EQU 0x21 ; Error code (to indicate bus status)
ADDR EQU 0x22 ; Address register
DATAI EQU 0x23 ; Stored data input register
DATAO EQU 0x24 ; Stored data output register
TXBUF EQU 0x25 ; TX buffer
RXBUF EQU 0x26 ; RX buffer
COUNT EQU 0x27 ; Bit counter*/
; 灯状态标志
; FLAG EQU 0x28
F_CONTINUE_KEY EQU 0 ; 连续按键标志
F_HAVE_KEY EQU 1 ; 接收到按键标志
set_key_flag EQU 2 ; Error flag
one_end_hight EQU 3
lian_ma_flag EQU 4
ERROR EQU 5
one_end_low EQU 6 ; 红外
ERRO EQU 7
;宏定义
;**********************************************************
CHIP_CODE0 EQU 0x04
CHIP_CODE1 EQU 0xfb
;灯状态标志
F_LIGHT1 EQU 0
F_LIGHT2 EQU 1
F_LIGHT3 EQU 2
F_LIGHT4 EQU 3
F_LIGHT5 EQU 4
F_LIGHT6 EQU 5
yao_key3_flag EQU 6
yao_key2_flag EQU 7
;-----------------------------------------------------------------------------
; 位定义
; EEPROM Bits
DI EQU 7 ; EEPROM input
DO EQU 6 ; EEPROM output
; I2C Device Bits
;##########################################################
;**********************************************************
ORG 0x0
JMP RESET
NOP
NOP
NOP
jmp MAIN_LOOP
NOP
NOP
org 0x8
NOP
NOP
jmp MAIN_LOOP
nop
nop
jmp MAIN_LOOP
ORG 0x20
;*****************PROGAM RESET*****************************
RESET:
MOV A,STATUS
AND A,@0x18 ; GET TO PD
JBC STATUS,Z
JMP INIT_ALL
NOP
NOP
INIT_ALL:
MOV A,@0x00 ; EX_INT,预分频给TCC,1:64 open wdt
CONTW
MOV A,@0x00
IOW P5
MOV P5,A ; 上电时刻关灯
MOV A,@0B10111111 ; P60:IRIN,P63:SETTING
IOW P6
MOV A,@0xff ; DIABLE PULL_DOWN
IOW IOCB
MOV A,@0xff ; DISABLE OPEN_DRAIN
IOW IOCC
MOV A,@0x87 ; PULL_HIGH
IOW IOCD
MOV A,@0x00 ; ENABLE WDT, P60设置为外部中断
IOW IOCE
MOV A,@0x00 ; ENABLE EX_INT,TCC INT
IOW IOCF
CLR RF
DISI ;关中断
clr FLAG
clr LIGHT
clr flag2
clr flag3
clr delay_time
clr have_many_key
clr key_1_buf
clr key_2_buf
clr key_3_buf
clr add_delay_time
clr key3_add_t
clr key2_add_t
;*********主程序开始*********************
MAIN:
call delay_and_read
nop
nop
MAIN_LOOP:
call check_led2_led3
call set_key_check
call set_key_time
call WORKING_low
call WORKING_hight
call RECEIVE_IR_KEY
jbc flag,set_key_flag
call SET_KEY ; 按键健值设定
call IR_KEY_DEAL
nop
nop
JMP MAIN_LOOP
;************end*********************************
;-=/**/**//*/*/*/*/
delay_and_read:
mov a,@0
mov p5,a
;/*/*/*/**/6561231321
mov a,@30
mov REC_BUF,a
delay_1:
call delay_100ms
DJZ REC_BUF
jmp delay_1
clr REC_BUF
bs flag2,set_key_one
bs flag2,set_key_two
bs flag3,set_key_three
nop
call read24c02
nop
bc flag2,set_key_one
bc flag2,set_key_two
bc flag3,set_key_three
nop
ret
nop
nop
JMP MAIN_LOOP
;/*/*/*/////////////////////////////////////////////////////
check_led2_led3:
MOV A,@0B10111111 ; P60:IRIN,P63:SETTING
IOW P6
jbs flag2,two_end_low
jmp check_three_key
jbs p6,check_led2
jmp check_three_key
inc key2_add_t
check_three_key:
jbs flag3,three_end_low
jmp add_check_time
jbs p6,check_led3
jmp add_check_time
inc key3_add_t
add_check_time:
jbc flag2,two_end_low
jmp ji_shuan
jbs flag3,three_end_low
jmp hight_clr
ji_shuan:
inc add_delay_time
mov a,@60
mov REC_BUF,a
mov a,add_delay_time
xor a,REC_BUF
jbs psw,z
ret
clr add_delay_time
jbs flag2,two_end_low
jmp check_three_zong
jbc LIGHT,yao_key2_flag
jmp check_three_zong
mov a,key2_add_t
bc psw,c
sub a,@30
jbc psw,c
jmp led2_without
bs flag3,open_close_key2
check_three_zong:
clr key2_add_t
jbs flag3,three_end_low
jmp hight_clr
jbc LIGHT,yao_key3_flag
jmp hight_clr
mov a,key3_add_t
bc psw,c
sub a,@30
jbc psw,c
jmp led3_without
bs flag3,open_close_key3
clr key3_add_t
nop
nop
ret
led2_without:
bc flag3,open_close_key2
bc p5,led2
bc LIGHT,F_LIGHT2
jmp check_three_zong
led3_without:
bc p5,led3
bc LIGHT,F_LIGHT3
bc flag3,open_close_key3
clr key3_add_t
ret
hight_clr:
clr add_delay_time
clr key3_add_t
ret
;++++++++++++++++++++++++设键时限+++++++++++++++++++++
;+++++++++++++++++++
set_key_time:
jbc flag2,open_set_key
jmp add_delay_time_too
jbs flag3,have_an_key
ret
add_delay_time_too:
inc delay_time
mov a,@20 ;//////////////////按键时间
mov REC_BUF,a
mov a,delay_time
xor a,REC_BUF
jbs psw,z
ret
bc flag3,have_an_key
clr key_1_buf
clr key_2_buf
clr key_3_buf
bc flag2,set_key_one
bc flag2,set_key_two
bc flag2,set_key_three
bc flag2,open_set_key
clr delay_time
ret
;+++++++++++++++++++++++设键动作++++++++++++++++
;++++++++++++++++++++++
set_key_check:
jbs flag2,key1_flag
jmp key2_check
bc flag2,key1_flag
clr delay_time
inc key_1_buf
mov a,@0x02
mov REC_BUF,a
mov a,key_1_buf
xor a,REC_BUF
jbs psw,z
jmp close_set_key1
bs flag2,set_key_one
bs flag2,open_set_key
clr delay_time
nop
key2_check:
jbs flag2,key2_flag
jmp key3_check
bc flag2,key2_flag
clr delay_time
inc key_2_buf
mov a,@0x02
mov REC_BUF,a
mov a,key_2_buf
xor a,REC_BUF
jbs psw,z
jmp close_set_key2
bs flag2,set_key_two
bs flag2,open_set_key
clr delay_time
nop
key3_check:
jbs flag3,key3_flag
ret
bc flag3,key3_flag
clr delay_time
inc key_3_buf
mov a,@0x02
mov REC_BUF,a
mov a,key_3_buf
xor a,REC_BUF
jbs psw,z
jmp close_set_key3
bs flag3,set_key_three
bs flag2,open_set_key
clr delay_time
nop
ret
close_set_key1:
bc flag2,open_set_key
jmp key2_check
close_set_key2:
bc flag2,open_set_key
jmp key3_check
close_set_key3:
bc flag2,open_set_key
ret
;+++++++++++++++++++end+++设键动作+++++++
;+++++++++++
;++++++++++++++++++++++++++++按键++++++++++++++++++++++++++
;++++++++++++++++
WORKING_low:
MOV A,@0B10111111 ; P60:IRIN,P63:SETTING
IOW P6
jbc P6,key1 ;++++低电平,灯
call key1_low ;反,开-低电平
;反,关-高电平
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -