#include <inttypes.h>
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/iom32.h>
#include <avr/interrupt.h>
#include <string.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "HD44780.h"
//definicje zmiennych
volatile int ms, s, m, h, znacznik;
char buf[256];
int aa, bb, cc;
int main(void)
{
//ustawienia portów
PORTA=0x00;
DDRA=0xFF;
PORTB=0xff;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x10;
PORTD=0x00;
// Timer/Counter 0 initialization
TCCR0=0x02; //2 4=preskaler 256
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x02; // 02 = podzial przez 8
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x2C; //podzial na 32
TCNT2=0x00; //9c
OCR2=0x7C;
// External Interrupt(s) initialization
GICR|=0x40;
MCUCR=0x03; //3 zbocze narastajace INT0 generuje przerwani
MCUCSR=0x00;
GIFR=0x40;
h=56;
sprintf(buf,"czas-> %d:%02d:%02d ",h,m,s);
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
LCD_Initalize();
LCD_GoTo(0,1);
LCD_WriteText(buf);
// LCD_init();
//LCD_xy (0,0);
GIMSK |=_BV(6);//odblokowanie przerwania INT0
GICR |=_BV(6);
TIMSK=0xC5;
sei();
while(1){
if(znacznik>0){
//LCD_xy(0,1);
sprintf(buf,"czas-> %d:%02d:%02d ",h,m,s);
//LCD_putstr(buf);
znacznik=0;
}
}//koniec while(1)
}//end main
robie run... dochodzi do linii za //!!!!! z funkcja LCD_Initalize(); i tam sobie stoi...
void LCD_Initalize(void)
{
unsigned char i;
LCD_DB4_DIR |= LCD_DB4; // Konfiguracja kierunku pracy wyprowadzeń
LCD_DB5_DIR |= LCD_DB5; //
LCD_DB6_DIR |= LCD_DB6; //
LCD_DB7_DIR |= LCD_DB7; //
LCD_E_DIR |= LCD_E; //
LCD_RS_DIR |= LCD_RS; //
LCD_RW_DIR |= LCD_RW; //
_delay_ms(15); // oczekiwanie na ustalibizowanie się napiecia zasilajacego
LCD_RS_PORT &= ~LCD_RS; // wyzerowanie linii RS
LCD_E_PORT &= ~LCD_E; // wyzerowanie linii E
LCD_RW_PORT &= ~LCD_RW;
for(i = 0; i < 3; i++) // trzykrotne powtórzenie bloku instrukcji
{
LCD_E_PORT |= LCD_E; // E = 1
_LCD_OutNibble(0x03); // tryb 8-bitowy
LCD_E_PORT &= ~LCD_E; // E = 0
_delay_ms(5); // czekaj 5ms
}
LCD_E_PORT |= LCD_E; // E = 1
_LCD_OutNibble(0x02); // tryb 4-bitowy
LCD_E_PORT &= ~LCD_E; // E = 0
_delay_ms(1); // czekaj 1ms
LCD_WriteCommand(HD44780_FUNCTION_SET | HD44780_FONT5x7 | HD44780_TWO_LINE | HD44780_4_BIT); // interfejs 4-bity, 2-linie, znak 5x7
LCD_WriteCommand(HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_OFF); // wyłączenie wyswietlacza
LCD_WriteCommand(HD44780_CLEAR); // czyszczenie zawartosći pamieci DDRAM
LCD_WriteCommand(HD44780_ENTRY_MODE | HD44780_EM_SHIFT_CURSOR | HD44780_EM_INCREMENT);// inkrementaja adresu i przesuwanie kursora
LCD_WriteCommand(HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_ON | HD44780_CURSOR_OFF | HD44780_CURSOR_NOBLINK); // włącz LCD, bez kursora i mrugania
}
ps.
jest w ogole w debuggerze mozliwosc recznego zmieniania wartosci zmiennych ? ( podejrzec wartosc mozna...)[code]
Dodano po 2 [godziny] 59 [minuty]: no to sobie sam odpowiem... zatrzymywalo sie bo jest zmienna zmieniana sprzetowo przez LCD.. nie ma odpowiedzi z LCD to zmienna sie nie zmienila.. .
i tak da sie zmieniac wartowsci zmiennych w watchu
