马上到年终了,事情比较多。年终总结了,项目报告了,压的很多事情都顾不过来,也没太多的时间在DIY上了,但是为了不辜负EEPW对MCUDIY的初衷,还是适当的更新些内容,以利于大家知识分享吧。
时间紧,所以一切从简了,硬件功能我这里实现的不多,板子就焊了串口,按键,小液晶,led灯,蜂鸣器,晶振等常用的器件。这些都是以前板子上拆下的,都能用,没办法,工作中没工夫去购买器件啊。
针对串口写了点简单程序,可以使用,就给大家分享下。
#include <iom16v.h>
#include <macros.h>
//-----------------------------------------------------------
//串口初始化子程序
//字符长度:8位
//奇偶校验:禁止
//通讯模式:异步
//-----------------------------------------------------------
void Uart_Init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00; //Bit1为1则倍速发送
UCSRC = 0x86;
UBRRL = 0x33; //波特率:9600 Bps
UBRRH = 0x00; //误差率:0.156%
UCSRB = 0x18;
}
//-----------------------------------------------------------
//串口接收字节子程序
//-----------------------------------------------------------
unsigned char Getchar(void)
{
while(!(UCSRA& (1<<RXC)));
return UDR;
}
//-----------------------------------------------------------
//串口发送字节子程序
//-----------------------------------------------------------
void Putchar(unsigned char c)
{
while (!(UCSRA&(1<<UDRE)));
UDR=c;
}
//-----------------------------------------------------------
//串口发送字符串子程序
//-----------------------------------------------------------
void Putstr(char *s)
{
while (*s)
{
Putchar(*s);
s++;
}
}
//-----------------------------------------------------------
//串口发送字符串子程序(带有换行符)
//-----------------------------------------------------------
void Puts(char *s)
{
while (*s)
{
Putchar(*s);
s++;
}
Putchar(0x0a); //回车换行
Putchar(0x0d);
}
//-----------------------------------------------------------
//主函数
//-----------------------------------------------------------
void main(void)
{
unsigned char i=0;
Uart_Init();
Puts("AVR-ARM RS232 TEST CODE");
Puts("Http://www.EEPW.com");
Puts("ATMega16 UART TEST");
Putchar(0x0a);
Putchar(0x0d);
while(1)
{
i=Getchar();
if (i!=0) //发送0x0F开始测试
{
Puts("AVR-ARM RS232 TEST CODE");
Puts("EEPW MCU DIY!");
Puts("ATMega16 UART TEST");
Putchar(0x0a);
Putchar(0x0d);
}
}
}
以上UART接收发送均采用查询方式,也可以采用中断方式,自己学习了。