原创 简单易懂的串口操作程序

2007-6-14 10:48 3503 6 7 分类: MCU/ 嵌入式

232串行通讯,是工程开发里面最常用的通讯方式,avrusar非常容易控制,使用查询方式,对其初始化,然后给UDR赋值即可发送,等待接收完标志位置位,读出UDR的值就是接收。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


当然还可以使用中断方式,我们提供的一个模块化的程序就是用中断来接收的。


建议:使用查询方式发送,中断方式接收,这样方便进行操作,而且节省CPU时间。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


// ICC-AVR application builder : 2007-5-20 17:21:25


// Target : M16


// <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Crystal: 7.3728Mhz


// AVR mega16 串口测试


// AVR与虚拟仪器 http://www.avrvi.com 古欣


// 连接:电源跳线,晶振跳线(注意,一定要使用7.3728M晶振)


// 使用串口延长线把板子和PC连起来,使用chuankou.exe 串口调试助手观察程序运行结果


 



#include


#include


 


#define F_CPU 7372800


const unsigned char buffer[]="http://www.avrvi.com";


 


void USART_Init( unsigned int baud )


{


unsigned int tmp;


/* 设置波特率*/


tmp= F_CPU/baud/16-1;


UBRRH = (unsigned char)(tmp>>8);


UBRRL = (unsigned char)tmp;


/* 接收器与发送器使能*/


UCSRB = (1<<?XML:NAMESPACE PREFIX = RXEN)|(1<


/* 设置帧格式: 8 个数据位, 2 个停止位*/


UCSRC = (1<<?XML:NAMESPACE PREFIX = URSEL)|(1<


}


/* UMSEL 模式选择


0 异步操作


1 同步操作


USBS 停止位位数


0   1


1   2


UCSZ2 UCSZ1 UCSZ0 字符长度


0 0 0 5


0 0 1 6


0 1 0 7


0 1 1 8


1 0 0 保留


1 0 1 保留


1 1 0 保留


1 1 1 9


*/


 


// ICC 生成的初始化


//UART0 initialize


// desired baud rate: 9600


// actual: baud rate:9600 (0.0%)


// char size: 8 bit


// parity: Disabled


void uart0_init(void)


{


UCSRB = 0x00; //disable while setting baud rate


UCSRA = 0x00;


UCSRC = BIT(URSEL) | 0x06;


UBRRL = 0x2F; //set baud rate lo


UBRRH = 0x00; //set baud rate hi


UCSRB = 0x18;


}


 


//下面两个函数直接从数据手册上拷贝过来的


 


// 数据发送【发送5 8 位数据位的帧】


void USART_Transmit( unsigned char data )


{


/* 等待发送缓冲器为空 */


while ( !( UCSRA & (1<


;


/* 将数据放入缓冲器,发送数据 */


UDR = data;


}


// 数据接收【以58个数据位的方式接收数据帧】


unsigned char USART_Receive( void )


{


/* 等待接收数据*/


while ( !(UCSRA & (1<


;


/* 从缓冲器中获取并返回数据*/


return UDR;


}


//连续发送字符


void USART_Transmit_2( void )


{


while ( !( UCSRA & (1<


;


UDR = 'H';


while ( !( UCSRA & (1<


;


UDR = 'e';


while ( !( UCSRA & (1<


;


UDR = 'l';


while ( !( UCSRA & (1<


;


UDR = 'l';


while ( !( UCSRA & (1<


;


UDR = 'o';


}


 


void main(void)


{


unsigned char i="0",tmp=0;


 


USART_Init(9600); //波特率9600 初始化串口


// uart0_init();


 


for(i=0;i<20;i++) //发送数组里面的字符串,http://www.avrvi.com


{


USART_Transmit(buffer);


}


 


USART_Transmit(0x0d); //发送一个回车


USART_Transmit(0x0a); //发送一个换行


 


while(1)


{


if(UCSRA&(1<如果接收缓存区有数据


{


tmp=USART_Receive(); //接收数据


USART_Transmit(tmp); //发送数据


 


if(tmp=='a')       //对接收到的数据进行,如果是a,再发一个OK回来


{


USART_Transmit('O');


USART_Transmit('K');


}


if(tmp=='A')     //对接收到的数据进行,如果是A,再发一个Hello回来


{


USART_Transmit_2();


}


}


}


}


 


 

)|(1<)|(1<

文章评论1条评论)

登录后参与讨论

用户1196490 2009-2-3 15:01

好像没下文了

用户199201 2007-6-17 12:04

不错

用户42895 2007-3-26 21:51

谢谢支持,我现在正在设计新的宽电压LED驱动器,暂时没时间写博客。

用户386601 2007-3-26 15:11

哈哈。。。太假了!房主我很佩服你的洞穿力!期望等快点看到跟多的《大功率LED技术》方面的信息!

用户1253546 2007-1-12 18:48

哈哈....看图片上的亮度应该没有达到...

功率可能到了一千五

 

用户1053025 2006-12-20 16:07

呵呵,这篇文章很有panic的风范!

用户42895 2006-12-18 15:54

估计和很多“科研成果”一样,都是没下文的。
PS:我正在整理厦门Ateml研讨会的资料,估计最近两三天才能搞定。

用户1053025 2006-12-18 15:33

呵呵,期待这件事情的真相。

相关推荐阅读
用户42783 2007-10-15 13:14
一个好的网站
http://www.abab123.com/bbs/down.asp?html=703419...
用户42783 2007-10-13 16:23
售S51单片机开发板(学习板)
       现有S51开发板2套,做工精细,性能稳定。    主要资源:USB取电插头,Max232,在线编程接口,I/O口外扩插针,8位独立按键,液晶插座,蜂鸣器,DS1302时钟插座,93C64...
用户42783 2007-07-14 16:25
中科院电工所考博试题
本人有中国科学院电工所2001年到2004年电工和电力电子试题10套,售价10元每份,电子版或者邮件都可。还有中科院英语复习资料两套。据说把这些题弄明白就可能通过英语考试。(这本来是为我考博准备的,但...
用户42783 2007-06-19 11:13
AD/DA的分类与指标
1. AD转换器的分类    下面简要介绍常用的几种类型的基本原理及特点:积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。    1)积分型(如TLC7135)...
用户42783 2007-06-19 10:18
avr利用pwm控制led光暗及峰鳴器音量大小
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> //ICC-AVR applica...
用户42783 2007-06-19 09:10
AVR的PWM波(转)
(1)一个实例:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />这个程序是用ICC的...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条