Baloncesto del MCU

¿Hay algún circuito de hardware? Es inútil si no le doy el software.

La siguiente es una placa de visualización de tres dígitos que hice yo mismo. La MCU es STC12C2052, que solo. agrega uno y La función de limpieza y la estructura del software son similares a las suyas. Si sabe cómo cambiarlo, no lo cambiaré. Para su referencia:

#include "STC12_HEAD.H"

LED BIT P1.0

DIS_CLK BIT P3.1

DIS_DAT BIT P3.0

DIS_EA BIT P1.2

INT_0 BIT P3 .2

KEY_ADD BIT P3.4

KEY_CLR BIT P3.5

;----------- ---------------

DIS_DATA1 DATOS 30H

DIS_DATA2 DATOS 31H

DIS_DATA3 DATOS 32H

KEY2_DELAY1 DATOS 33H

KEY2_DELAY2 DATOS 34H

KEY2_DELAY3 DATOS 35H

;*************** *** ************************************************* *******************************

ORG 0000H

INICIO SJMP

ORG 0003H

LCALL INT0_INT

RETI

ORG 0013H

LCALL INT1_INT

RETI

ORG 0023H

; LCALL UART_INT

RETI

-------------- ---- --------------------------

INICIO:

MOV SP, # 50H

LCALL INICIAL; Inicialización

LCALL LOAD_DATA

; MOV DIS_DATA1, #0

; >

MOV DIS_DATA3, #0

PANTALLA DE LLAMADA

************************ * ***************************

ORG 0050H

PRINCIPAL:

--------

JB KEY_ADD, NO_KEY_ADD

MOV R5, #10

KEY_ADD_CHECK:

JB KEY_ADD, NO_KEY_ADD

MOV R6, #255

DJNZ R6, $

DJNZ R5, KEY_ADD_CHECK

LCALL ADD_ONE_BIT ;Agregar 1-----------------------

WATE_KEY_END1:

LCALL WARCH_DOG ;Alimenta al perro guardián

p>

JNB KEY_ADD, WAT

E_KEY_END1

NO_KEY_ADD:

;----------

JB KEY_CLR,NO_KEY_CLR

MOV KEY2_DELAY1,# 100

KEY_CLR_CHECK:

LCALL DELAY_10MS

JB KEY_CLR, NO_KEY_CLR

DJNZ KEY2_DELAY1, KEY_CLR_CHECK

LCALL CLEAR_DATA ;;;clr---------------------------------

WATE_KEY_END2:

LCALL WARCH_DOG; Alimenta al perro guardián

JNB KEY_CLR, WATE_KEY_END2

NO_KEY_CLR:

;-------------

PANTALLA DE LLAMADA

RETARDO DE LLAMADA

LED de CPL

LCALL WARCH_DOG; guardián de alimentación

SJMP MAIN

p>

****************************************** *** *******

WARCH_DOG:

; MOV WDT_CONTR, #00110100B; Alimenta al perro 682ms

MOV WDT_CONTR, #00110101B; s

; MOV WDT_CONTR, #00110110B; Alimenta al perro 2,6s

RET

;-------------

;-------------

RETARDO: ; Retardo de alta precisión 0,5 s (sin interrupción)

DEY1 DATOS 1FH

DATOS DEY2 1EH

DATOS DEY3 1DH

MOV DEY1, #16; 167

DL1:

MOV DEY2, #20; 3mS

DL2:

MOV DEY3, #184; p>

DJNZ DEY2, DL2

DJNZ DEY1, DL1

RET

;-------------

-------------

------------

DELAY_10MS : ; -Retraso de precisión 10Ms (sin interrupción)

DEY4 DATOS 1CH

DEY5 DATOS 1BH

DEY6 DATOS 1AH

MOV DEY4, #6 ; 10MS

DL4:

MOV DEY5, #11; 1,6mS

DL5:

MOV DEY6, #184 ;150uS 6M (5T)

DJNZ DEY6, $

DJNZ DEY5, DL5

DJNZ DEY4, DL4

RET

-------------

************

*************************************************

ORG 0100H

#include"Inicialización.asm"

INICIO LJMP

ORG 0200H

#include" Interrumpir. ASM"

INICIO LJMP

ORG 0300H

#include"display.asm"

INICIO LJMP

ORG 0400H

#include"EPROM read.asm"

LJMP START

ORG 0600H

#include"Suma y resta counting.asm"

LJMP START

END

; definición de registro especial del microcontrolador de la serie STC12

; #include"D:\keil c\ Módulos de uso común\STC12_HEAD.H"

;****Definición del registro de datos***** Los datos del restablecimiento parcial permanecen sin cambios

;------- --- --------------------

;00--07H;R0--R7

; 08--17H; Pila (16 bytes)

; 18--1FH; Retraso de software

; 20--2FH; 16byte--128bit)

; 30--7FH; los registros de datos básicos utilizan direccionamiento directo o indirecto

; 80--FFH utilizan direccionamiento indirecto fuera del chip

;------------------------------------------< / p>

***Configuración del sistema***

R8 EQU 08H

R9 EQU 09H

R10 EQU 0AH

R11 EQU 0BH

R12 EQU 0CH

R13 EQU 0DH

R14 EQU 0EH

R15 EQU 0FH

; ACC EQU 0E0H

; B EQU 0F0H

; CY--AC--F0--RS1--RS0--OV--F1-- P

F1 BIT PSW.1

; SP EQU 81H

; DPL EQU 82H

;

; PCON EQU 87H; 7-SMOD (duplicación de velocidad en baudios) 6-SMOD0 () 5-LVDF () 4-POF () 3-GF1 (indicador de usuario) 2-GF0 (indicador de usuario) 1-PD (caída) Modo eléctrico) 0-IDL (modo inactivo)

CLK_DIV EQU 0C7H; válido en modo inactivo de división de reloj 7-()6-()5-()4-()3-()2- CLKS2 (), 1-CLKS1(), 0-CLKS0() (=00000111 reloj del sistema/12)

; P0 EQU 80H

P0M0 EQU 93H Modo de puerto P0 0 - 0; - 1- 1-

P0M1 EQU

94H modo de puerto P0 0 - puerto cuasi bidireccional 1 - salida de empuje 0 - entrada de alta resistencia 1 - drenaje abierto

P1 EQU 90H

P1M0 EQU 91H modo de puerto cuasi; Cuando el puerto bidireccional (corriente de disipador de 20 mA, corriente de fuente de 230 uA)

P1M1 EQU 92H; cuando el modo del puerto P1 se empuja a la salida (con fuerte pull-up, salida de 20 mA, se debe agregar una resistencia limitadora de corriente)

;P2 EQU A0H

P2M0 EQU 95H; cuando el modo del puerto P2 es entrada de alta impedancia (solo entrada)

P2M1 EQU 96H; drenaje abierto (resistencia pull-up interna desconectada)

; P3 EQU B0H

P3M0 EQU 0B1H; modo de puerto P3 PxMx (7:0)

P3M1 EQU 0B2H; modo de puerto P3

AUXR EQU 8EH; configuración de extensión del sistema 7-T0x12 (A 12 veces la velocidad) 6-T1x12 (T1 12 veces la velocidad) 5-UART_M0x6 (modo de puerto serie 0, 6 veces la velocidad) 4-EADCI (interrupción AD) 3-ESPI (interrupción SPI) 2-ELVDI (interrupción de bajo voltaje) 1-()0-()

;************ ******

;****Configuración del temporizador****

;TCON EQU 88H; TF1 (bit de interrupción T1)--TR1 (en T1)- -TF0 (bit de interrupción T0)-- TR0 (T0 abierto)--IE1 (bit de interrupción INT1)--IT1 (1 disparador de flanco inferior/nivel 0)--IE0 (bit de interrupción INT0)--IT0 (1 disparador de flanco inferior) /0 nivel)

; TMOD EQU 89H; GATE1--C/T1--1M1--1M0--GATE0--C/T0--0M1--0M0

; TL0 EQU 8AH;

TH0 EQU 8CH;

TL1 EQU 8BH;

TH1 EQU 8DH

AUXR EQU 7-; T0x12(A velocidad 12x) 6-T1x12 (T1 velocidad 12x)

;******************

;** **Configuración del puerto de línea****

; SCON EQU 98H; 7--SM0 (modo de puerto serie) 6--SM1 (modo de puerto serie) 5--SM2 (control de múltiples máquinas) 4--REN (permitir recepción) 3--TB8 (enviar 9 bits) 2--RB8 (recibir 9 bits) 1--TI (interrupción de transmisión) 0--RI (interrupción de recepción)

; SBUF EQU 99H;

p>

SADEN EQU 0B9H;

ASDDR EQU 0A9H;

; PCON EQU 87H; 6-SMOD0()

;AUXR EQU 8EH; 5-UART_M0x6 (modo de puerto serie 0, 6 veces velocidad)

;************ ******

;****Configuración de interrupción******

;IE EQU 0A8H EA--EPCA_LVD--EADC_SPI--ES--

ET1--EX1--ET0--EX0 interruptor de interrupción

; IP EQU 0E8H *--PPCA_LVD--PADC_SPI--PS--PT1--PX1--PT0--PX0 prioridad de primer nivel

IPH EQU 0B7H; *--PPCA_LVDH--PADC_SPIH--PSH--PT1H--PX1H--PT0H--PX0H Prioridad secundaria

; --TF0--*--IE1--IT1

;SCON EQU 98H;

;PCON EQU 87H;

;CCON EQU 0D8H 7 - CF (interrupción de desbordamiento de PCA) 3-CCF3 (interrupción del módulo 3) 2-CCF2 (interrupción del módulo 2) 1-CCF1 (interrupción del módulo 1) 0-CCF0 (interrupción del módulo 0)

; CMOD EQU 0D9H; 0-ECF (interruptor de interrupción de desbordamiento de PCA)

; CCAPM0 EQU 0DAH

; CCAPM1 EQU 0DBH; CCAPM2 EQU 0DCH;

;CCAPM3 EQU 0DDH;

;AUXR EQU 8EH; 4-EADCI (interruptor de interrupción AD) 3-ESPI (interruptor de interrupción SPI) 2-ELVDI (bajo voltaje interruptor de interrupción)

;******************

;****Configuración de PCA****** *

EPCA_LVD BIT IE.6; interruptor de interrupción para PCA/LVD***

CCON EQU 0D8H; 7-CF (interrupción de desbordamiento de PCA) 6-CR (interruptor de PCA) 5 -() 4-()3-CCF3 (interrupción del módulo 3) 2-CCF2 (interrupción del módulo 2) 1-CCF1 (interrupción del módulo 1) 0-CCF0 (interrupción del módulo 0)

CF BIT CCON 7; interrupción de desbordamiento

CR BIT CCON.6; interruptor PCA

CCF3 BIT CCON.3; interrupción del módulo 3

CCF2 BIT CCON.2 interrupción; /p>

CCF1 BIT CCON.1; Interrupción del módulo 1

CCF0 BIT CCON.0; Interrupción del módulo 0

CMOD EQU 0D9H; -6-()5-()4-()3-()-2-CPS1(fuente de reloj PCA)-1-CPS0(fuente de reloj PCA)-0-ECF(interruptor de interrupción de desbordamiento de PCA)

CCAPM0 EQU 0DAH; 7-()-6-ECOM0 (interruptor de comparación)-5-CAPP0 (captura del borde superior)-4-CAPN0 (captura del borde inferior)-3-MAT0 (comparación)-2-TOG0 (salida de pulso) )-1-PWM0 (salida PWM)-0-ECCF0 (interruptor de interrupción del módulo)

CCAPM1 EQU 0DBH; módulo 0010000x--captura de flanco ascendente de 16 bits 0100100x--temporizador de software de 16 bits

CCAPM2 EQU 0DCH; en funcionamiento 0001000x--captura de borde inferior de 16 bits 0100110x--salida de pulso de 16 bits

C

CAPM3 EQU 0DDH; Modo 0011000x--captura de borde superior e inferior de 16 bits 01000010--salida PWM de 8 bits

CL EQU 0E9H Temporizador PCA inferior 8 bits

CH EQU 0F9H; ; sincronización PCA Los 8 bits superiores del registro

CCAP0L EQU 0EAH

CCAP0H EQU 0FAH

CCAP1L EQU 0EBH los 8 bits inferiores de la captura PCA; registro de comparación

CCAP1H EQU 0FBH; captura PCA/registro de comparación alto 8 bits

CCAP2L EQU 0ECH

CCAP2H EQU 0FCH

CCAP3L EQU 0EDH

CCAP3H EQU 0FDH

PCA_PWM0 EQU 0F2H ( combinado con CCAP0H para formar un número de 9 dígitos) -0-EPC0L (combinado con CCAP0L para formar un número de 9 dígitos)

PCA_PWM1 EQU 0F3H el registro PWM y CCAP1L/H forman un número de 9 dígitos; número

PCA_PWM2 EQU 0F4H

PCA_PWM3 EQU 0F5H

;******************

;***Configuración del bus SPI****

EADC_SPI BIT IE.5; Interruptor de interrupción para SPI\ADC***

SPCTL EQU 85H; SSIG (función de pin SS)-6-SPEN (interruptor SPI)-5-DORD (dirección de datos)-4-MSTR (modo maestro-esclavo)-3-CPOL (dirección del reloj)-2-CPHA (fase del reloj)-1 -SPR1 (frecuencia de reloj)-0-SPR0 (frecuencia de reloj)

SPSTAT EQU 84H; 7-SPIF (transmisión SPI completada)-6-WCOL (indicador de conflicto de escritura)

SPDAT EQU 86H; caché de datos SPI

; AUXR EQU 8EH; 3 -ESPI (interruptor de interrupción SPI)

;**************** **

;****Configuración de conversión AD** **

; EADC_SPI BIT IE.5; SPI\ADC*** interruptor de interrupción

ADC_CONTR EQU 0C5H; 7-ADC_POWER (interruptor de alimentación ADC)-6-SPEED1 (velocidad de conversión)-5-SPEED0 (velocidad de conversión)-4-ADC_FLAG (final de conversión)-3-ACD_START (inicio de conversión)-2-CHS2 (canal )-1-CHS1 (canal)-0-CHS0 (canal)

ADC_DATA EQU 0C6H; 8 bits altos de datos de resultado de conversión (00000000)

ADC_LOW2 EQU 0BEH; de datos de resultado de conversión (xxxxxx00)

; AUXR EQU 8EH; 4 -EADCI (interruptor de interrupción AD)

;*************** ***

;***Configuración de ISP/IAP** **

ISP_DATA EQU 0E2H; registro de datos de ISP

ISP_ADDRH EQU 0E3H; alto 8 bits

ISP_ADDRL EQ

U 0E4H; 8 bits inferiores del registro de dirección ISP

ISP_CMD EQU 0E5H; operación ISP (00H-ninguna 01H-lectura 02H-escritura 03H-borrado de sector)

ISP_TRIG EQU 0E6H; disparador (escriba 46H primero, luego B9H)

ISP_CONTR EQU 0E7H; 7-ISPEN (interruptor ISP)-6-SWBS (selección de área de inicio)-5-SWRST (restablecimiento de software)-4-CMD_FALL (ISP falla)-3-1(1)-2-WT2(tiempo de espera)-1-WT1(tiempo de espera)-0-WT0(tiempo de espera)

;****** *** ********

;****Configuración de vigilancia****

WDT_CONTR EQU 0E1H; 7-WDT_FLAG (desbordamiento de WDT)- 6-()- 5-EN_WDT (cambio WDT)-4-CLR_WDT (WDT borrado a 0)-3-IDLE_WDT (recuento inactivo)-2-PS2 (división de frecuencia)-1-PS1 (división de frecuencia)-0-PS0 (división de frecuencia)

;******************

INICIAL:; Inicialización

; MOV A, WDT_CONTR;Watchdog

p>

;RRC A

;JC WDT_RESET; ;Restablecimiento de vigilancia

CLR DIS_EA

CLR DIS_DAT

CLR DIS_CLK

LED CLR

; *****Inicialización SPI*****

; SPCTL EQU 85H; -SPEN (interruptor SPI)-5-DORD (dirección de datos)-4-MSTR (modo maestro-esclavo)-3-CPOL (dirección del reloj)-2-CPHA (fase del reloj)- 1-SPR1 (frecuencia del reloj)-0 -SPR0 (frecuencia de reloj)

; MOV SPCTL, #11110001B; el pin SS no es válido, se permite SPI, bit bajo primero, host, CLK es bajo, muestreo de flanco ascendente, 18000/16=1125KHz

p>

