PIC16F76/73 TMR1 - проблемма
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Hyper Punk 09 июля 2003 г. 15:51

Господа!
Обрабатываю прерывания от TMR1
при инициализации H и L = 0
предделитель на 1:8
по прерыванию генерирую меандр на PORTB 7 и 6
через кадый 10 импульс происходит сбой
и импульс выдается меньше чем нужно:

нужно:
____ ____ ____ ____
| | | | | | |
___| |___| |___| |___|

что на на осцилографе
____ _ ____ ____
| | || | | |
___| |___||___| |___|

и такой хилый каждый ~11-тый

вчем проблемма не понимаю, помогите кто может!
текст проги:

list p=P16F76
errorlevel -302
#include
#include ниже->

;стартовый адрес
ORG 0X00
goto MAIN
ORG 0X04
goto INTERRUPT
;####################################################
ind
BSF PORTB,7 ;Сдесь я смотрю осцилографом
BSF PORTB,6 ;Мигает светодиод
goto out
Timer_1
BCF PIR1,TMR1IF ;Снять флаг прерывания таймера 1
; BTFSC Indication,0
BTFSS PORTB,7
goto ind
BCF PORTB,7
BCF PORTB,6
out
goto exit_INTERRUPT ;Выход

INTERRUPT
BTFSC PIR1,TMR1IF ;Если таймер то
goto Timer_1 ;

;______________________________________________________________
exit_INTERRUPT
;POP
BSF INTCON,GIE ;Разрешить прерывания
goto end_prog ;Выход из прерывания

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MAIN
CLRF INTCON ;Зпретили все прерывания
CLRF T2CON ;Сброс управления TMR2
CLRF T1CON ;Сброс управления TMR1
CLRF TMR2 ;TMR2=0, обнуляем счетчик
CLRF TMR1H ;Очистить TMR1H
CLRF TMR1L ;Очистить TMR1L
CLRF PIR1 ;Сбросили прерывания от п.у.
bank1
CLRF PIE1 ;Зпретили все прерывания от п.у.
MOVLW B'00000100' ;Все (А5,A4,A2)-цифровые,
MOVWF ADCON1 ;(А3,А1,А0)-аналог.
MOVLW B'00001111' ;
MOVWF TRISA ;Порт (A0-A3) на выдачу (A4,A5)-прием
MOVLW B'00000000' ;
MOVWF TRISB ;Порт В на выдачу
MOVLW B'00010011' ;(С0,С1,С4) - на прием
MOVWF TRISC ;Порт C наприемо-передачу
bank0
; MOVLW B'10000001' ;Fosc\32, RA0-канал, Вкл,
; MOVWF ADCON0 ; <- конфигурация АЦП.
; MOVLW B'00000000' ;Делитель 1:1 TMR2 выкл.(10мкС)
; MOVWF T2CON ;
MOVLW D'0' ;65535-62500=3035 (0BDB)h
MOVWF TMR1H ;(0B)h
MOVLW D'0' ;(DB)h
MOVWF TMR1L ;Прерывание каждые 0,1 сек
MOVLW B'00111000' ;Делитель 1:8 TMR1 выкл.
MOVWF T1CON ;
bank1
BSF PIE1,TMR1IE ;Разрешить прерывание от TMR1
BSF INTCON,PEIE ;Разрешить прерывание от п.у.
BSF INTCON,GIE ;Разрешить прерывания вобще
bank0
Initialization
CLRF PORTA
CLRF PORTB
CLRF PORTC

BSF T1CON,TMR1ON ;Включить TMR1


end_prog
END

;Файл с макросами MAC.MAC
; ==================================================
; "МАКРОСЫ"
; ==================================================
subtitle "macro definitions"
page
bank0 MACRO
BCF STATUS, RP0 ;БАНК0
;BCF STATUS, RP1
endm
bank1 MACRO
BSF STATUS, RP0 ;БАНК1
;BCF STATUS, RP1
endm
PUSH MACRO
MOVWF W_TMP
SWAPF STATUS,W
MOVWF STATUS_TMP
endm
POP MACRO
SWAPF STATUS_TMP,W
MOVWF STATUS
SWAPF W_TMP,F
SWAPF W_TMP,W
endm

;=================================================

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru