Solicitud! !pic16f72 Información china!
1. Formato básico del programa
Primero, introduzca dos pseudoinstrucciones:
EQU - pseudoasignación de etiquetas -instrucciones Instrucción
ORG--pseudoinstrucción de definición de dirección
PIC16C5X indica a la computadora de la calculadora que se configure en "1" después de RESET. ORG: pseudoinstrucción de definición de dirección
La PC de la calculadora de instrucciones PIC16C5X se configura en "1" después de RESET, por lo que la dirección de reinicio de varios tipos de chips PIC16C5X es:
PIC16C54 / 55: 1FFH
PIC16C56: 3FFH
PIC16C57/58: 7FFH
En términos generales, los programas fuente PIC no necesitan un formato unificado y se pueden personalizar según el tuyo escrito con estilo. Pero aquí recomendamos un formato conciso y claro como referencia.
TÍTULO Este es...; título del programa
----------------------- --- ------------
; Definición de nombre y definición de variable
---------- ---- --- -----------------------
F0 EQU 0
RTCC EQU 1
PC EQU 2
ESTADO EQU 3
FSR EQU 4
RA EQU 5
RB EQU 6
RC EQU 7
Encantado de conocerte
PIC16C54 EQU 1FFH ; dirección de reinicio del chip
PIC16C56 EQU 3FFH
PIC16C57 EQU 7FFH p>
; -------------------------------- ---------
ORG PIC16C54 GOTO MAIN; Vaya al programa principal en la dirección de reinicio
ORG 0; Comience a almacenar el programa en 0000H
------- - ---------------------------------
; área de subrutina
; -----------------------------------------
RETRASO MOVLW 255
┋
RETLW 0
; ----- --------------
; Área principal del programa
---------- -- ------------------------------
PRINCIPAL
MOVLW B' 00000000 '
TRIS RB ; ha sido definido por la directiva como 6, es decir, puerto B
┋
LOOP
BSF RB , 7 RETRASO DE LLAMADA
BCF RB, 7 RETARDO DE LLAMADA
┋
IR A BUCLE
-------- ; - ----------------------------------
FIN ; >
Nota: La etiqueta MAIN debe estar en la página 0.
2. Conceptos básicos de programación
1) Establezca la dirección de entrada/salida del puerto de E/S
Los puertos de E/S del PIC16C5X son programables bidireccionalmente. Es decir, el programa puede configurar cada línea de E/S individualmente como entrada o salida. Si el valor es "1", se ingresa; si el valor es "0", se emite.
MOVLW 0FH; 0000 1111 (0FH)
Entrada y salida
TRIS 6; Escribe 0FH en W al controlador del puerto B,
; Los 4 bits altos del puerto B se emiten y los 4 bits bajos se ingresan.
MOVLW 0C0H ; 11 000000 (0C0H)
RB4, RB5 salida 0 RB6, RB7 salida 1
2) Compruebe si el registro es cero
Determinar si el contenido de un registro es cero, en realidad es muy simple. Tome el registro F10 como ejemplo:
MOVF 10,1; . F10→F10, el resultado afecta el bit de estado Z marcado como cero:
ESTADO BTFSS, Z; si F10 es cero, salta
GOTO Z=0, es decir, F10 no es cero, ve a la marca NZ en el programa:
┋;Z=1, es decir, controlador F10=0
3) Compara los tamaños de los dos registros
Para comparar los tamaños de dos registros, puede restar primero y luego hacer un juicio basado en el bit de estado C. Tenga en cuenta que si pone el resultado de la resta en W, no afectará los valores originales de los dos registros.
Por ejemplo, compare los tamaños de los registros F8 y F9:
MOVF 8, 0; F8→W
SUBWF 9, 0; F8) →W
ESTADO BTFSC, Z; Determinar si F8=F9 o no
GOTO F8=F9
ESTADO BTFSC, C ; 0
GOTO F9>F8 ; C=1 El resultado de la resta de números positivos, F9>F8
GOTO F9
F9 ; resultado de la resta de números negativos, F9┋
4) Programa que se repite n veces
Si desea que el programa se repita n veces, puede usar un determinado registro como contador. El siguiente ejemplo utiliza F10 como contador para repetir el programa 8 veces.
COUNT EQU 10; Defina F10 como COUNT
┋
MOVLW 8
MOVWF COUNT Loop body
LOOP
┋
DECFSZ COUNT, 1; CUNT se reduce en 1, el resultado es cero y luego salta
┋
DECFSZ COUNT, 1; CUNT se reduce en 1, lo que da como resultado cero. Si el resultado es cero, salta
GOTO LOOP; si el resultado no es cero, continúa el bucle
┋ si el resultado es cero, salta del bucle
;5) "SI...ENTONCES..."
A continuación se muestra un ejemplo del formato "SI X=Y ENTONCES IR A SIGUIENTE".
MOVF X,0; X→W
SUBWF Y,0; Y-W(X)→W
ESTADO BTFSC,Z; X=Y No
IR AL SIGUIENTE; X=Y, saltar al SIGUIENTE.
┋ ; NEXT "El programa mantiene el bucle dentro de un rango determinado. A continuación se muestra un programa del formato "PARA X=0 A 5", donde F10 representa el valor inicial de X y F11 representa el valor final de X.
El programa "FOR...NEXT" hace que el bucle avance dentro de un rango determinado.
INICIO EQU 10
DAEND EQU 11
┋
MOVLW 0
MOVWF INICIO 0 → INICIO ; (F10)
MOVLW 5
MOVWF DAEND ; 5 → DAEND (F11)
MOVWF DAEND 5 → DAEND (F11)
MOVWF DAEND ; 5 → DAEND (F11)
BUCLE
Encantado de conocerte
INCF START, 1 ; p> MOVF START, 0
SUBWF DAEND, 0 ; START=DAEND ?(X = 5 no)
ESTADO BTFSS, Z
GOTO LOOP ;
Cuando el programa de retardo calcula el tiempo de ejecución de la instrucción, es el tiempo de retardo. Si se utiliza un oscilador de 4 MHz, cada ciclo de instrucción es de 1 μS, por lo que el tiempo de instrucción de un solo ciclo es de 1 μS y el tiempo de instrucción de dos ciclos es de 2 μS. En el ejemplo anterior, el tiempo de retardo del bucle LOOP es: (1+2)*102=302 (μS). Insertar instrucciones vacías en el bucle puede ampliar el tiempo de retardo:
MOVLW D'100'
MOVWF 10
LOOP NOP
NOP
NOP
NOP
DECFSZ 10, 1
GOTO LOOP
Encantado de conocerte
Tiempo de retardo = (1+1+1+1+1+2)*102=602 (μS).
Al anidar varios bucles, la latencia se puede ampliar considerablemente. El siguiente ejemplo utiliza 2 bucles para lograr el retardo:
MOVLW D'100'
MOVWF 10
LOOP MOVLW D'16'
MOVWF 11
LOOP1 DECFSZ 11, 1
GOTO LOOP1
DECFSZ 10, 1
GOTO LOOP
¿Estás contento aquí
Tiempo de retraso = 1+1+[1+1+(1+2)*16-1+1+2]*100-1=5201 (μS) p>
11) Uso del contador RTCC
RTCC es un contador de pulsos. Tiene dos fuentes de pulsos de conteo, una es la entrada de señal externa del pin RTCC y la otra es el reloj de comando interno. señal. Se puede seleccionar cualquier fuente de señal como entrada mediante programación, y el RTCC también se puede programar para usarse como temporizador; el programa lee el valor del registro RTCC para calcular el tiempo; Cuando se utiliza el RTCC como temporizador interno, el pin RTCC debe conectarse a VDD o VSS para minimizar la interferencia y el consumo de corriente.
El siguiente programa de ejemplo utiliza RTCC como retardador:
RTCC EQU 1
┋
CLRF RTCC despejado a 0
MOVLW; 07H
OPCIÓN; seleccione el multiplicador preestablecido 1: 256 → RTCC
LOOP MOVLW 255; valor final del recuento RTCC
SUBWF RTCC, 0
ESTADO BTFSS, Z; RTCC=255?
GOTO LOOP
┋
En este programa de retardo, el registro RTCC se incrementa en 1 cada 256 ciclos de instrucción (relación de cruce = 1:256), y el chip usa un oscilador de 4MHz, entonces:
El programa de retardo incrementa el registro RTCC en 1 cada 256 ciclos de instrucción (relación de cruce = 1:256), y el chip usa un oscilador de 4MHz, luego:
El programa de retardo incrementa el registro RTCC en 1 cada 256 ciclos de instrucción (relación de cruce = 1:256) y el chip utiliza un oscilador de 4 MHz.
Tiempo de retardo = 256*256 = 65536 (μS)
RTCC es autooscilante, por lo que el programa puede hacer otras cosas mientras cuenta, siempre y cuando lea cada vez dentro de un tiempo, simplemente verifique su valor de conteo.
12) Direccionamiento del banco de registro (BANCO)
PIC16C54/55/56 tiene 32 registros y solo un banco de registro (BANCO), por lo que no hay problema de direccionamiento del banco de registro y PIC16C57; /58 tiene 80 registros, divididos en 4 bancos de registros (BANCO0-BANCO3). De la descripción de F4 (FSR) se puede ver que el bit6 y el bit5 de F4 son bits de direccionamiento del cuerpo del registro y su correspondencia es la siguiente:
Bit6 Bit5 Dirección física del BANCO
0 0 BANCO0 10H a 1FH
0 1 BANCO1 30H a 3FH
1 0 BANCO2 50H a 5FH
1 1 BANCO3 70H a 7FH
Cuando el chip se enciende mediante RESET, el bit6 y el bit5 de F4 se aleatorizan, mientras que el RESET sin encendido mantiene el estado original.
El siguiente ejemplo escribe datos en los registros 30H y 50H de BANK1 y BANK2. bit5=0 select BANK2
MOVWF 10H ; DATA→50H
En el ejemplo anterior, podemos ver que para leer y escribir el registro en un determinado banco (BANCO), primero necesita operar en el cuerpo direccionando bits en F4. En la operación real, el bit6 y el bit5 de F4 se borran después del reinicio del encendido, apuntan a BANK0 y luego apuntan al cuerpo correspondiente según sea necesario.
Tenga en cuenta que en el ejemplo de escritura del registro 30H (BANK1) y el registro 50H (BANK2), la dirección del registro se escribe como "10H" en la instrucción "MOVWF 10H", no como "MOVWF". como el lector esperaba 10H". En lugar de "MOVWF 30H" y "MOVWF 50H" como esperaban los lectores, ¿por qué?
Repasemos la lista de comandos. En todos los códigos de instrucciones relacionados con registros de PIC16C5X, el bit de direccionamiento de registros solo ocupa 5 bits: fffff, que solo puede direccionar 32 registros (00H-1FH). Por lo tanto, para direccionar 80 registros necesitamos utilizar dos bits de direccionamiento de cuerpo PA1 y PA0.
Cuando configuramos el cuerpo que direcciona los bits PA1 y PA0 para que apunten a un BANCO, la instrucción "MOVWF 10H" es colocar el contenido de W en el registro correspondiente del BANCO (10H, 30H, 50H o 70H). 50H o 70H).
Algunos diseñadores están expuestos al concepto de direccionamiento corporal por primera vez e inevitablemente habrá desviaciones en la comprensión. A continuación se muestran algunos ejemplos:
Ejemplo 2: (Establezca el actual. cuerpo seleccionado a BANK0)
MOVLW 55H
MOVWF 30H ; desea cambiar el registro 55H→30H
MOVLW 66H
MOVWF 50H desea para cambiar el registro 66H → 50H
Es incorrecto pensar que "MOVWF 30H" definitivamente puede poner W en 30H, y "MOVWF 50H" definitivamente puede poner W en 50H. Debido a que el efecto real de estas dos instrucciones es "MOVWF 10H", el motivo se explicó anteriormente. Por lo tanto, el resultado final del programa del Ejemplo 2 es F10H=66H, pero los F30H y F50H reales no se operan.
Sugerencia: Sugerencia: Para que los programas de direccionamiento corporal sean más claros, se recomienda utilizar más definiciones de nombres para escribir programas para que sea menos probable que se confundan. p> A EQU 10H ; BANK0
B EQU 10H ; BANK1
C EQU 10H ; p> FSR EQU 4
Bit6 EQU 6
Bit5 EQU 5
DATOS EQU 55H