Red de conocimiento informático - Conocimiento sistemático - Solicitud! !pic16f72 Información china!

Solicitud! !pic16f72 Información china!

Conceptos básicos de programación del microcontrolador de la serie PIC [repost]

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

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

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)

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