当前位置:首页 >> 信息与通信 >>

AVR单片机教程22-第二十二课 单片机与PC机的串行通信编程实践


上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——

第二十二课 单片机与 PC 机的串行通信编程实践

本教程节选自周兴华老师 《手把手教你学 AVR 单片机 C 程序设计》 教程, 如需转载, 请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器 材,可登陆周兴华单片机培训中心网购部自助购买!

13.3.1 在 AVR 单片机开发板板上,进行单片机与 PC 机(个人电脑)的通信试验1 PC 机发送一个字符给单片机,单片机收到后即在发光管 D1~D8上进行显示,同时将其回发给 PC 机。为便于初学者实验成功,单片机的发送接收均采用查询方式。实验电路可参考第4章的 图4-1(AVR DEMO 单片机综合试验板电路原理图)。 在我的文档中新建一个 ac13-1的文件夹。建立一个 ac13-1.prj 的工程项目,最后单片机培训建 立源程序文件 ac13-1.c。输入下面的程序: #include <iom16v.h>//包含头文件 #include <macros.h> //==================================

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——
void port_init(void) //初始化端口子函数 { PORTA = 0xFF; //PD 端口初始化输出11111111 DDRA = 0x00; //将 PA 端口设为输入 PORTB = 0xFF; //PD 端口初始化输出11111111 DDRB = 0xFF; //将 PB 端口设为输出 //51单片机培训

PORTC = 0xFF; //PD 端口初始化输出11111111 DDRC = 0x00; //将 PC 端口设为输入 PORTD = 0xFF; //PD 端口初始化输出11111111

DDRD = 0x02; //将 PD 端口的 PD1设为输出,其它设为输入 } //********************************************** void uart0_init(void) //初始化 UART 子函数 { UCSRB = 0x00; //禁止 UART 发送和接收 UCSRA = 0x02;//倍速 UCSRC = 0x06;//8位数据位 UBRRL = 0x67; //波特率9600 UBRRH = 0x00; UCSRB = 0x18;// 允许 UART 发送和接收 } 单片机 C 语言教程

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——
//********************************************** void init_devices(void) //芯片的初始化子函数 { port_init();//调用端口初始化子函数 uart0_init();//调用 UART 初始化子函数 } //********************************************** void uart0_send(unsigned char i)//发送1个字符的子函数 { while(!(UCSRA&(1<<UDRE)));//等待发送缓冲区为空 UDR=i;//发送1个字符 } //************************************************ unsigned char uart0_receive(void) //接收1个字符的子函数 { while(!(UCSRA&(1<<RXC)));//等待接收数据 return UDR;//返回接收到的数据 } //--------------------------------------------------------------void main(void) //主函数 { 单片机教材

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——
unsigned char temp;//定义局部变量 init_devices();//调用芯片初始化子函数 while(1) //无限循环 { temp=uart0_receive();//等待接收数据 PORTB=~temp; //接收的数据转成低电平后点亮 LED uart0_send(temp);//再将接收的数据发送出去 } } 编译通过后,AVR 单片机综合试验板接通5V 稳压电源,将生成的 ac13-1.hex 文件下载到试验 板上的单片机中,注意,标示“UART”及“LED”的双排针应插上单片机开发短路块。在做实验时, 我们需要在 PC 机上进行信息发送。这里使用的是一个名叫 COMPort Debuger(串口调试器软 件)的免安装共享软件,其下载地址为:http://emouze.com 或 http://www.hlelectron.com AVR 单片机教程

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——

图13-1 打开串口调试器软件,其界面如图13-1所示。右上方为发送区,右下方 protel 培训为接收区。 左上方的初始化区域(如波特率、数据位等)一般不必更改(初始化为:端口号1、波特率9600、 数据位8、停止位1、校验位无) 。若你的 PC 机串口 COM1已占用时,才可考虑改用 COM2。 将 PC 机的串口与 AVR 单片机综合试验板的串口连接好。清空发送区、接收区的原有内容,然 后打开串口。 我们做的实验比较简单,每次只能输入一位字符进行发送。 发送区输入1,点发送,我们发现 AVR 单片机综合试验板的8个 LED(D1~D8)中,D6、D5、D1 发光管点亮(即数据为0x31) ,同时接收区立即显示收到的1(见图13-2) 。发送区单片机论坛 输入 A,点发送,我们发现 D7、D1发光管点亮(即数据为0x41) ,同时接收区立即显示收到的 A(见图13-3) 。通过查对 ASCII 码表可知,0x31是数字1的 ASCII 码,0x41是字母 A 的 ASCII 码。

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——

图13-2

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——

图13-3 发送区勾选“按16进制显示或发送”, 接收区勾选“按16进制显示”,发送区输入8,点发送,我 们发现 AVR 单片机综合试验板的中,D4发光管点亮(即数据为0x80) ,同时接收区立即显示收 到的08,其界面如图13-4所示。发送区输入 F,点发送,我们发现 AVR 单片机综合试验板的中, D1~4发光管点亮(即数据为0x0F) ,同时 FPGA 开发板接收区立即显示收到的0F,其界面如图 13-5所示。与16进制的数据完全相符。

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——

图13-4

周兴华单片机培训中心 2010 年 6 月制

上海周兴华单片机培训中心 Http://www.zxmcu.com ———————————————————————— ——

图13-5

周兴华单片机培训中心 2010 年 6 月制


相关文章:
更多相关标签: