|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:37 am
|
Страница 1 от 1
|
[ 4 мнения ] |
|
| Автор |
Съобщение |
|
MidNighT_SpiRiT
Ранг: Напреднал
Регистриран на: Нед Сеп 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 |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
пробвай вместо
bsf RTS
bsf PTT
movlw 0bxxxxxxx
iorwf porta,1
Проблема мяза на прословутата RMW (read-modify-write) особеност на 16-та серия 
|
| Чет Авг 23, 2007 12:32 pm |
|
 |
|
zmej
Ранг: Новодошъл
Регистриран на: Нед Ное 28, 2004 10:02 pm Мнения: 141 Местоположение: София
|
Не знам как седи въпроса с F628, но ако имаш аналогови входове - инициализирай ADCON0/1 - по дифолт висят на аналогови, вместо на цифрови. Получавал съм твоя 'ефект' на 12F675 точно от тая работа - вдигаш един пин - ок, вдигаш втория и първия се сваля сам... 
|
| Пет Авг 24, 2007 12:11 pm |
|
 |
|
MidNighT_SpiRiT
Ранг: Напреднал
Регистриран на: Нед Сеп 17, 2006 12:00 pm Мнения: 450 Местоположение: Plovdiv
|
Оправи се проблемът!
При този контролер на порт А аналоговата периферия е само компаратори. Тях ги изключвам, обаче това явно не е решение на проблема. Прочетох една статия от микрочип, където обясняват този проблем, а по-точно операциите четене -промяна -запис, както каза setoy. Там пишеше, че когато следват непосредствено инструкции от вида bsf PORTA,3 bsf PORTA,6 при втората може да се нулира извод 3, защото има някакъв капацитет, който започва да се зарежда след първата интрукция, а при втората се прочита порта, модифицира се и се записва, обаче, след като извод 3 не е достигнал още високо състояние ще бъде прочетен като 0 и след това така ще бъде записан.
При мен специално не беше точно капацитетът причината, защото сложих закъснение от половин секунда и положението си беше същото. Просто е най-добре като ще се работи с тоя порт А да се държи състоянието му в една променлива и като се прави модификация да се пипат нейните битове и после да се записва цялата на порта. Тогава изчезва този проблем. Най-добре е ако може да се ползват като входове изводите на порт А.
|
| Пет Авг 24, 2007 1:24 pm |
|
|
|
Страница 1 от 1
|
[ 4 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|