; MOV SPCTL, #11110011B; el pin SS no es válido, se permite SPI, bit bajo primero, host, CLK es bajo, muestreo de flanco ascendente, 280/4 KHz

; 11000000B ; Borrar interrupción

;******************

;****Inicialización del puerto serie** ***** *

; MOV PCON, #80H; SMOD=1 X2

; MOV SCON, #50H; Modo de puerto serie 1 (10 bits)

; SCON, #0D0H; modo de puerto serie 3 (11 bits)

MOV SCON, #00H; modo de puerto serie 0 (cambio de serie de 8 bits)

MOV TMOD, #20H; T1 es una reinstalación de 8 bits

MOV TH1, #0FDH

; 4800PTS 11.0592M (12T)

; MOV TL1, #0FAH

;

************************

p>

;************************

;****Salida borrada******* ****

; WDT_RESET: ; Restablecimiento del mecanismo de vigilancia

; MOV WDT_CONTR, #00110101B; 1.365s

p>

; MOV WDT_CONTR, #00110110B; Alimenta al perro 2.6s

*****Configuración de dirección de hardware*****

; MOV IP, #01H; *--PPCA_LVD--PADC_SPI--PS--PT1--PX1--PT0--PX0 prioridad de primer nivel

CLR TI

CLR RI

; SETB ES

; SETB TR1

; SETB TR0

; >SETB IT0

SETB EX0

SETB IT1

SETB EX1

SETB EA

;;-- ------- ---------------------

RET

INT0_INT:

LCALL SAVE_DATA

RET

;****************************** ************ ***********

INT1_INT:

LCALL SAVE_DATA

RET

PANTALLA:

MOV DPTR, #LEDTAB

MOV A, DIS_DATA1

MOVC A, @A DPTR

; MOV SBUF, A

LCALL DIS_SEND

; JNB TI, $

; p>

MOVC A, @A DPTR

;CPL A

;MOV SBUF,A

LCALL DIS_SEND

; JNB TI,$

; CLR TI

MOV A, DIS_DATA3

MOVC A, @A DPTR

;

LCALL DIS_SEND

JNB TI, $

CLR TI

SETB DIS_EA

MOV R4, #255

DJNZ R4, $

CLR DIS_EA

RET

DIS_SEND:

MOV R3, #8

DIS_RR:

p>

CLR DIS_CLK

MOV R4, #255

DJNZ R4, $

RRC A

MOV DIS_DAT, C

MOV R4, #255

DJNZ R4, $

SETB DIS_CLK

MOV R4, #255

DJNZ R4, $

DJNZ R3, DIS_RR

RET

;Cuando el bit bajo se envía primero:

LEDTAB: ;*** Yang (estándar)

DB 03H, 9FH, 25H, 0DH, 99H, 49H, 41H , 1FH, 01H, 09H, 11H, 0C1H, 63H, 85H, 61H, 71H

; , 0CH, 98H, 48H, 40H, 1EH, 00H, 08H, 10H, 0C0H, 62H, 84H, 60H, 70H

; 8. 9 . B. C. D. E. F.

ADD_ONE_BIT:

-----------

INC DIS_DATA1

MOV A, DIS_DATA1

CJNE A, #10, DATA_ADD_END

MOV DIS_DATA1, #0

INC DIS_DATA2

MOV A, DIS_DATA2

CJNE A, #10, DATA_ADD_END

MOV DIS_DATA2, #0

INC DIS_DATA3

MOV A, DIS_DATA3

CJNE A, #10, DATA_ADD_END

MOV DIS_DATA3, #0

LCALL SAVE_DATA

DATA_ADD_END:

;LCALL SAVE_DATA

PANTALLA DE LLAMADA

RET

;*************************** **** *******************

CLEAR_DATA:

;---------- -

MOV DIS_DATA1, #0

MOV DIS_DATA2, #0

MOV DIS_DATA3, #0

MOV DPTR, #2800H

LCALL EEPROM_ERASE; Borra el sector interno de EEPROM

MOV DPTR, #2A00H

LCALL EEPROM_ERASE; Borra el sector interno de EEPROM

MOV DPTR; , # 2800H

MOV A, #0A5H

LCALL EEPROM_WRITE

; LCALL SAVE_DATA

LCALL DISPLAY

RET