Diseño del curso “Sistema de control de semáforos controlado por microordenador de un solo chip”

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;

E_W_LEFT_R BIT P0.0 ;;Definición de dirección este-oeste

E_W_LEFT_G BIT P0.1

E_W_R BIT P0 .2

E_W_G BIT P0.3

E_W_P_R BIT P0.4

E_W_P_G BIT P0.5

;;;;; ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

S_N_LEFT_R BIT P0.6;;Definición de dirección norte-sur

S_N_LEFT_G BIT P0.7

S_N_R BIT P2.3

S_N_G BIT P2 .2

S_N_P_R BIT P2.1

S_N_P_G BIT P2.0

;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;

BUFFER1 datos 41h ;Cuatridireccional definición de buffer de tubo digital

Datos BUFFER2 42h

Datos BUFFER3 43h

Datos BUFFER4 44h

Datos BUFFER5 45h

Datos BUFFER6 46h

Datos BUFFER7 47h

Datos BUFFER8 48h

;;;;;;;;;;;;;;;;;;;;;; ;;;;;Programa principal;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG 0000h

LJMP MAIN

ORG 000BH ;Servicio de interrupción T0 Dirección de entrada del programa

LJMP T0_INT

ORG 0100H

MAIN : MOV TMOD,#01H

MOV TH0,#3CH Temporización del temporizador para 50 ms

MOV TL0,#0B0H

SETB ET0

SETB EA

SETB TR0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;

REINICIAR: MOV P0,#0A9H ;Estado 1Pantalla LED

MOV P2, #05H

MOV R0, #00H

MOV R3, #40; R3 controla la visualización del tubo digital en dirección norte y sur

MOV R2,#10;R2 controla la visualización del tubo digital este-oeste

ESTADO1: CJNE R0,#20,POOL1

MOV R0,#00H;R0 controla el control del bucle 1s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

p>

LCALL DISP

POOL1: CJNE R2,#00H,STATE1

;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;

MOV P0,#0A8H ;Pantalla LED de estado

MOV R0,#00H

MOV R2,#04

ESTADO2: CJNE R0,#20,POOL2

MOV R0,#00H ;R0 controla el control de bucle de 1 s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL2: CJNE R2,#00H ,ESTADO2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOV P0 ,#0A6H ;Pantalla LED de estado

MOV R0,#00H

MOV R2,#07

ESTADO3: CJNE R0,#20, POOL3

MOV R0,#00H ;R0 controla el control de bucle de 1 s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL3: CJNE R2,#00H,STATE3

;;;;;;;;;;;;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;

MOV P0,#96H ;Pantalla de estado 4LED

MOV R0,#00H

MOV R2,#15

ESTADO4: CJNE R0,#20,POOL4

MOV R0,#00H ;Controles R0 Control de bucle de 1s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL4: CJNE R2, #00H,ESTADO4

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;

MOV P0,#82H ;Estado 5Pantalla LED

MOV R0,#00H

MOV R2,#4

ESTADO5: CJNE R0,#20, POOL5

MOV R0,#00H ;R0 controla el control de bucle de 1s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL5: CJNE R2,#00H,STATE5

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOV P0, #6AH ;Pantalla LED de estado 6

MOV P2, #05H

MOV R0,#00H

MOV R3,#10

MOV R2,#40

ESTADO6: CJNE R0,#20 ,POOL6

MOV R0,#00H ;R0 controla el control de bucle de 1s

DEC R3

DEC R2

LCALL JUST1

p>

LCALL JUST2

LCALL DISP

PAG

OOL6: CJNE R3,#00H,ESTADO6

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;

MOV P0,#2AH; Pantalla LED de estado 7

MOV R0,#00H

MOV R3,#4

STATE7: CJNE R0,#20,POOL7

MOV R0,#00H ;R0 controla el control de bucle 1s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL7: CJNE R3,#00H,STATE7

;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MOV P0,#0AAH ;Pantalla de estado 8LED

MOV P2,#09H

MOV R0,#00H

MOV R3,#7

ESTADO8: CJNE R0,#20,POOL8

MOV R0,#00H ;R0 controla el control de bucle de 1 s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL8: CJNE R3,#00H,STATE8

;;;;;;;;;;;;;;;;;;; ;;; ;;;;;;;;;;;;;;;;;

MOV P2,#0AH ;Estado 9Pantalla LED

MOV R0,#00H

MOV R3,#15

ESTADO9: CJNE R0,#20,POOL9

MOV R0,#00H ;R0 controla el control de bucle de 1 s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL9: CJNE R3 ,#00H ,ESTADO9

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; MOV P2,#00H ;Estado 10Pantalla LED

MOV R0,#00H

MOV R3,#4

STATE10: CJNE R0,#20,POOL10

MOV R0,#00H ;R0 controla el control de bucle de 1s

DEC R3

DEC R2

LCALL JUST1

LCALL JUST2

LCALL DISP

POOL10: CJNE R3,#00H, ESTADO10

REINICIAR LJMP

;;;;; ;;;;;;;;;;;;;Interrumpir rutina de servicio;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;

T0_INT: INC R0

MOV TH0,#3CH

MOV TL0,#0B0H

RETI

; ;;;;;;;;;;;;;;;;;;Ajustar subrutinas;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;

JUST1: MOV A,R3

MOV B, #10 ;Ajusta la posición baja en dirección norte-sur

DIV AB

<

p>MOV R7,A

MOV A,B

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV 42H,A

MOV 46H,A

MOV A, R7 Ajusta la posición alta en dirección norte-sur

MOV DPTR, #TAB

MOVC A,@A+DPTR

MOV 41H,A

MOV 45H,A

RET

;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;

JUST2: MOV A,R2

MOV B,#10 ;Ajustar la posición baja en dirección este-oeste

DIV AB

MOV R7,A

MOV A,B

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV 43H,A

MOV 47H,A

MOV A,R7; Ajusta la posición alta en dirección este-oeste

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV 44H,A

MOV 48H,A

p>

RET

;;;;;;;;;;;;;;;;;;;; ;;Mostrar subrutina;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;

DISP: PUSH ACC

MOV SCON,#00H

MOV R1,#41H

MOV R6,#08

POOL11: MOV A,@R1

MOV SBUF,A ;Iniciar salida en serie

JNB TI,$ ;Salida completa

CLR TI ;Borrar indicador TI para la próxima transmisión

INC R1

DJNZ R6 ,POOL11

POP ACC

RET

;;;;;;; ;;;;;;;;;;;;;Visualización del código de segmento;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;

TAB: DB 0C0H, 0CFH , 64H, 46H,4BH, 52H, 50H,0C7H, 40H, 42H

FIN

Obtendrás el resultado con el que estás satisfecho después de una pequeña modificación