После Atmel SAM7 и AVR перешел на С8051F120, и всё :-) пропало, в проекте подключен LED диcплей на портах P5, P6.Все попытки просто шевелить ногами для контроля LED проходят на УРА , как только делаю это в программе инициализации дисплея с портами непонятно что творится, появляютя левые сигналы, самостоятельно процессор что-то сам делает по всем ногам порта ;-). Вопрос может это проблема переключения страниц SFR? По идее, смена страницы должна осуществлятся автоматически, при обращение к регистрам портов. Думаю что -то неправильно со мной поэтому сильно не пинайте. Даташит прочитан, но боюсь, я ещё не до конца понимаю как всё работает в комплексе. Исходный код , если кому будет интересно.
//OLED PINS sbit OLED_CS = P5^0; sbit OLED_RESET = P5^1; sbit OLED_DC = P5^2; sbit OLED_WR = P5^3; sbit OLED_RD = P5^4; sbit OLED_DATA0 = P5^5; sbit OLED_DATA1 = P5^6; sbit OLED_DATA2 = P5^7; sbit OLED_DATA3 = P6^0; sbit OLED_DATA4 = P6^1; sbit OLED_DATA5 = P6^2; sbit OLED_DATA6 = P6^3; sbit OLED_DATA7 = P6^4;
#define OLED_CS_HIGH OLED_CS = 1; //OLED_CS = 1; #define OLED_CS_LOW OLED_CS = 0; #define OLED_DC_HIGH OLED_DC = 1; #define OLED_DC_LOW OLED_DC = 0; #define OLED_WR_HIGH OLED_WR = 1; #define OLED_WR_LOW OLED_WR = 0;
#define OLED_DATA7_ON OLED_DATA7 = 1; #define OLED_DATA7_OFF OLED_DATA7 = 0;
//---------------------------------------------------------------------- // // Name: OLED_Set_Value // Description: // //---------------------------------------------------------------------- void OLED_Set_Value(unsigned char value) {
// The OLED's data control lines are connected to: // DataBus (LCD): 7 6 5 4 3 2 1 0 // PORTOUT (Micro): P6.4 P6.3 P6.2 P6.1 P6.0 P5.7 P5.6 P5.5
P6 = (P6&0xE0)|(value>>3); P5 = (P5&0x1F)|(value<<4);
}
//---------------------------------------------------------------------- // // Name: OLED_WriteCommand // Description: // //---------------------------------------------------------------------- void OLED_WriteCommand(unsigned char command ) {
OLED_DC_LOW; OLED_CS_LOW; Delayms(5);
OLED_Set_Value(command); Delayms(5);
OLED_WR_LOW; Delay(1); OLED_WR_HIGH; Delay(1); OLED_CS = 1; Delay(5); }
|