'--------------------------------------------------------------------------' ' Testtool.bas ' ' 2006 ,Pollin Electronic ' ' Freeware ' '--------------------------------------------------------------------------' ' ' 'Pollin Electronic Atmel-Evaluation-Board ' 'Bestellnummer: 810022 ' 'Testprogramm für ATmega16 ' 'Der gesendete Text kann mit dem Hyperterminal von Windows angezeigt werden' ' 'Einstellungen am Hyperterminal: ' ' Bits pro sekunde: 9600 ' ' Datenbits : 8 ' ' Parität : keine ' ' Stoppbits : 1 ' ' Flusssteuerung : keine ' ' ' '--------------------------------------------------------------------------' $regfile = "m32def.dat" 'definieren des verwendeten Chips $crystal = 1000000 'definieren des verwendeten externen Quarz (8MHz) $baud = 1200 'Baudrate für UART Dim A As Byte 'dimensionieren der verwendeten Variablen Dim B As Byte Ddrd = &B11100000 'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang) Portd = &B00000000 'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level) Main: 'Hauptprogramm Do 'Anfang der Schleife If Pind.2 = 1 Then 'Wenn an Pin 2 von Port D ein high level anliegt, dann... Toggle Portd.5 '...setze Pin 5 von Port D von high auf low oder umgekehrt Bitwait Pind.2 , Reset 'warte bis an Pin 2 von Port D wieder ein low level anliegt End If 'Ende der Bedingung If Pind.3 = 1 Then 'Wenn an Pin 3 von Port D ein high level anliegt, dann... Toggle Portd.6 '...setze Pin 6 von Port D von high auf low oder umgekehrt Bitwait Pind.3 , Reset 'warte bis an Pin 3 von Port D wieder ein low level anliegt End If 'Ende der Bedingung If Pind.4 = 1 Then 'Wenn an Pin 2 von Port D ein high level anliegt, dann... Gosub Beep '...gehe zum Untermenü "Beep" Gosub Textausgabe '...gehe zum Untermenü "Textausgabe" Bitwait Pind.4 , Reset 'warte bis an Pin 4 von Port D wieder ein low level anliegt End If 'Ende der Bendingung Loop 'zum Anfang der Schleife Beep: 'Untermenü "Beep" Portd.7 = 1 'setzte den Pin 7 von Port D auf high Waitms 500 'Warte 500 ms Portd.7 = 0 'setzt den Pin 7 von Port D auf low Return 'zurück zum Hauptmenü Textausgabe: 'Untermenü "Textausgabe" Print "Atmel-Evaluation-Board" 'Sende den Text in den Anführungszeichen über RS232 zum PC Return 'zurück zum Hauptmenü ############## => /* * AVRGCC1.c * * Created: 03.02.2012 17:51:19 * Author: loetbrutzel */ #define F_CPU 16000000UL #include #include #include void uart_init(void); // a. Deklaration der primitiven Ausgabefunktion int uart_putchar(char c, FILE *stream); // b. Umleiten der Standardausgabe stdout (Teil 1) static FILE mystdout = FDEV_SETUP_STREAM( uart_putchar, NULL, _FDEV_SETUP_WRITE ); // c. Definition der Ausgabefunktion int uart_putchar( char c, FILE *stream ) { if( c == '\n' ) uart_putchar( '\r', stream ); loop_until_bit_is_set( UCSRA, UDRE ); UDR = c; return 0; } void uart_init(void) { /* hier µC spezifischen Code zur Initialisierung */ /* des UART einfügen... s.o. im AVR-GCC-Tutorial */ // Beispiel: // // myAVR Board 1.5 mit externem Quarz Q1 3,6864 MHz // 9600 Baud 8N1 #define UART_BAUD_RATE 2400 // Hilfsmakro zur UBRR-Berechnung ("Formel" laut Datenblatt) #define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1) UCSRB |= (1<> 8 ); UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ); } extern void Beep ( void ); extern void init ( void ); extern void Textausgabe ( void ); void init( void ) { DDRD = 0x7; /* PD2 bis PD4 als Eingaenge */ PORTD = 0x0; uart_init(); // b. Umleiten der Standardausgabe stdout (Teil 2) stdout = &mystdout; } int main(void) { init(); while( 1 ) { if ( PIND & ( 1 << PD2) ) { //PORTD |= (1 << PD5); // setzt Bit 5 an PortD auf 1 PORTD ^= (1<