新闻  |   论坛  |   博客  |   在线研讨会
第三十七课 串口通讯之查询法
0750long | 2009-06-17 08:35:48    阅读:1468   发布文章

第三十七课 串口通讯之查询法

在学习本节之前,希望大家对前一节的知识有所了解

程序讲解:

/*---------------------------------------------------------------*/
//串口通讯
//按下按钮,单片机发送数据"Hello! I am glad to see you again.\r"给主机
//单片机晶振:11.0592MHz
//波特率:   9600bps

/*---------------------------------------------------------------*/
#include<reg52.h>
#include<intrins.h>


/*---------------------------------------------------------------*/
sbit K1 = P3^3;  //对应开发板硬件


/*---------------------------------------------------------------*/
unsigned char tmp;   //单片机向电脑发送的数据
unsigned char code str[]={"Hello! I am glad to see you again.\r\n"};


/*---------------------------------------------------------------*/
void send_str(void); //发送字符串
void send_char(unsigned char txd);  //发送字符
void delayms(void);


/*---------------------------------------------------------------*/
void main(void)
{
 TMOD = 0x20;   //定时器1工作在方式2(8位,自动装载)用作波特率发生
 TH1  = 0xfD;        //9600bps
 TL1  = 0xfD; 

 SCON = 0x50;  //串口工作方式为1 允许接受  
 PCON = 0x00;  // SMOD="0"  波特率不变(为1时,波特率变为两倍)

 TR1 = 1;           //允许定时器1工作
 IE  = 0x00;        //禁止所有中断

 while(1)
 {
  if(K1==0){delayms();if(K1==0){send_str();while(K1==0);}}

  if(RI)                    //判断是串口否接收到数据
  {
   RI = 0;                //清除中断标志
   tmp = SBUF;      //保存串行口数据缓冲器的数据
   P1 = ~(tmp-48);  //送到P1显示
   send_char(tmp);  //将从电脑上传过来的数据回传到电脑上显示
  }
 }
}


/*---------------------------------------------------------------*/
//传送一个字符
void send_char(unsigned char txd)
{
 SBUF = txd;        //送到数据缓冲区
 while(!TI);            //等待上一数据发送完成
 TI = 0;                 //软件清除中断标志
}


/*---------------------------------------------------------------*/
//传送字符
void send_str(void)
{
 unsigned char i="0";
 while(str[i]!='\0')   //判断字符串是否发送完成
 {
  send_char(str[i]); //发送字符
  i++;                     //指向下一个字符
 }
}


/*---------------------------------------------------------------*/
//延时10000+0us 函数定义
void delayms(void)
{
  unsigned char i,j,k;
  for(i=5;i>0;i--)
  for(j=4;j>0;j--)
  for(k=248;k>0;k--);
}

本节重点:

1、串口通讯的初始化(SCON、PCON寄存器的设置)

2、发送接收数据缓冲区的理解(共用一个地址0x99),及串口串行发送数据的认识!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客