R
richwms
Guest
Eu tenho um problema com o código de interromper meu programa.A primeira vez que eu jogar interromper um interruptor, tudo funciona bem.No entanto, quando eu jogar o interruptor uma segunda vez, a interrupção não ocorre.O que estou ausente?Qualquer ajuda seria muito apreciada.
Aqui está o código assembly:
;************************************************* *********************
; Este arquivo é um modelo para a montagem básica código código geração *
; Sobre a PICmicro PIC16F84A.Este arquivo contém o código básico *
; Alicerces para assentar.*
*;
; Se interrupções não são utilizados todos os códigos apresentados entre o ORG *
; 0x004 directiva eo rótulo principal podem ser removidos.Além disso *
; Atribuições para a variável 'w_temp' e 'status_temp' pode *
; Ser removido.*
*;
; MPASM Consulte o manual do utilizador para obter informações adicionais sobre *
; Características da montadora (Documento DS33014).*
*;
; Consulte a respectiva ficha de PICmicro adicional *
; Informações sobre a instrução set.*
*;
; Modelo arquivo montado com MPLAB V4.00.00 e MPASM V2.20.12.*
*;
;************************************************* *********************
*;
; Filename: contraption.asm *
; Data: 11/26/2008 *
; Arquivo Versão: 1.0 *
; Autor: Richard Williams *
*;
;************************************************* *********************
list p = 16F84A; lista directiva para definir processador
#
include <p16F84A.inc>; processador variável específica definições
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
»; __CONFIG« Directiva é utilizado para inserir os dados de configuração. Asm arquivo.
; O lables na sequência da directiva estão localizados nos respectivos. Inc arquivo.
; Ver respectiva ficha de informações adicionais sobre a configuração palavra.
Erro -302
org 0x00; Isto é onde nós vamos poder-se e redefinir
;******************* CONFIGURAR Constants *******************
INTCON EQU 0x0B; Interrupt Control Register
PORTB EQU 0x06; Porto B registrar endereço
PORTA EQU 0x05; Porta Um registo endereço
TRISA EQU 0x85; TrisA registrar endereço
TRISB EQU 0x86; TrisB registrar endereço
ESTADO EQU 0x03; Status registrar endereço
COUNT1 EQU 0x0c; Esta será a nossa contagem variável
COUNT2 EQU 0x0D; Esta será a nossa contagem variável
COUNT3 EQU 0x0E; Esta será a nossa contagem variável
COUNT4 EQU 0x0F; Esta será a nossa contagem variável
W_TEMP EQU 0x10; temporários para armazenar w registo
S_TEMP EQU 0x11; temporários para armazenar estado registo
goto principal; Ir interromper durante o endereço
;*************** Interromper ROTINA ***************
org 0x04; Isto é onde PC pontos sobre uma interrupção
movwf W_TEMP; Store w registrar em um local temporário
Situação movfw; Conservar no estado w registo
movwf S_TEMP; Store w registo em estado localização temporária
movlw 01h; Set B2 bobina
chamada Delay
movlw 02h; Set A1 bobina
chamada Delay
movlw 04h; Set A2 bobina
chamada Delay
movlw 08h; Set B1 bobina
chamada Delay
movfw S_TEMP; Store estatuto localização temporária no registo W
movwf STATUS; Store w registo em estado registo
movfw W_TEMP; Restaurar w ao valor antes de o interromper
BSF INTCON, 4; Integrado - rb0 Interrupt Enable (1 = activar)
BCF INTCON, 1; Limpar esta bandeira para permitir que mais interrompe
retfie; Saia da rotina interromper
Esta subrotina ;*************** controla a velocidade do motor A *************
Atraso movwf PORTA; Vire na próxima bobina em um automóvel
movlw 0fh
movwf COUNT1
movlw 01h
movwf COUNT2
Loop1 decfsz COUNT1, 1
goto Loop1
decfsz COUNT2, 1
goto Loop1
regresso
;******************* Principal Programa *********************
principal
;******************* Configurar O Interrupt Registos ****
BSF INTCON, 7; GIE - Global interromper permitir (1 = activar)
BSF INTCON, 4; Integrado - rb0 Interrupt Enable (1 = activar)
BCF INTCON, 1; intf - Limpar Bandeira Bit Just In Case
;******************* Configurar O Ports ******************
BSF STATUS, 5; Switch ao Banco 1
movlw 0x01
movwf TRISB; rb0 Definir como entrada
movlw 0x10
movwf TRISA; Defina os primeiros 4 pinos no Porta como saída
BCF STATUS, 5; Volte ao Banco 0
movlw 01h; Set B2 bobina em um automóvel
chamada Delay
movlw 02h; Set A1 bobina
chamada Delay
movlw 04h; Set A2 bobina
chamada Delay
movlw 08h; Set B1 bobina
chamada Delay
Executar ;****************** Motor B Entre Interrompe ***********
Loop
movlw 02h; Set B2 bobina no motor B
chamada Delay2
movlw 04h; Set A1 bobina
chamada Delay2
movlw 08h; Set A2 bobina
chamada Delay2
movlw 10h; Set B1 bobina
chamada Delay2
goto Loop
Esta subrotina ;**************** controla a velocidade do motor B *************
Delay2 movwf PORTB; Vire na próxima bobina no motor B
movlw 0fh
movwf COUNT3
movlw 01h
movwf COUNT4
Loop2 decfsz COUNT3, 1
goto Loop2
decfsz COUNT4, 1
goto Loop2
regresso
efeito,
a Directiva "fim de progra
Aqui está o código assembly:
;************************************************* *********************
; Este arquivo é um modelo para a montagem básica código código geração *
; Sobre a PICmicro PIC16F84A.Este arquivo contém o código básico *
; Alicerces para assentar.*
*;
; Se interrupções não são utilizados todos os códigos apresentados entre o ORG *
; 0x004 directiva eo rótulo principal podem ser removidos.Além disso *
; Atribuições para a variável 'w_temp' e 'status_temp' pode *
; Ser removido.*
*;
; MPASM Consulte o manual do utilizador para obter informações adicionais sobre *
; Características da montadora (Documento DS33014).*
*;
; Consulte a respectiva ficha de PICmicro adicional *
; Informações sobre a instrução set.*
*;
; Modelo arquivo montado com MPLAB V4.00.00 e MPASM V2.20.12.*
*;
;************************************************* *********************
*;
; Filename: contraption.asm *
; Data: 11/26/2008 *
; Arquivo Versão: 1.0 *
; Autor: Richard Williams *
*;
;************************************************* *********************
list p = 16F84A; lista directiva para definir processador
#
include <p16F84A.inc>; processador variável específica definições
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
»; __CONFIG« Directiva é utilizado para inserir os dados de configuração. Asm arquivo.
; O lables na sequência da directiva estão localizados nos respectivos. Inc arquivo.
; Ver respectiva ficha de informações adicionais sobre a configuração palavra.
Erro -302
org 0x00; Isto é onde nós vamos poder-se e redefinir
;******************* CONFIGURAR Constants *******************
INTCON EQU 0x0B; Interrupt Control Register
PORTB EQU 0x06; Porto B registrar endereço
PORTA EQU 0x05; Porta Um registo endereço
TRISA EQU 0x85; TrisA registrar endereço
TRISB EQU 0x86; TrisB registrar endereço
ESTADO EQU 0x03; Status registrar endereço
COUNT1 EQU 0x0c; Esta será a nossa contagem variável
COUNT2 EQU 0x0D; Esta será a nossa contagem variável
COUNT3 EQU 0x0E; Esta será a nossa contagem variável
COUNT4 EQU 0x0F; Esta será a nossa contagem variável
W_TEMP EQU 0x10; temporários para armazenar w registo
S_TEMP EQU 0x11; temporários para armazenar estado registo
goto principal; Ir interromper durante o endereço
;*************** Interromper ROTINA ***************
org 0x04; Isto é onde PC pontos sobre uma interrupção
movwf W_TEMP; Store w registrar em um local temporário
Situação movfw; Conservar no estado w registo
movwf S_TEMP; Store w registo em estado localização temporária
movlw 01h; Set B2 bobina
chamada Delay
movlw 02h; Set A1 bobina
chamada Delay
movlw 04h; Set A2 bobina
chamada Delay
movlw 08h; Set B1 bobina
chamada Delay
movfw S_TEMP; Store estatuto localização temporária no registo W
movwf STATUS; Store w registo em estado registo
movfw W_TEMP; Restaurar w ao valor antes de o interromper
BSF INTCON, 4; Integrado - rb0 Interrupt Enable (1 = activar)
BCF INTCON, 1; Limpar esta bandeira para permitir que mais interrompe
retfie; Saia da rotina interromper
Esta subrotina ;*************** controla a velocidade do motor A *************
Atraso movwf PORTA; Vire na próxima bobina em um automóvel
movlw 0fh
movwf COUNT1
movlw 01h
movwf COUNT2
Loop1 decfsz COUNT1, 1
goto Loop1
decfsz COUNT2, 1
goto Loop1
regresso
;******************* Principal Programa *********************
principal
;******************* Configurar O Interrupt Registos ****
BSF INTCON, 7; GIE - Global interromper permitir (1 = activar)
BSF INTCON, 4; Integrado - rb0 Interrupt Enable (1 = activar)
BCF INTCON, 1; intf - Limpar Bandeira Bit Just In Case
;******************* Configurar O Ports ******************
BSF STATUS, 5; Switch ao Banco 1
movlw 0x01
movwf TRISB; rb0 Definir como entrada
movlw 0x10
movwf TRISA; Defina os primeiros 4 pinos no Porta como saída
BCF STATUS, 5; Volte ao Banco 0
movlw 01h; Set B2 bobina em um automóvel
chamada Delay
movlw 02h; Set A1 bobina
chamada Delay
movlw 04h; Set A2 bobina
chamada Delay
movlw 08h; Set B1 bobina
chamada Delay
Executar ;****************** Motor B Entre Interrompe ***********
Loop
movlw 02h; Set B2 bobina no motor B
chamada Delay2
movlw 04h; Set A1 bobina
chamada Delay2
movlw 08h; Set A2 bobina
chamada Delay2
movlw 10h; Set B1 bobina
chamada Delay2
goto Loop
Esta subrotina ;**************** controla a velocidade do motor B *************
Delay2 movwf PORTB; Vire na próxima bobina no motor B
movlw 0fh
movwf COUNT3
movlw 01h
movwf COUNT4
Loop2 decfsz COUNT3, 1
goto Loop2
decfsz COUNT4, 1
goto Loop2
regresso
efeito,
a Directiva "fim de progra