0

我是编程新手,我正在尝试用 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++;
    }
}

非常感谢您的帮助感谢英语不好。

4

0 回答 0