您的位置:首页 > 其它

12_traffic_timer_int(改)

2012-05-06 00:18 267 查看
CURR_NUM	EQU	30H	;HEX
	VAR_TIMER	EQU	31H	;Soft timer
	VAR_LED		EQU	32H	;Led value,#03FH for red led,#0CFH for green led,#0F3H for yellow led
	VAR_HIS_LED	EQU	33H

	DAT_74164	bit	P0.6
	CLK_74164	bit	P0.7

	DIG_1		bit	p0.5
	DIG_2		bit	p0.4

;*******************************************
	org	0000H		
	jmp	MAIN

	org	000BH
	jmp	interrupt_T0
;*******************************************	
	org	0030H		;Start program from 0030H		
MAIN:
	mov	P0,#0FFH	;Initialize the port	
	mov	P1,#0FFH	
	mov	P2,#0FFH	
	mov	P3,#0FFH
	
	/*Initilize the var*/
	mov	CURR_NUM,#18
	mov	VAR_TIMER,#00H
	mov	VAR_LED,#03FH
	mov	P1,VAR_LED

	/*Initialize T0*/
	mov	TMOD,#01H
	mov	TH0,#0B1H	;20ms,load number
	mov	TL0,#0E0H
	setb	TR0		;Start T0
	setb	ET0		;Enable T0 inerrupt
	setb	EA		;Enable interrupt
	;mov	IE,#82H	;#10000010B

MAIN_LOOP:
	call	DISPLAY_NUM	;Display number
	jmp	MAIN_LOOP

	ret
;****************************************************
interrupt_T0:
	push	acc		;Pay attention to here
	push	psw

	;Reset T0,must be done
	;clr	TF0		;auto clear the tag of overflow
	mov	TH0,#0B1H	;20ms,reload number
	mov	TL0,#0E0H

	inc	VAR_TIMER	;Add 20ms
	/*If VAR_TIMER=50,then time for 1s */
	mov	a,VAR_TIMER
	cjne	a,#50,INT_T0_EXIT

	mov	VAR_TIMER,#00H
	call	NUM_SUB	

INT_T0_EXIT:
	pop	psw
	pop	acc

reti
;****************************************************
DISPLAY_NUM:
	;A<-A/B,
	mov	a,CURR_NUM
	mov	b,#0Ah
	div	ab
	mov	r0,a

	;Display the low value
	mov	a,b
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	call	sendTo74164	;Display the numbet
	clr	DIG_1
	setb	DIG_2
	call	DELAY_DISP
	
	;Display the high value
	mov	a,r0
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	call	sendTo74164	;Display the numbet
	clr	DIG_2
	setb	DIG_1
	call	DELAY_DISP

	ret
;*******************************************
;Send data of A to chip 74LS164
sendTo74164:
	push	07h
	push	acc

	mov	r7,#08		;send 8 bits	  
SEND164_LOOP:
	clr	CLK_74164	;clear clock-line for reading data
	rlc	a
	mov	DAT_74164,c	;move data-bit to data-line	
	setb	CLK_74164	;send data to 74164
	djnz	r7,SEND164_LOOP
	clr	CLK_74164	;clear clock-line for reading data
        
	pop	acc
	pop	07h
	ret
;****************************************************
NUM_SUB:
	;Get previos value
	mov	a,CURR_NUM
	jz	NUM_SUB_RESET

NUM_SUB_1:
	;Simple sub 1
	mov	a,CURR_NUM
	cjne	a,#03,DDEC
	jmp	To_Yellow
To_Yellow:
	mov	VAR_HIS_LED,VAR_LED
	mov	VAR_LED,#0F3H
	mov	p1,VAR_LED
	dec	a
	cjne	a,#00,NUM_SUB_EXIT
NUM_SUB_RESET:
	
	mov	a,#18		;
	call	CHANGE_LED	;Red to green or green to red
DDEC:
	dec	a	
NUM_SUB_EXIT:	
	mov	CURR_NUM,a
	ret
;****************************************************
CHANGE_LED:
	push	acc

	mov	a,VAR_HIS_LED
	cjne	a,#03FH,TO_RED_LED
	mov	VAR_LED,#0CFH		;Red to green led
	jmp	CHANGE_LED_EXIT	     

TO_RED_LED:
	mov	VAR_LED,#03FH		;Green to red led    

CHANGE_LED_EXIT:
	mov	P1,VAR_LED
	pop	acc

	ret
;****************************************************
DELAY_DISP:
	mov	r7,#10
DELAY_DISP_LOOP:
	mov	r6,#200
	djnz	r6,$
	mov	r6,#200
	djnz	r6,$

	djnz	r7,DELAY_DISP_LOOP
	ret
;****************************************************
;****************************************************
;LED code
TAB_LED:	
	DB	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;****************************************************
	END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