📄 main.c.bak
字号:
#include <avr/interrupt.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/boot.h>
#include <util/twi.h>
#include <avr/wdt.h>
#include <stdio.h>
#include <stdlib.h>
//#inclide <marco.h>
//#define FOSC 7372800
//#define BAUD 115200
#define FOSC 8000000
#define BAUD 38400
//#define BAUD 19200
#define Red_Led_on() (PORTD &= ~_BV(PD7))
#define Red_Led_off() (PORTD |= )_BV(PD7))
#define Green_Led_on() (PORTD &= ~_BV(PD6))
#define Green_Led_off() (PORTD |= ~_BV(PD6))
#define TEST_BIT(value, bitmask) (((value) & (1<<bitmask)) == (1<<bitmask))
#define SET_BIT(value, bitmask) (value |= (1<<bitmask))
#define CLEAR_BIT(value, bitmask) (value &= ~(1<<bitmask))
#define BIT0 0
#define BIT1 1
#define BIT2 2
#define BIT3 3
#define BIT4 4
#define BIT5 5
#define BIT6 6
#define BIT7 7
//#define MCU_MEGA8
volatile unsigned char g_ucSerialDataBuf;
volatile unsigned char g_ucByteFlag0;
#define serial_active_flag BIT0
void port_init(void)
{
DDRD = 0xff;
PORTD = 0x00;
DDRC = 0xff;
PORTC = 0x00;
DDRB = 0xff;
PORTB = 0x00;
}
void PutChar(unsigned char send_char)
{
#ifdef MCU_MEGA8
cli();
while(!(UCSRA&(1<<UDRE)));
UDR = send_char;
while(!(UCSRA&(1<<UDRE)));
sei();
#else
cli();
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = send_char;
while(!(UCSR0A & (1<<UDRE0)));
sei();
#endif
}
#ifdef MCU_MEGA8
ISR(USART_RXC_vect)
{
if(!TEST_BIT(g_ucByteFlag0, serial_active_flag))
{
SET_BIT(g_ucByteFlag0, serial_active_flag);
g_ucSerialDataBuf = UDR;
}
}
#else
ISR(USART_RX_vect)
{
if(!TEST_BIT(g_ucByteFlag0, serial_active_flag))
{
SET_BIT(g_ucByteFlag0, serial_active_flag);
g_ucSerialDataBuf = UDR0;
}
}
#endif
void uart_init(void)
{
#ifdef MCU_MEGA8
UCSRB = 0;
UCSRA = 0x00;
UCSRC = (1<<UCSZ1)|(1<<UCSZ0);
UBRRL = (FOSC/16/(BAUD+1))%256;
UBRRH = (FOSC/16/(BAUD+1))/256;
UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
#else
UCSR0B = 0;
UCSR0A = 0x00;
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
UBRR0L = (FOSC/16/BAUD - 1)%256;
UBRR0H = (FOSC/16/BAUD - 1)/256;
UCSR0B = (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0);
#endif
}
void SerailData(void)
{
if(TEST_BIT(g_ucByteFlag0, serial_active_flag))
{
PutChar(g_ucSerialDataBuf);
switch(g_ucSerialDataBuf)
{
case 'a': Red_Led_on();
break;
case 'b': Red_Led_off();
break;
case 'c': Green_Led_on();
break;
case 'd': Green_Led_off();
break;
}
CLEAR_BIT(g_ucByteFlag0, serial_active_flag);
}
}
int main(void)
{
port_init();
uart_init();
g_ucByteFlag0 = 0;
PutChar('O');
PutChar('K');
sei();
while(1)
{
SerailData();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -