Отговори на тема  [ 4 мнения ] 
Главоболия с ПИК 
Автор Съобщение
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Нед Сеп 17, 2006 12:00 pm
Мнения: 450
Местоположение: Plovdiv
Мнение Главоболия с ПИК
Здравейте,
проблемът е следния:
Като се изпълни следния код вместо да бъдат в "1" RTS и PTT, "светва" само PTT. Ако него не го установявам, то RTS си седи в "1", както трябва да бъде. Не мога да разбера къде е грешката, преди това уж изключвам компараторите? Чипът е PIC16F628A.

Код:
;=============================================================================
;                  Konfigurirane
;=============================================================================
            processor 16f628A
            #include <p16f628A.inc>       
            __CONFIG (_CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _WDT_OFF)         
;=============================================================================

#define     RTS         PORTA,3     ;izhod za podavane na zaqvka za predavane po RS232
#define     PTT         PORTA,7     ;izhod za vkliuchvane na radioto
;================================================================           
;           makrosi, izpolzvani za izbor na banka   
;================================================================       
Bank0       MACRO
            bcf         STATUS,RP0
            bcf         STATUS,RP1
            ENDM
           
Bank1       MACRO
            bsf         STATUS,RP0
            bcf         STATUS,RP1
            ENDM
           
Bank2       MACRO
            bcf         STATUS,RP0
            bsf         STATUS,RP1
            ENDM
           
Bank3       MACRO
            bsf         STATUS,RP0
            bsf         STATUS,RP1
            ENDM
;==================================================================
;                   nachalo na programata
;==================================================================
            org         0
            goto        Main
;vektor na prekasvane:
            org         0x04
            goto        Interrupt
;=======================================           
;              Inicializaciq
;========================================           
Main:
            Bank1
            movlw       B'11000100' ;delitel za TMR0 - 1:32, pull-up zabraneni
            movwf       OPTION_REG
            Bank0
;nulirane na portovete
            clrf        PORTA
            clrf        PORTB      
            movlw       0x07        ;izkliuchvane na komparatorite
            movwf       CMCON
;konfigurirane na vhodove/izhodi:
            Bank1
            movlw       B'00110010'
            movwf       TRISA
            movlw       B'11111011'       
            movwf       TRISB
            movlw       B'11010000' ;bit 6 -> razreshava prekusvaniq ot periferiqta
            movwf       INTCON
            clrf        OutCounter
            clrf        OutGetIndex
            clrf        OutPutIndex
            clrf        tempOut
            clrf        tempOut+1
            Bank0         
            clrf        T1CON
            clrf        PORTA             
            clrf        FlagRegister
            clrf        cntD
            clrf        InCounter
            clrf        InPutIndex
            clrf        InGetIndex
            clrf        tempIn
            clrf        tempIn+1
            Bank1
            movlw       D'25'
            movwf       SPBRG
            bsf         TXSTA,BRGH
            bcf         TXSTA,SYNC
            Bank0
            bsf         RCSTA,SPEN           
            Bank1
            bsf         TXSTA,TX9
            bsf         TXSTA,TXEN           
             
            Bank0
            bsf         RCSTA,CREN
            Bank1
            bsf         PIE1,RCIE
            Bank0
            bsf         TOE
            movlw       5
            movwf       USART_send_Counter
            movwf       USART_receive_Counter
            movlw       8
            movwf       count_8                                                     
              movlw       0xFF
   call        Send_Char
           ;********************
            bsf         RTS
            bsf         PTT
            goto        $
            ;******************


Чет Авг 23, 2007 12:03 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
пробвай вместо
bsf RTS
bsf PTT

movlw 0bxxxxxxx
iorwf porta,1

Проблема мяза на прословутата RMW (read-modify-write) особеност на 16-та серия :idea:


Чет Авг 23, 2007 12:32 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Нед Ное 28, 2004 10:02 pm
Мнения: 141
Местоположение: София
Мнение 
Не знам как седи въпроса с F628, но ако имаш аналогови входове - инициализирай ADCON0/1 - по дифолт висят на аналогови, вместо на цифрови. Получавал съм твоя 'ефект' на 12F675 точно от тая работа - вдигаш един пин - ок, вдигаш втория и първия се сваля сам... 8O


Пет Авг 24, 2007 12:11 pm
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Нед Сеп 17, 2006 12:00 pm
Мнения: 450
Местоположение: Plovdiv
Мнение 
Оправи се проблемът! :D :D :D
При този контролер на порт А аналоговата периферия е само компаратори. Тях ги изключвам, обаче това явно не е решение на проблема. Прочетох една статия от микрочип, където обясняват този проблем, а по-точно операциите четене -промяна -запис, както каза setoy. Там пишеше, че когато следват непосредствено инструкции от вида bsf PORTA,3 bsf PORTA,6 при втората може да се нулира извод 3, защото има някакъв капацитет, който започва да се зарежда след първата интрукция, а при втората се прочита порта, модифицира се и се записва, обаче, след като извод 3 не е достигнал още високо състояние ще бъде прочетен като 0 и след това така ще бъде записан.
При мен специално не беше точно капацитетът причината, защото сложих закъснение от половин секунда и положението си беше същото. Просто е най-добре като ще се работи с тоя порт А да се държи състоянието му в една променлива и като се прави модификация да се пипат нейните битове и после да се записва цялата на порта. Тогава изчезва този проблем. Най-добре е ако може да се ползват като входове изводите на порт А.


Пет Авг 24, 2007 1:24 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 4 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни