📄 demo_13_1.c~
字号:
/*********************************************
File name : demo_13_1.c
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <mega16.h>
#include <delay.h>
#define BAUD 9600 //波特率采用9600bps
#define CRYSTAL 4000000 //系统时钟4MHz
//计算和定义波特率设置参数
#define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)(BAUD_SETTING)
// USART控制和状态寄存器的标志位定义
#define RXC 7 // UCSRA位定义
#define TXC 6
#define UDRE 5
#define FE 4
#define DOR 3
#define PE 2
#define U2X 1
#define MPCM 0
#define RXCIE 7 // UCSRB位定义
#define TXCIE 6
#define UDRIE 5
#define RXEN 4
#define TXEN 3
#define UCSZ2 2
#define RXB8 1
#define TXB8 0
#define URSEL 7 // UCSRC位定义
#define UMSEL 6
#define UPM1 5
#define UPM0 4
#define USBS 3
#define UCSZ1 2
#define UCSZ0 1
#define UCPOL 0
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<PE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
flash char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
interrupt [USART_RXC] void usart_rx_isr(void) // USART接收中断服务
{
char status,data;
status = UCSRA;
data = UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
PORTA = led_7[data];
}
void USART_Transmit(char data)
{
while (!(UCSRA & DATA_REGISTER_EMPTY)); // 等待发送寄存器空
UDR = data; // 发送数据
}
void main( void )
{
char i=0;
PORTA = 0x00; // LED段码输出
DDRA = 0xff;
PORTD = 0x03; // TXD(PD1)输出
DDRD = 0x02; // RXD(PD0)输入,上拉有效
UCSRA = 0x00; // USART初始化
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); // 允许RXC中断,接收允许,发送允许
//UCSRB = 0x98;
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // 8 Data, 1 Stop, No Parity
//UCSRC = 0x86;
UBRRH = BAUD_H; // 设置波特率
UBRRL = BAUD_L;
#asm("sei") // 开中断
for(;;)
{
USART_Transmit(i);
if (++i >= 10) i = 0;
delay_ms(500);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -