打印

来比较仪下这2个程序有什么不同

[复制链接]
1507|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
250147449|  楼主 | 2007-12-2 06:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来比较一下这2个程序的不同 
(1)
#i nclude "reg52.h"                               // 包含头文件    
/* 与编译器无关的数据类型定义 */
/********************************************************************************************/
typedef unsigned char      uint8;                // 无符号8位整型变量
typedef signed   char      int8;                 // 有符号8位整型变量
typedef unsigned short     uint16;               // 无符号16位整型变量
typedef signed   short     int16;                // 有符号16位整型变量
typedef unsigned int       uint32;               // 无符号32位整型变量
typedef signed   int       int32;                // 有符号32位整型变量
typedef float              fp32;                 // 单精度浮点数(32位长度)
typedef double             fp64;                 // 双精度浮点数(64位长度)
/********************************************************************************************/

/********************************************************************************************
* 函数名称:Delay()
* 功    能:软件延时
* 入口参数:count    延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
void Delay(uint16 count)
{
  uint8 i;                

  while(--count != 0)        
    {
     for(i = 0; i < 125; i++);                // ";" 表示空语句,CPU空转。
   }                                // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}

/********************************************************************************************
* 函数名称:UART_Init()
* 功    能:UART初始化
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void UART_Init(void)
{
  IE=0x00;                                       // 禁止所有中断

  SCON=0x50;                                     // 串口工作方式1,即10位异步收发器(8位数据),波特率可变

  TMOD|=0x20;                                    // 定时器1:工作方式2(8位自动重装定时/计数器)

  PCON|=0x80;                                    // SMOD=1,即波特率提高一倍

  TH1=0xF4;                                      // 晶振频率为11.0592MHz时,波特率为4800

  TR1=1;                                         // 启动定时器/计数器1

}

/********************************************************************************************
* 函数名称:UART_Send_Char()
* 功    能:向串口发送一个字符
* 入口参数:Send_Char   要发送的一个字符
* 出口参数:无
*********************************************************************************************/
void UART_Send_Char(uint8 Send_Char)
{
  SBUF=Send_Char;                                // 将要发送的一个字符写入发送缓冲区
  while(TI==0);                                  // 查询UART发送中断标志,直到标志为1(产生发送中断)时,执行下面的语句  
  TI=0;                                          // 清0UART发送中断标志
}

/********************************************************************************************
* 函数名称:UART_Send_String()
* 功    能:向串口发送一个字符串
* 入口参数:Send_String   要发送的一个字符串
*           StringLen     字符串长度
* 出口参数:无
*********************************************************************************************/
void UART_Send_String(uint8 *Send_String,uint32 StringLen)
{
  uint32 i=0;

  do
    {
   UART_Send_Char(*(Send_String+i));
   i++;
 }while(i<StringLen);
}

/********************************************************************************************
* 函数名称:main()

*********************************************************************************************/    
void main (void)                
{
  UART_Init();                                   // UART初始化
  
  while(1)
      {
     UART_Send_String("Hello ARMSKY-51Easy! ",21); // 通过UART向上位机发送"Hello ARMSKY-51Easy!"字符串
     Delay(500);                              // 延时
   }
}
(2)
#i nclude "reg52.h"                               // 包含头文件    
/* 与编译器无关的数据类型定义 */
/********************************************************************************************/
typedef unsigned char      uint8;                // 无符号8位整型变量
typedef signed   char      int8;                 // 有符号8位整型变量
typedef unsigned short     uint16;               // 无符号16位整型变量
typedef signed   short     int16;                // 有符号16位整型变量
typedef unsigned int       uint32;               // 无符号32位整型变量
typedef signed   int       int32;                // 有符号32位整型变量
typedef float              fp32;                 // 单精度浮点数(32位长度)
typedef double             fp64;                 // 双精度浮点数(64位长度)
/********************************************************************************************/
sbit P1_7 = P1 ^ 7;                              // 定义位变量 
#define LED11_ON()   (P1_7=0)                    // 定义"LED11_ON()"为AT89S52的P1.7脚输出低电
                                                 // 平使LED11点亮
#define LED11_OFF()  (P1_7=1)                    // 定义"LED11_OFF()"为AT89S52的P1.7脚输出高电
                                                 // 平使LED11熄灭
/********************************************************************************************
* 函数名称:UART_Init()
* 功    能:UART初始化
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void UART_Init(void)
{
  SCON=0x50;                                     // 串口工作方式1,即10位异步收发器(8位数据),波特率可变
  TMOD|=0x20;                                    // 定时器1:工作方式2(8位自动重装定时/计数器)
  PCON|=0x80;                                    // SMOD=1,即波特率提高一倍
  TH1=0xF4;                                      // 晶振频率为11.0592MHz时,波特率为4800
  IE=0x90;                                       // 允许UART中断
  TR1=1;                                         // 启动定时器/计数器1
}

/********************************************************************************************
* 函数名称:UART_Receive_Server()
* 功    能:UART接收中断服务程序.若接收到上位机发来的十六进制值0xAA,则点亮LED11;若接收到上位
*           机发来的十六进制值0x55,则熄灭LED11。
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void UART_Receive_Server(void) interrupt 4
{
  if(RI)                                         // 若产生UART接收中断
    {
   uint8 ReceiveData;                         // 定义接收变量
   RI=0;                                      // 清零UART的接收中断标记
   ReceiveData=SBUF;                          // 从接收缓冲区读出数据
   
   switch(ReceiveData)                        // 对收到的数据进行判断
         {
     case 0xAA:                         // 若接收到的数据为0xAA,则点亮LED11
               LED11_ON();
               break;
     case 0x55:                         // 若接收到的数据为0x55,则熄灭LED11  
                        LED11_OFF();
               break;
     default:
               break;
   
   }
    }
}
/********************************************************************************************
* 函数名称:main()

*           上位机发来的十六进制值0x55时,LED11灭。
*********************************************************************************************/    
void main (void)                
{
  UART_Init();                                   // UART初始化
  LED11_OFF();                                   // AT89S52的P1.7脚输出高电平来熄灭LED11
  while(1);                                      // 死循环,等待UART接收中断
}
 

相关帖子

沙发
王紫豪| | 2007-12-2 06:18 | 只看该作者

一个接受,一个发送,你说有啥不同呀?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

20

帖子

0

粉丝