السلام عليكم
لو سمحتوا عندي مشكله بسيطه وهيه استخدام UART
وهيه ارسال قيم عن طريق سيريل كومنكيشن
وهذا الكوود
ياريت تساعدوني لاني بجد تغلقت فيه
#define F_CPU 10000000UL
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "uart.h"
#define sbi(port, bit) (port) |= (1 << (bit))
#define loop_until_bit_is_clear(sfr, bit) do { } while (bit_is_set(sfr, bit))
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
void initUART()
{
UBRRH =0;
UBRRL = 31; // for baud rate=19200
UCSRC = 0x86; // mode 8N1
UCSRB = 0x18; // enable RX and TX
}
////////////////////////////////////////////////
void my_delay(int w) //Define delay function.
{
int i;
for(i=0; i<= w ; i++)
_delay_ms(1);
}
////////////////////////////////////////////////
void sendByte(char x)
{ while((UCSRA & 0x20)==0 )
; //wait till bit 5 of UCSRA is set check bit 5 (UDRE)
UDR=x;
}
//////////////////////////////////////
//stdout = stdin = &uart_str; // map stdin and stdout to serial port
int main(void)
{
ADMUX= 0b00100000; // chan 0, left adjusted,Vref=5
ADCSRA= 0b10000110; // ADC enabled, pre-scalar 64
DDRA= 0; //PORT A input
DDRB= 0b11111111; //PORT B output
unsigned x; //declare the temprature
unsigned char y; //declare the Humdaity
unsigned char z; //declare the Solar radition
unsigned char w;
unsigned int result;
uart_init();
stdout = stdin = &uart_str;
//uart_init();
while (1)
{
////////////////////////////////////////////////
ADMUX= 0b00100000; // chan 0, left adjusted,Vref=5
ADCSRA = ADCSRA | 0x40 ; // start conversion.
do {
w = ADCSRA & 0x10;
} while (w == 0); // repeat until EOC
result = ADC; // the sampled data is in result
// we can do whatever with the sampled data.
//For now, we will display in on PORTD
result = (result>>8); // truncate from 10 to
x=result;
/////////////////////////////////////////////
ADMUX= 0b00100001; // chan 0, left adjusted,Vref=5
ADCSRA = ADCSRA | 0x40 ; // start conversion.
do {
w = ADCSRA & 0x10;
} while (w == 0); // repeat until EOC
result = ADC; // the sampled data is in result
// we can do whatever with the sampled data.
//For now, we will display in on PORTD
result = (result>>8); // truncate from 10 to
y=result;
///////////////////////////////////////////
ADMUX= 0b00100010; // chan 0, left adjusted,Vref=5
ADCSRA = ADCSRA | 0x40 ; // start conversion.
do {
w = ADCSRA & 0x10;
} while (w == 0); // repeat until EOC
result = ADC; // the sampled data is in result
// we can do whatever with the sampled data.
//For now, we will display in on PORTD
result = (result>>8); // truncate from 10 to
z=result;
///////////////////////////////////////////////////////////
PORTB=x;
my_delay(1000);
PORTB=y;
my_delay(1000);
PORTB=z;
my_delay(1000);
initUART();
while(1){
sendByte(x);
sendByte(y);
sendByte(z);
}
// printf("x= "); //to send the temperature
// printf("y =
"); //to send the Humdaity
// printf("z ="); //to send the Solar radition
//
}
return 0;
}