Здравствуйте!
Пытаюсь научиться программировать мк, помогите,пожалуйста. Программу пишу в Code Vision v 1.25.5 Pro. МК ATmega 16 частота кварца 11,0592 МГц. Описываю переменную zz как unsigned int, но ее тип char. Почему? И как мне изменить ее тип на unsigned int или на unsigned long int? Заранее благодарен. Вот код программы.
#include ‹mega16.h›
#include ‹delay.h›
// My bits definitions
http://avr123.nm.ru/m8_128.h
#include ‹m8_128.h›
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include ‹lcd.h›
#define FRAMING_ERROR (1‹‹FE)
#define PARITY_ERROR (1‹‹UPE)
#define DATA_OVERRUN (1‹‹OVR)
#define DATA_REGISTER_EMPTY (1‹‹UDRE)
#define RX_COMPLETE (1‹‹RXC)
// USART Receiver buffer
#define RX_BUFFER_SIZE 100
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE‹256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
//++++++++++++++++++++++++++++++++++++++++++++++++
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) {
rx_wr_index=0;
};
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
// Standard Input/Output functions
#include ‹stdio.h›
flash char string_1[]="Prog Start";
flash char string_2[]="The END";
// Declare your global variables here
char sign,x;
int temp;
unsigned int zz;
//++++++++++++++++++++++++++++++++++++++++++++++++
// Главная функция
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x08;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 115200
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x05;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
// lcd_init(16);
// Global enable interrupts
#asm("sei")
// initialize the LCD for
// 16 columns
lcd_init(16);
lcd_gotoxy(5,0);
lcd_putsf("Hello");
lcd_gotoxy(2,1);
lcd_putsf("avr123.nm.r");
lcd_putsf("u");
delay_ms(100);
lcd_clear();
lcd_putchar('F');
lcd_putsf(string_1);
putsf("Hello, world!");
putchar('\n');
printf(string_1);
putchar(71);
printf(string_2);
putchar('\n');
sign='+';
temp=578;
printf("temp = %c%i.%u C\r\n",sign,temp/10,temp%10);
putchar('\n');
putchar('G'); putchar('\n');
putchar(71); putchar('\r');putchar('\n');
putchar(0x47); putchar('\n');putchar('\n');
putchar('F');
putchar('\n');
while(!(UCSRA & (1‹‹UDRE))); UDR = 'G';
while(!(UCSRA & (1‹‹UDRE))); UDR = 71;
while(!(UCSRA & (1‹‹UDRE))); UDR = 0x47;
delay_ms(3);
putchar('\n');
delay_ms(100);
lcd_clear();
lcd_putsf("Click TX window and type keyb.");
while (!(getchar()=='f'));
x=getchar()-48;
zz=x*100;
printf ("x=%d\n",x);
printf ("z=%d\n",zz);
x=getchar()-48;
zz=zz+(x*10);
printf ("x=%d\n",x);
printf ("z=%d\n",zz);
x=getchar()-48;
zz=zz+x;
printf ("x=%d\n",x);
printf ("z=%d\n",zz);
// +++++++++++++++++++++++++++++++++++++++++++++
while (1)
{
putchar(getchar());
};
}