MaxPower 0 1 декабря, 2013 Опубликовано 1 декабря, 2013 · Жалоба Обнаружил, что комманда работы с пином PORTXbits.RXn под XC8 действует на весь порт, а не на отдельный вывод. Для примера привел код работы с семисегментным индикаторов на 4-е цифры. #include <xc.h> #define _XTAL_FREQ 1000000 #pragma config WDT=OFF #pragma config OSC=XT #pragma config PWRT=ON #pragma config BOREN=ON void main(void) { TRISD = 0; PORTD=0x00; // индикатор подключен к порту D TRISB = 0; PORTB = 0xFF; // аноды сигментов к порту B while(1){ PORTBbits.RB0 = 0; //сбрасывает 1-й вывод в 0 __delay_ms(500); PORTB = 0xFD; //сбрасывает 2-й вывод в 0 __delay_ms(500); PORTB = 0xFB; //сбрасывает 3-й вывод в 0 __delay_ms(500); PORTB = 0xF7;//сбрасывает 4-й вывод в 0 __delay_ms(500); } } Ниже прикрепил работу в PROTEUS При обращении к выводу 0 через PORTBbits.RB0 = 0 срабатывает весь порт При обращении к выводу 0 через PORTB = 0xFD срабатывает соответствующий вывод Не могу понят как работать с отдельным выводом, а не со всем портом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 1 декабря, 2013 Опубликовано 1 декабря, 2013 · Жалоба Я подобного не припомню. Вроде срабатывало как положено. На реальном чипе используя PICKit 3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxPower 0 1 декабря, 2013 Опубликовано 1 декабря, 2013 · Жалоба Я подобного не припомню. Вроде срабатывало как положено. На реальном чипе используя PICKit 3. К сожалению не имею реального чипа под рукой( Видимо глюки протеуса Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Redguy 0 1 декабря, 2013 Опубликовано 1 декабря, 2013 · Жалоба Хотелось бы увидеть ассемблерный код, сгенерированный компилятором. У меня скомпиленный код содержит следующее: ... BCF 0xF81, 0, ACCESS //сбрасывает 1-й вывод в 0 MOVLW 0xA3 MOVWF 0x5, ACCESS MOVLW 0x55 DECFSZ 0xFE8, F, ACCESS BRA 0x7FBA DECFSZ 0x5, F, ACCESS BRA 0x7FBA MOVLW 0xFD //сбрасывает 2-й вывод в 0 MOVWF 0xF81, ACCESS ... тут четко видно, что прописано обращение к конкретному 0-му биту. никак не ко всему порту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
volodya_t 0 2 декабря, 2013 Опубликовано 2 декабря, 2013 · Жалоба Битовая операция состоит из чтения PORTx, изменения бита и записи , в данном случае работы с портом, в LATx. Для управления портом PIC18 рекомендуют LATx регистр соответствующего порта. Поскольку операции с регистром PORTx связаны с чтением состояния пинов, которое из-за инерционности , конвейера и т.д. может не успевать адекватно отображаться. Представьте возможное поле для ошибок. Кроме того часто возникают жалобы на PROTEUS. Рекомендую заменить обращения на LATxbits.LATxy битовые и LATx регистровые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxPower 0 2 декабря, 2013 Опубликовано 2 декабря, 2013 · Жалоба Битовая операция состоит из чтения PORTx, изменения бита и записи , в данном случае работы с портом, в LATx. Для управления портом PIC18 рекомендуют LATx регистр соответствующего порта. Поскольку операции с регистром PORTx связаны с чтением состояния пинов, которое из-за инерционности , конвейера и т.д. может не успевать адекватно отображаться. Представьте возможное поле для ошибок. Кроме того часто возникают жалобы на PROTEUS. Рекомендую заменить обращения на LATxbits.LATxy битовые и LATx регистровые. Спасибо! Под LAT работает как надо:) Только не очень понятно, зачем вообще в описании на XC8 приводят подобные команды работы с портами, если они работают не адекватно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denim 0 5 декабря, 2013 Опубликовано 5 декабря, 2013 · Жалоба зачем вообще в описании на XC8 приводят подобные команды работы с портами, если они работают не адекватно. и выглядят как г#$но, поскольку RB0=0; тоже работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxPower 0 9 декабря, 2013 Опубликовано 9 декабря, 2013 · Жалоба Проблема с портом A. Не могу считать состояние порта void main(void) { ADCON1=0x07; CMCON=0x07; while(1){ LATAbits.LA0=0; PORTA=0; TRISAbits.RA0=1; PORTAbits.RA0=1; if (PORTAbits.RA0==1){ a=1; } else { a=0; } } return; } Уже бесят меня эти порты(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 9 декабря, 2013 Опубликовано 9 декабря, 2013 · Жалоба Проблема с портом A. Не могу считать состояние порта void main(void) { ADCON1=0x07; CMCON=0x07; while(1){ LATAbits.LA0=0; PORTA=0; TRISAbits.RA0=1; PORTAbits.RA0=1; if (PORTAbits.RA0==1){ a=1; } else { a=0; } } return; } Уже бесят меня эти порты(( ANSEL = 0; было до этого? Они бай дефоулт в аналоговом моде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxPower 0 9 декабря, 2013 Опубликовано 9 декабря, 2013 · Жалоба ANSEL = 0; было до этого? Они бай дефоулт в аналоговом моде. #include <htc.h> #define _XTAL_FREQ 8000000 #pragma config WDT=OFF //????????? WD #pragma config OSC=HS //??????? ????????? #pragma config PWRT=ON //??????? ????????? #pragma config BOREN=ON //??????? ????????? #pragma ANSEL0=0; int a; void main(void) { ADCON1=0x07; // CMCON=0x07; while(1){ LATAbits.LA0=0; PORTA=0; TRISA=0xcf; ; a=PORTAbits.RA0; } return; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 9 декабря, 2013 Опубликовано 9 декабря, 2013 · Жалоба A что, можно в #pragma? Я прямо в коде писал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxPower 0 9 декабря, 2013 Опубликовано 9 декабря, 2013 · Жалоба ANSEL = 0; было до этого? Они бай дефоулт в аналоговом моде. В даташите ничего не нашел об ANSEL A что, можно в #pragma? Я прямо в коде писал Я просто попробывал)) компилятор прагму такую не знает, а в коде выдает ошибку, что не знает такой идентификатор( Программирую pic18F4520( может кто поможет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 9 декабря, 2013 Опубликовано 9 декабря, 2013 · Жалоба A. У меня другой чип был Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bywanted 0 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Попробуй так. вместо ADCON1 = 0x07; ADCON1 = 0x0F; Страница 224 в мануале. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться