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

📄 time_relay.src

📁 一个时间继电器程序,是用三星单片机+汇编语言写的.
💻 SRC
📖 第 1 页 / 共 3 页
字号:

 ;****************************************
;porgram:     大德思时间继电器        *
;mcu:           sm9454                  *
;date:          2007.5.18              *
;****************************************
.include "s3c9454.reg"
sys_zt          equ             00h             
ADJUST         equ              01h             ;保存状态 
KEY_DATA        equ             02h             
KEY_OLD         equ             03h
KEY_ENTER       equ             04h
KEY_LONG_TEMP   equ             05h
T_1MS_TEMP      EQU             06H  
T_1MS_FLAG      equ             07h              
T_2MS_TEMP       equ            08h             ;2ms
T_2MS_FLAG      EQU             09H    
t_10ms_tmp      equ             0Ah             ;10ms
T_10MS_FLAG          equ        0BH
T_12MS_TEMP     EQU             0CH  
T_100MS_TEMP    equ             0Dh             ;100ms
T_100MS_FLAG   equ              0Eh              ;100ms 标志 
T_300MS_TEMP    EQU             0FH
T_500MS_TEMP     equ            10h   
T_500MS_FLAG   equ              11h              ;500ms 标志
T_1S_TEMP       EQU             12H
T_1S_FLAG       EQU             13H
T_3S_TEMP       EQU             14H
T_3S_FLAG       EQU             15H
T_5S_TEMP       EQU             16H
T_5S_FLAG       EQU             17H
T_1MIN_TEMP     EQU             18H 
timer_tmp3      equ             19h             ;定时时间十位         
time_1min       equ             1Ah              ;1min 存储器 
time_6min       equ             1Bh              ;6min 存储器 
KEY_TIME	equ		1Ch	         
ram_save1       equ             1Dh              ;当3个存储器全位55h时不清除ram 
ram_save2       equ             1Eh
ram_save3       equ             1Fh     
KEY_BUF           equ            20h 
dis_led         equ             21h             ;led显示控制 
KEY_IN_IN         equ           22h             ;保压时间       
test_tmp        equ             23h           
RLT_TEMP        equ             24h             
DIS_CP1         equ             25h              ;显示切换 0:1位 1:2位 2:3位 3:4位 
DIS_DP       equ                26h                                    
DIS_GW        equ               27h            
DIS_SW       equ                28h             
DIS_BW       equ                29h  
DIS_BUF_DP        equ           2Ah                                    
DIS_BUF_GW        equ           2Bh            
DIS_BUF_SW       equ            2Ch             
DIS_BUF_BW       equ            2Dh 
KEY_DIS_DP            EQU           2EH
KEY_DIS_GW            EQU           2FH
KEY_DIS_SW            EQU           30H
KEY_DIS_BW            EQU           31H           
KEY_LED          equ            32h 
KEY_DP_TIME_POSITIVE     EQU    33H
KEY_GW_TIME_POSITIVE     EQU    34H
KEY_SW_TIME_POSITIVE     EQU    35H
KEY_BW_TIME_POSITIVE     EQU    36H
KEY_DP_TIME_MINUS        EQU    37H
KEY_GW_TIME_MINUS        EQU    38H
KEY_SW_TIME_MINUS        EQU    39H
KEY_BW_TIME_MINUS        EQU    3AH
KEY_DP_TIME_STOP EQU            3BH
KEY_GW_TIME_STOP EQU            3CH
KEY_SW_TIME_STOP EQU            3DH
KEY_BW_TIME_STOP EQU            3EH            
SOU1_TEMP        equ            3Fh              
SOUH1_TEMP       equ		40h		
SADR             equ            41h          
SADRH            equ            42h        
DADR	equ		        43h		
CNT	equ		        44H	
SOU	equ		        45H
SOUH	equ		        46H		
RLT	equ			47H	
RLTH	equ			48H	
TEMP1   equ			49H	
TEMP2	equ			4AH	
TEMP3	equ			4BH			
TEMP4   equ                     4CH 
TXBUF   EQU             SOU
RXBUF   EQU             SOUH            
BCOUNT  EQU             CNT
;*************************flag******************************
KEY_IN          equ             4Dh
display_in      equ             4Eh
DISPLAY_CNT      equ            4Fh
KEY_LONG_EN     equ             50h     ;长按键确认 55h                         
ad_s            equ             51h              ;启动ad                	
display_new	equ		52h		;显示刷新 
;FLASH_FLAG	equ		53h		;闪烁标志
flash_cpl	equ		54h		;闪烁切换
flash_del	equ		55h		;闪烁时间
sys2_ready	equ		56h
KEY_TIME_SET    EQU             57H
KEY_TIME_COMPARE EQU            58H
DIS_DP_TEMP           EQU            59H
DIS_GW_TEMP           EQU            5AH
DIS_SW_TEMP           EQU            5BH
DIS_BW_TEMP           EQU            5CH
KEY_DP_TEMP           EQU            5DH
KEY_GW_TEMP           EQU            5EH
KEY_SW_TEMP           EQU            5FH
KEY_BW_TEMP           EQU            60H
KEY_LED_TEMP           EQU            61H 
KEY_DP1               EQU            62H
KEY_GW1               EQU            63H
KEY_SW1               EQU            64H
KEY_BW1               EQU            65H
KEY_MOV_FLAG          EQU            66H
T_500MS_FLAG1         EQU            67H
T_1S_FLAG1            EQU            68H
KEY_DP                EQU            69H
KEY_GW                EQU            6AH
KEY_SW                EQU            6BH
KEY_BW                EQU            6CH
;***********************************************************
   org     0000h
                VECTOR  00h,INT_9454
                
                org     03ch
               	db      00h
                db      00h
                db      0E4h
                db      00h
                
                org     0100h

RESET
	
        DI			; disable interrupt
        ld	P0CONL,#10101010B	; P0.0–P0.7 push-pull output
        ld	P2CONH	,#01001010B
        AND  P0,#00000000B      ;关掉数码管 
        LD   P2,#00001000B      ;关发光二极管 
	ld	BTCON	,#10100011B 	; Watch-dog disable


    ;{
	ld	R0	,#0
	ld	R1	,#0
DELAY:
				;延时
      	nop
       	nop
       	nop
       	nop
       	inc	R0
       	cp 	R0	,#200
       	JP	ULE	,DELAY
       	clr	R0
       	inc	R1
       	cp 	R1	,#10
       	JP	ULE	,DELAY
MAIN
	LD      P0PND,#00H
        ld      CLKCON	,#10011000B	; Select non-divided CPU clock
	ld	SP,#0C0H		; Stack pointer must be set
	ld	P0CONH	,#10001010B
	ld	P0CONL,#10101010B	; P0.0–P0.7 push-pull output
        LD      P0,#0000111B
        ;LD      P0CONL,#01010101B
	ld	P1CON	,#00001010B	; P1.0–P1.1 push-pull output
	ld	P2CONH	,#01001010B
	ld	P2CONL	,#10010101B	; P2.0–P2.6 push-pull output
        OR      P1,#00000100B
        AND  P0,#11110111B      ;关掉数码管 
        LD   P2,#00001000B      ;关发光二极管 
;--------------<< Timer 0 settings >>

	;ld	T0DATA	,#125		; CPU at 4 MHz,period(1/f)=250nS
;ld	T0CON	,#10001010B	; fOSC/8, Timer 0 interrupt enable	interrupt interval = 250uS
	;ld	P0PND	,#00000010B                                        
clr_ram:
                ld      r0,#0
clr_ram1:
                clr     @r0
                inc     r0
                cp      r0,#0c0h
                jp      nz,clr_ram1
              ;  LD  AD_IN,#20H
                LD   DIS_CP1,#0AH
                LD   DISPLAY_CNT,#18H
                ld	T_1MS_TEMP,#2
                LD      T_1MIN_TEMP,#60
                ld      T_2MS_TEMP,#2
                ld      t_10ms_tmp,#5
                ld      T_100MS_TEMP,#10
                LD      T_500MS_TEMP,#5
                LD      T_1S_TEMP,#2
                LD      T_5S_TEMP,#5
                CLR      KEY_ENTER
                LD      T_1MS_FLAG,#55H
                LD      KEY_TIME_SET,#01H
;*******************************接收I2C********************************           
         CALL  I2CSTAR
        LD    TXBUF,#10100000B
        CALL  WRBYT
        CALL  CHECK
        JP    C,TIME
        LD    TXBUF,#00000001B
        CALL  WRBYT
        CALL  CHECK
        CALL  I2CSTAR
        LD    TXBUF,#10100001B
        CALL  WRBYT
        CALL  CHECK
        JP    C,TIME
        LD    R0,#0CH
RXD_STAR
        CALL  RBYT
RXD_DATA
        CP    R0,#0CH
        JP    NE,RXD_KEY_GW
        LD    KEY_DP_TIME_POSITIVE,RXBUF
RXD_KEY_GW
        CP    R0,#0BH
        JP    NE,RXD_KEY_SW
        LD    KEY_GW_TIME_POSITIVE,RXBUF
RXD_KEY_SW
        CP    R0,#0AH
        JP    NE,RXD_KEY_BW
        LD    KEY_SW_TIME_POSITIVE,RXBUF
RXD_KEY_BW
        CP    R0,#09H
        JP    NE,RXD_KEY_DP_TIME
        LD    KEY_BW_TIME_POSITIVE,RXBUF
RXD_KEY_DP_TIME
        CP    R0,#08H
        JP    NE,RXD_KEY_GW_TIME
        LD    KEY_DP_TIME_MINUS,RXBUF
RXD_KEY_GW_TIME
        CP    R0,#07H
        JP    NE,RXD_KEY_SW_TIME
        LD    KEY_GW_TIME_MINUS,RXBUF
RXD_KEY_SW_TIME
        CP    R0,#06H
        JP    NE,RXD_KEY_BW_TIME
        LD    KEY_SW_TIME_MINUS,RXBUF
RXD_KEY_BW_TIME
        CP    R0,#05H
        JP    NE,RXD_KEY_DP_STOP
        LD    KEY_BW_TIME_MINUS,RXBUF
RXD_KEY_DP_STOP
        CP    R0,#04H
        JP    NE,RXD_KEY_GW_STOP
        LD    KEY_DP_TIME_STOP,RXBUF
RXD_KEY_GW_STOP
        CP    R0,#03H
        JP    NE,RXD_KEY_SW_STOP
        LD    KEY_GW_TIME_STOP,RXBUF
RXD_KEY_SW_STOP
        CP    R0,#02H
        JP    NE,RXD_KEY_BW_STOP
        LD    KEY_SW_TIME_STOP,RXBUF
RXD_KEY_BW_STOP
        CP    R0,#01H
        JP    NE,RXD_SLAVE_ACK
        LD    KEY_BW_TIME_STOP,RXBUF
RXD_SLAVE_ACK
        CALL  MACK
        DEC   R0
        CP    R0,#00H
        JP    NE,RXD_STAR
        CALL  MANCK
        CALL  I2CSTOP
        CP    KEY_DP_TIME_POSITIVE,#20H
        JP    ULT,TIME_POSITIVE_CLR1 
        CLR   KEY_DP_TIME_POSITIVE
TIME_POSITIVE_CLR1 
        CP    KEY_GW_TIME_POSITIVE,#20H
        JP    ULT,TIME_POSITIVE_CLR2 
        CLR   KEY_GW_TIME_POSITIVE
TIME_POSITIVE_CLR2
        CP    KEY_SW_TIME_POSITIVE,#20H
        JP    ULT,TIME_POSITIVE_CLR3
        CLR   KEY_SW_TIME_POSITIVE
TIME_POSITIVE_CLR3
        CP    KEY_BW_TIME_POSITIVE,#20H
        JP    ULT,TIME_POSITIVE_CLR4
        CLR   KEY_BW_TIME_POSITIVE
TIME_POSITIVE_CLR4
        CP    KEY_DP_TIME_MINUS,#20H
        JP    ULT,TIME_MINUS_CLR1
        CLR   KEY_DP_TIME_MINUS
TIME_MINUS_CLR1
        CP    KEY_GW_TIME_MINUS,#20H
        JP    ULT,TIME_MINUS_CLR2
        CLR   KEY_GW_TIME_MINUS
TIME_MINUS_CLR2
        CP    KEY_SW_TIME_MINUS,#20H
        JP    ULT,TIME_MINUS_CLR3
        CLR   KEY_SW_TIME_MINUS
TIME_MINUS_CLR3
        CP    KEY_BW_TIME_MINUS,#20H
        JP    ULT,TIME_MINUS_CLR4
        CLR   KEY_BW_TIME_MINUS
TIME_MINUS_CLR4
        CP    KEY_DP_TIME_STOP,#20H
        JP    ULT,TIME_STOP_CLR1
        CLR   KEY_DP_TIME_STOP
TIME_STOP_CLR1
        CP    KEY_GW_TIME_STOP,#20H
        JP    ULT,TIME_STOP_CLR2
        CLR   KEY_GW_TIME_STOP
TIME_STOP_CLR2
        CP    KEY_SW_TIME_STOP,#20H
        JP    ULT,TIME_STOP_CLR3
        CLR   KEY_SW_TIME_STOP
TIME_STOP_CLR3
        CP    KEY_BW_TIME_STOP,#20H
        JP    ULT,TIME_STOP_CLR4
        CLR   KEY_BW_TIME_STOP
TIME_STOP_CLR4
        LD    KEY_DP1,KEY_DP_TIME_POSITIVE
        LD    KEY_GW1,KEY_GW_TIME_POSITIVE
        LD    KEY_SW1,KEY_SW_TIME_POSITIVE
        LD    KEY_BW1,KEY_BW_TIME_POSITIVE
        LD    KEY_DP,KEY_DP_TIME_POSITIVE
        LD    KEY_GW,KEY_GW_TIME_POSITIVE
        LD    KEY_SW,KEY_SW_TIME_POSITIVE
        LD    KEY_BW,KEY_BW_TIME_POSITIVE
        LD    DIS_DP,KEY_DP_TIME_POSITIVE
        LD    DIS_GW,KEY_GW_TIME_POSITIVE
        LD    DIS_SW,KEY_SW_TIME_POSITIVE
        LD    DIS_BW,KEY_BW_TIME_POSITIVE
        LD    KEY_TIME_COMPARE,#01H  ;下一个信号是停止 
        ;**************T0定时****************** 
        ld      t0data,#245
	ld      t0con,#10000010b    
        EI  
        LD   KEY_LED_TEMP,#18H    ;点亮停止灯 
        JP    TIME   
;****************************发送I2C********************************** 
I2COPEN
        CALL  I2CSTAR
        LD    TXBUF,#10100000B
        CALL  WRBYT
        CALL  CHECK
        JP    C,TIME
        LD    R0,#0DH
SEND_ADDRESS
        CP    R0,#0DH
        JP    NE,SEND_KEY_DP_SET
        LD    TXBUF,#01H
SEND_KEY_DP_SET
        CP    R0,#0CH
        JP    NE,SEND_KEY_GW_SET
        LD    TXBUF,KEY_DP_TIME_POSITIVE
SEND_KEY_GW_SET       
        CP    R0,#0BH
        JP    NE,SEND_KEY_SW_SET
        LD    TXBUF,KEY_GW_TIME_POSITIVE
SEND_KEY_SW_SET       
        CP    R0,#0AH
        JP    NE,SEND_KEY_BW_SET
        LD    TXBUF,KEY_SW_TIME_POSITIVE
SEND_KEY_BW_SET
        CP    R0,#09H
        JP    NE,SEND_KEY_DP_TIME
        LD    TXBUF,KEY_BW_TIME_POSITIVE
SEND_KEY_DP_TIME
        CP    R0,#08H
        JP    NE,SEND_KEY_GW_TIME
        LD    TXBUF,KEY_DP_TIME_MINUS
SEND_KEY_GW_TIME
        CP    R0,#07H
        JP    NE,SEND_KEY_SW_TIME
        LD    TXBUF,KEY_GW_TIME_MINUS 
SEND_KEY_SW_TIME
        CP    R0,#06H
        JP    NE,SEND_KEY_BW_TIME
        LD    TXBUF,KEY_SW_TIME_MINUS
SEND_KEY_BW_TIME
        CP    R0,#05H
        JP    NE,SEND_KEY_DP_STOP
        LD    TXBUF,KEY_BW_TIME_MINUS
SEND_KEY_DP_STOP
        CP    R0,#04H
        JP    NE,SEND_KEY_GW_STOP
        LD    TXBUF,KEY_DP_TIME_STOP
SEND_KEY_GW_STOP
        CP    R0,#03H
        JP    NE,SEND_KEY_SW_STOP
        LD    TXBUF,KEY_GW_TIME_STOP
SEND_KEY_SW_STOP
        CP    R0,#02H
        JP    NE,SEND_KEY_BW_STOP
        LD    TXBUF,KEY_SW_TIME_STOP
SEND_KEY_BW_STOP
        CP    R0,#01H
        JP    NE,SEND_STAR
        LD    TXBUF,KEY_BW_TIME_STOP
SEND_STAR
        CALL  WRBYT
        CALL  CHECK
        JP    C,TIME
        DEC   R0
        JP    NZ,SEND_ADDRESS
        CALL  I2CSTOP         
;************************时间计时********************************
TIME
        TM   P0,#01000000B
        JP   NZ,TIME2
        AND  P2,#11001111B       ;正转、反转继电器关掉 
        JP   T,TIME_EXIT 
TIME2         
        CP  KEY_TIME_COMPARE,#01H
        JP  NE,TIME2_2
        OR   P2,#00010000B            ;正转继电器吸合 
        JP  T,TIME2_1
TIME2_2
        CP  KEY_TIME_COMPARE,#02H
        JP  NE,TIME2_3
        AND  P2,#11001111B       ;正转、反转继电器关掉 
        JP  T,TIME2_1
TIME2_3
        CP  KEY_TIME_COMPARE,#03H
        JP  NE,TIME2_4
        OR   P2,#00100000B         ;反转继电器吸合 
        JP  T,TIME2_1
TIME2_4
        AND  P2,#11001111B       ;正转、反转继电器关掉 
TIME2_1        
        CP  T_1S_FLAG,#55H
        JP  NE,TIME_SUB
       ; LD   FLASH_FLAG,#0AAH;灭掉时钟点 
        SUB  DIS_DP,#01H
        JP   NC,TIME_EXIT1
        ADD  DIS_DP,#0AH
        SUB  DIS_GW,#01H
        JP   NC,TIME_EXIT1
        ADD  DIS_GW,#06H
        SUB  DIS_SW,#01H

⌨️ 快捷键说明

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