我是编程新手,我正在尝试用 C 编写一个计算器。不同之处在于我有一个 ATmega 16,它必须与 Termite 终端通信。我该如何存档?这是我对解决方案的想法
#define F_CPU 8000000UL
#include <avr/io.h>
#include "util/delay.h"
#include "stdio.h"
#include "stdlib.h"
#include "ComSerial.h"
int main(void)
{
int num1,num2;
UART_init(9600);
float result;
UART_init(9600);
char ch;
UART_init(9600);
UART_SendString("\n\t Miguel Bublitz San Román A01658759\n");
UART_SendString("Enter first number: \n");
num1=UART_RxChar();
scanf("%d",&num1);
UART_SendString("Enter second number: \n");
num2=UART_RxChar();
scanf("%d",&num2);
UART_SendString("Choose operation to perform (+,-,*,/,%): \n");
ch=UART_RxChar();
scanf(" %c",&ch);
result=0;
switch(ch)
{
case '+':
result=num1+num2;
break;
case '-':
result=num1-num2;
break;
case '*':
result=num1*num2;
break;
case '/':
result=(float)num1/(float)num2;
break;
case '%':
result=num1%num2;
break;
default:
UART_SendString("Invalid operation.\n");
}
/* Replace with your application code */
while (1)
{
UART_TxChar(result);
_delay_ms(1);
}
}
ComSerial.h 是我自己的库,以下是文件: .h 文件:
extern void UART_init(long USART_BAUDRATE);
extern unsigned char UART_RxChar();
extern void UART_TxChar(char ch);
extern void UART_SendString(char *str);
.c 文件:
#define F_CPU 8000000UL
#include <avr/io.h>
#include "util/delay.h"
#include "stdio.h"
#include "stdlib.h"
//#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
void UART_init(long USART_BAUDRATE);
unsigned char UART_RxChar();
void UART_TxChar(char ch);
void UART_SendString(char *str);
void UART_init(long USART_BAUDRATE)
{
UCSRB |= (1 << RXEN) | (1 << TXEN);/* Turn on transmission and reception */
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);/* Use 8-bit character sizes */
UBRRL = BAUD_PRESCALE; /* Load lower 8-bits of the baud rate value */
UBRRH = (BAUD_PRESCALE >> 8); /* Load upper 8-bits*/
}
unsigned char UART_RxChar()
{
while ((UCSRA & (1 << RXC)) == 0);/* Wait till data is received */
return(UDR); /* Return the byte*/
}
void UART_TxChar(char ch)
{
while (! (UCSRA & (1<<UDRE))); /* Wait for empty transmit buffer*/
UDR = ch ;
}
void UART_SendString(char *str)
{
unsigned char j=0;
while (str[j]!=0) /* Send string till null */
{
UART_TxChar(str[j]);
j++;
}
}
非常感谢您的帮助感谢英语不好。