程序设置串口为38400bps.可以串口接收中断,PC每发一个数据,13脚上的灯就会翻转一次。loop函数一直输出“test”
先对比下寄存器和库编译后的大小,谈后在上代码。
差别还是非常明显的。
- /*
- 注意:不要用arduino ide自带的串口助手打开,否则ide会崩溃//
- */
- #define BAUD 38400
- void RegisterInitUart()
- {
- //bitSet(UCSR0A,U2X0);
- bitSet(UCSR0B,RXCIE0); //允许接收完成中断//
- bitSet(UCSR0B,RXEN0); //开启接收功能//
- bitSet(UCSR0B,TXEN0); //开启发送功能//
- bitSet(UCSR0C,UCSZ01);
- bitSet(UCSR0C,UCSZ00); //
- UBRR0=(F_CPU/16/BAUD-1); //波特率小于38400
- }
- /*
- 函数功能:通过uart0发送一个字符
- */
-
- void PutChar(char c)
- {
- loop_until_bit_is_set(UCSR0A,UDRE0);
- UDR0=c;
- }
- /*
- 函数功能:通过uart0发送字符串
- */
- void PutString(char *str)
- {
- while(*str)
- {
- PutChar(*str);
- str++;
- }
- }
- /*
- 函数功能:通过uart0发送字符串 ,并在结尾加上回车换行
- */
- void PutStringEnter(char *str)
- {
- while(*str)
- {
- PutChar(*str);
- str++;
- }
- PutChar(0x0d);
- PutChar(0x0a);
- }
- /*
- USART0--接收中断//
- */
- //ISR(USART_RX_vect) //适合UNO
- ISR(USART0_RX_vect) //适合MEGA 2560
- {
- unsigned char temp;
- temp=UDR0;
- //bitSet(PINB,5); //适合UNO 翻转
- bitSet(PINB,7); //适合mega 2560 翻转
- }
- void setup()
- {
- //bitSet(DDRB,5); //适合UNO 输出
- bitSet(DDRB,7); //适合mega 2560 输出
- RegisterInitUart();
- //PutString("test");
- }
- void loop()
- {
- PutStringEnter("test");
- }
复制代码 |