من یه برنامه نوشتم نمی دونم مشکلش کجاست .
[// -------------
// --- usart ---
// -------------
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
//*********************************************
//
// Variables
//
//*********************************************
//current channel
uint8_t ch;
char UsartChar[10];
uint16_t adc_value = 0;
volatile int i = 0;
volatile int j=0;
void USART0_write(unsigned char data);
void USART0_write_int(int intData);
void USART0_init();
void Timer1_init();
//*********************************************
//
// Timer Initialization
//
//*********************************************
ISR(TIMER1_OVF_vect)
{
// reinit counter
TCNT1H = 11;
TCNT1L = 220;
USART0_write_int(i);
i = 0;
}
void Timer1_init() {
// Timer1 settings: ~ 4000000 ticks (1 sec)
TCCR1B = (1 << CS11) | (1 << CS10); // prescaler = 64
// init counter
TCNT1H = 11;
TCNT1L = 220;
TIMSK = (1 << TOIE1); // Timer1 Overflow Interrupt Enable
}
//*********************************************
//
// ADC module Initialization
//
//*********************************************
void adc_init(void) {
//select reference voltage
//AVCC with external capacitor at AREF pin
ADMUX |= (0 << REFS1) | (1 << REFS0);
//set prescaller and enable ADC
ADCSRA |= (1 << ADEN) | (1 << ADIE);//enable ADC with dummy conversion
}
//************************************************** ***************************
//
// ADC single conversion routine
//
//************************************************** ***************************
void adc_start_conversion(uint8_t channel) {
//remember current ADC channel;
ch = channel;
//set ADC channel
ADMUX = (ADMUX & 0xF0) | channel;
//Start conversionio with Interupt after conversion
//enable global interrupts
sei();
ADCSRA |= (1 << ADSC) | (1 << ADIE);
}
//************************************************** ***************************
//
// ADC conversion complete service routine
//
//************************************************** ***************************
ISR(ADC_vect)
{
adc_value = ADCL;
/*shift from low level to high level ADC, from 8bit to 10bit*/
adc_value += (ADCH << 8);
printf("%d", adc_value);
}
//*********************************************
//
// USART Initialization
//
//*********************************************
// USART0 settings: 9600 baud 8-none-1
// !!! warning !!! real baud = 9615, err = 0.1562% !!!
void USART0_init() {
// Set baud rate
UBRRH = 0;
UBRRL = 25;
UCSRA = 0;
// Enable receiver and transmitter
UCSRB = (1 << RXEN) | (1 << TXEN);
// Set frame format
UCSRC = (1 << UCSZ1) | (1 << UCSZ0) | (1 << URSEL);
}
//*********************************************
//
// Usart Write Function
//
//*********************************************
void USART0_write(unsigned char data) {
// Wait for empty transmit buffer
while (!(UCSRA & (1 << UDRE)))
;
// Put data into buffer, sends the data
UDR = data;
}
void USART0_write_int(int intData) {
sprintf(UsartChar, "%d", intData);
for (j = 0; j < 10; j++) {
USART0_write(UsartChar[j]);
}
}
//*********************************************
//
// Usart Read function
//
//*********************************************
unsigned char USART0_read() {
// Wait for data to be received
while (!(UCSRA & (1 << RXC)))
;
// Get and return received data from buffer
return UDR;
}
//*********************************************
//
// AVR Initialization
//
//*********************************************
void init() {
USART0_init();
adc_init();
Timer1_init();
}
int main(void) {
init();
DDRB = 0x00;
sei();
while (1) {
USART0_write_int(131);
i++;
}
}
// --- usart ---
// -------------
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
//*********************************************
//
// Variables
//
//*********************************************
//current channel
uint8_t ch;
char UsartChar[10];
uint16_t adc_value = 0;
volatile int i = 0;
volatile int j=0;
void USART0_write(unsigned char data);
void USART0_write_int(int intData);
void USART0_init();
void Timer1_init();
//*********************************************
//
// Timer Initialization
//
//*********************************************
ISR(TIMER1_OVF_vect)
{
// reinit counter
TCNT1H = 11;
TCNT1L = 220;
USART0_write_int(i);
i = 0;
}
void Timer1_init() {
// Timer1 settings: ~ 4000000 ticks (1 sec)
TCCR1B = (1 << CS11) | (1 << CS10); // prescaler = 64
// init counter
TCNT1H = 11;
TCNT1L = 220;
TIMSK = (1 << TOIE1); // Timer1 Overflow Interrupt Enable
}
//*********************************************
//
// ADC module Initialization
//
//*********************************************
void adc_init(void) {
//select reference voltage
//AVCC with external capacitor at AREF pin
ADMUX |= (0 << REFS1) | (1 << REFS0);
//set prescaller and enable ADC
ADCSRA |= (1 << ADEN) | (1 << ADIE);//enable ADC with dummy conversion
}
//************************************************** ***************************
//
// ADC single conversion routine
//
//************************************************** ***************************
void adc_start_conversion(uint8_t channel) {
//remember current ADC channel;
ch = channel;
//set ADC channel
ADMUX = (ADMUX & 0xF0) | channel;
//Start conversionio with Interupt after conversion
//enable global interrupts
sei();
ADCSRA |= (1 << ADSC) | (1 << ADIE);
}
//************************************************** ***************************
//
// ADC conversion complete service routine
//
//************************************************** ***************************
ISR(ADC_vect)
{
adc_value = ADCL;
/*shift from low level to high level ADC, from 8bit to 10bit*/
adc_value += (ADCH << 8);
printf("%d", adc_value);
}
//*********************************************
//
// USART Initialization
//
//*********************************************
// USART0 settings: 9600 baud 8-none-1
// !!! warning !!! real baud = 9615, err = 0.1562% !!!
void USART0_init() {
// Set baud rate
UBRRH = 0;
UBRRL = 25;
UCSRA = 0;
// Enable receiver and transmitter
UCSRB = (1 << RXEN) | (1 << TXEN);
// Set frame format
UCSRC = (1 << UCSZ1) | (1 << UCSZ0) | (1 << URSEL);
}
//*********************************************
//
// Usart Write Function
//
//*********************************************
void USART0_write(unsigned char data) {
// Wait for empty transmit buffer
while (!(UCSRA & (1 << UDRE)))
;
// Put data into buffer, sends the data
UDR = data;
}
void USART0_write_int(int intData) {
sprintf(UsartChar, "%d", intData);
for (j = 0; j < 10; j++) {
USART0_write(UsartChar[j]);
}
}
//*********************************************
//
// Usart Read function
//
//*********************************************
unsigned char USART0_read() {
// Wait for data to be received
while (!(UCSRA & (1 << RXC)))
;
// Get and return received data from buffer
return UDR;
}
//*********************************************
//
// AVR Initialization
//
//*********************************************
void init() {
USART0_init();
adc_init();
Timer1_init();
}
int main(void) {
init();
DDRB = 0x00;
sei();
while (1) {
USART0_write_int(131);
i++;
}
}









دیدگاه