Перейти к содержанию

Alewka

Members
  • Постов

    13
  • Зарегистрирован

  • Посещение

Весь контент Alewka

  1. Здравствуйте! Нужна помощь начинающим. Пытаюсь изучить uart но ,что то не понимаю . Почему при первой отправки на мк любого символа , один раз он возвращается а потом идут нули. #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "pin_macros.h" unsigned char data; unsigned long long vrema; unsigned char a=1; #define Pin4 C,4,H #define Pin5 C,5,H #define Pin3 C,3,H #define Pin2 C,2,L #define Pin1 C,1,H #define Pin0 C,0,H unsigned char status, status1; unsigned char *pstatus; unsigned char i = 0; //*** Инициализация UART ***// void uart_init(void) { //скорость обмена данными UBRRH = 0; //старший байт UBRRL = 51; //младший байт //8 бит данных, 1 стоп бит, без контроля четности UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ); //разрешить прием и передачу данных UCSRB = ( 1 <<RXEN )|(1<<RXCIE) |( 1 << TXEN ) | (1<<TXCIE);//|( 1 << UDRIE ) //UCSRB |= (1<<RXCIE) | (1<<TXCIE); //Разрешаем прерывание при передаче DRIVER(Pin4,OUT); DRIVER(Pin5,OUT); DRIVER(Pin3,IN); DRIVER(Pin2,IN); DRIVER(Pin1,IN); DRIVER(Pin0,IN); DRIVER(Pin3,PULLUP); DRIVER(Pin2,PULLUP); DRIVER(Pin1,PULLUP); DRIVER(Pin0,PULLUP); } ISR(USART_RXC_vect) { data=UDR; } /* ISR(USART_TXC_vect){ //UDR = data; } */ ISR( USART_UDRE_vect ) { } //*** Прием данных по UART ***///* /*unsigned char uart_receive(void) { while ( ! ( UCSRA & ( 1 << RXC ))); return UDR; a=2; }*/ //*** Передача данных по UART ***// void uart_transmit( uint8_t data) { while ( ! ( UCSRA & ( 1 << UDRE ))); UDR = data; a=0; } //——————————————— void timer_ini(void) { TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению) TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L) OCR1A = 7812;//OCR1AL = 0b00000000;//OCR1AH = 0b10000000; //записываем в регистр число для сравнения TCCR1B = (1<<CS12)|(1<<CS10)|(1<<WGM12);//установим делитель. // Start Timer1 with prescaler 1024 } ISR (TIMER1_COMPA_vect) { } //*** Главная программа ***// int main(void) { pstatus=&status; DDRD = 0x00; //установим все порты DDRD как входы PORTD = 0x00; //установим логический 0 на все порты DDRD sei();// разрешаем прерывания uart_init(); timer_ini(); while(1) { vrema++; if(vrema>=10000){ a=2; //data++; vrema=0;} if(data==0b00110001) { ON(Pin5); // PORTC |= 1 << 5; //устанавливаем логическую 1 на порт PC5 регистра DDRC data='8'; } if(data==0b00110010) { OFF(Pin5); //PORTC &= ~(1 << 5); //устанавливаем логический 0 на порту PC5 регистра DDRC } if(data==0b00110011) { ON(Pin4); //PORTC |= 1 << 4; //устанавливаем логическую 1 на порт PC4 регистра DDRC } if(data==0b00110100) { OFF(Pin4);//PORTC &= ~(1 << 4); //устанавливаем логический 0 на порту PC4 регистра DDRC } if(a==2){ uart_transmit(data); } } } atmega8 уарт.rar
×
×
  • Создать...