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() p>
;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****** * p>
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) p>
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******* **** p>
; 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