·首页 ·单片机应用 ·pic单片机教程 ·arm学习教程 ·AVR单片机 ·DSP芯片 ·接口电路 ·无线通信 ·存储器 ·模拟电路
·电路图 ·嵌入式系统 ·WinCE ·ucLinux ·Vxworks ·ucOSII ·可编程逻辑器件 ·led显示屏 ·PCB设计 ·传感器技术 ·仪器仪表

单片机论文网>AVR单片机>文章内容


上篇:74HC595串入并出例子
下篇:在BASCOM终端仿真窗口里练习QBASIC

USART与PC通信例子

51c51  本站整理 

 

USART与PC通信例子

 

    下面是一个利用ATmega88的串口USART0向PC单向发送数据的例子,PC的上位机程序可以用BASCOM-AVR自带的超级终端功能,也可以用windows自带的超级终端(推荐)。windows的超级终端默认的波特率是9600,8个数据位,无奇偶校验,1个停止位。本例子就以这个数据作为参考,注意ATmega88芯片的时钟不同,那么它产生的波特率误差也有所不同,在8M下波特率为9600时的误差为0.2%(这个误差可以说很小了)。在编写程序时请注意要和这些数据一一对应。 否则就有通信失败的可能。

BASCOM-AVR的源程序如下:

$regfile = "m88def.dat"
$crystal = 8000000
$baud = 9600
Dim X As Byte
X = 0
Do
Print "ATmega88与PC串口通信试验"
Print X
X = X + 1
Waitms 500
Loop
End

CVAVR的源程序如下:

#include <mega88.h>
#include <delay.h>
flash unsigned char data[]="ATmega88与PC串口通信试验";
void main(void)
{
//USART0初始化,波特率9600Hz,8个数据位,1个停止位,无奇偶校验,无中断使能
UCSR0A=0x00;
UCSR0B=0x08;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;

while (1)
{
unsigned char i,x,bytes[7];//局部变量,请注意初值的变化
for(i=0;i<24;i++) //发送"ATmega88与PC串口通信试验"
{
UDR0=data[i]; //缓冲器UDR0一旦被成功赋值,这个数据就自动的由串口发送出去
while(UCSR0A^=0b00100000); //位5是忙的标致,=1就循环等待,=0就下一步
};
bytes[0]=13; //13就是回车键的ASC2值
bytes[1]=10; //10就是换行
bytes[2]=x/100+48; //求变量x的"百位数"字符
bytes[3]=x/10%10+48; //求变量x的"十位数"字符
bytes[4]=x%10+48; //求变量x的"个位数"字符
bytes[5]=13;
bytes[6]=10;
for(i=0;i<7;i++)//发送回车/换行/变量x
{
UDR0=bytes[i];
while(UCSR0A^=0b00100000);
};
x++;
delay_ms(1000);
};
}

    通过上面的例子可以看出,利用USART串口可是十分方便的,比操作1602LCD简单方便多了,它还可以随心所欲的输出各种文字字符等,如果是AVR单方面输出数据的话只要用一个TXD端口就可以了,RXD可以作为普通IO口使用。一般的双向通讯用TXD、RXD两个端口 就基本满足要求了。所以请大家在以后的学习试验中如果可以的话就尽量的利用USART串口、PC为作输出显示功能吧。 

 


    AVR串口USART与PC的串口通信必须通过RS232电平转换,常用的转换IC有MAX232等,因为电脑串口输出的信号电平是标准的RS232电平信号,信号电压是±5~15V,而且RS232协议的“1”电平是 -5~15V,“0”电平是 +5~15V,所以没有电平转换电路的话AVR与PC是很难直接通信的。 下面是MAX232标准的电路图,图中的5个电容建议全部用1uF的独石电容。

相关资料:
·74HC595串入并出例子
·在BASCOM终端仿真窗口里练习QBASIC
·AVR 单灯闪烁的实现(1)
·BASCOM基础知识
·AVR 单灯闪烁的实现(2)
·EEPROM的读写例子
·AVR 单灯闪烁的实现(3)
·LM35D模数A/D转换例子
·AVR单片机从零开始
·功能强大的串口发送接收程序模块
·AVR开发软件介绍
·没有仿真器的情况下如何开发AVR

Copyright © 2004-2007 单片机论文网 - 免责条款