打印

单片机

[复制链接]
1144|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Dillheng|  楼主 | 2013-4-11 19:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
SunFans| | 2013-4-11 20:39 | 只看该作者
#include <REG52.h>   
#include <string.h>   
#include <stdio.h>
#define uchar   unsigned    char
#define uint    unsigned    int  
#define ulong   unsigned    long
#define ushort  unsigned    short
#define MAX_DATA_LENGTH     32  
typedef struct//定义数据发送包
{
    uchar head;//包头
    uchar length;//数据长度
    uchar cmd;//命令
    uchar sData[6];//数据
    uchar crc;//校验
    uchar end;//包尾
} Packet,*PT;
typedef struct//定义接收缓冲区
{
    uchar iCnt;
    uchar sData[MAX_DATA_LENGTH];
} RecvBuf,*RB;
void SendD(PT addrBuf,uint cnt);//定义发送函数
void Sleep(uint ms);//定义延时子程序
void init();//C51初始化程序
bit Judge(RB addrBuf);  
void Crc(PT addrBuf);
Packet  pT;   
RecvBuf rB;   
void main()   
{   
    memset(&pT,0x00,MAX_DATA_LENGTH+5);   
    memset(&rB,0x00,MAX_DATA_LENGTH+1);   
    pT.head=0x02;   
    pT.length=0x0b;   
    pT.cmd=0x44;   
    pT.end=0x03;   
    sprintf(pT.sData,"%s","080327");   
    pT.crc=0x056;   
    init();   
    while(1)   
    {   
       Sleep(10000);   
    }   
}   
void serial(void) interrupt 4//定义串行口中断处理子程序   
{   
    ES=0;   
    while(RI)   
    {   
        rB.sData[rB.iCnt]=SBUF;   
        rB.iCnt++;   
        RI=0;   
    }   
    if(Judge(&rB))   
    {   
        memset(&rB,0x00,MAX_DATA_LENGTH+1);   
        SendD((uchar*)&pT,pT.length);   
    }   
    ES=1;   
}   
bit Judge(RB addrBuf)   
{   
    if(addrBuf->sData[0]==0x02&&addrBuf->sData[addrBuf->sData[1]-1]==0x03)   
        return 1;   
    else   
        return 0;   
}   
void init()//完成51初始化工作   
{   
    TMOD=0x20;//初始化51   
    TH1=0xfd;   
    TL1=0x0Fd;   
    TR1=1;   
    SCON=0x50;   
    PCON=0x00;   
    EA=1;   
    ES=1;      
}   
void SendD(uchar *addrBuf,uchar cnt)   
{   
    int i=0;   
    T0=0;   
    while(++i<=cnt)   
    {   
        SBUF=addrBuf[i-1];   
        while(!TI);   
        TI=0;   
    }              
}   
void Sleep(uint ms)//定义延时子程序   
{   
    int i,j;   
    for(i=0;i<ms;i++)   
        for(j=0;j<10;j++);   
}

使用特权

评论回复
板凳
airwill| | 2013-4-11 21:15 | 只看该作者
本帖最后由 airwill 于 2013-4-11 21:20 编辑

网上,随便搜索,到处都是。
看看 KEIL 里的例子:(\KEIL\C51\Examples\CSAMPLE)
/*------------------------------------------------------------------------------
CSAMPLE1.C

Copyright 1995-2005 Keil Software, Inc.
------------------------------------------------------------------------------*/

#include <reg51.h>                             /* define 8051 registers */
#include <stdio.h>                             /* define I/O functions */

extern unsigned int getnumber (void);
extern void output (unsigned int);

void main (void)  {                            /* main program */
  unsigned int number1, number2;               /* define operation registers */
  bit operation;                               /* define operation */

  SCON = 0x52;    /* SCON */                   /* setup serial port control */
  TMOD = 0x20;    /* TMOD */                   /* hardware (2400 BAUD @12MHZ) */
  TCON = 0x69;    /* TCON */
  TH1 =  0xf3;    /* TH1 */

  printf ("\n\nC compiler demonstration program\n\n");

  while (1)  {                                 /* repeat forever */
    number1 = getnumber ();                    /* read number1 */
    number2 = getnumber ();                    /* read number2 */
    printf ("Input operation: '+' (ADD) or '-' (SUB) ? ");
    operation = (getchar () == '+');           /* get operation */
    output (operation ? (number1 + number2)    /* perform operation */
                      : (number1 - number2) );
  }
}

/*------------------------------------------------------------------------------
CSAMPLE2.C

Copyright 1995-2005 Keil Software, Inc.
------------------------------------------------------------------------------*/

#include <stdio.h>                             /* define I/O functions */

void getline (char *line)  {
  while ((*line++ = getchar()) != '\n');
}

int atoi (char *line)  {
  bit sign;
  int number;

  /* skip white space */
  for ( ; *line == ' ' || *line == '\n' || *line == '\t'; line++);

  /* establish sign */
  sign = 1;
  if (*line == '+' || *line == '-')  sign = (*line++ == '+');

  /* compute decimal value */
  for (number=0; *line >= '0' && *line <= '9'; line++)
    number = (number * 10) + (*line - '0');

  return (sign ? number : -number);
}

unsigned int getnumber (void)  {
  char line [40];
  
  printf ("Input Number ? ");
  getline (line);
  return (atoi (line));
}

/*------------------------------------------------------------------------------
CSAMPLE3.C

Copyright 1995-2005 Keil Software, Inc.
------------------------------------------------------------------------------*/

#include <stdio.h>                             /* define I/O functions */

char dummy_buffer [25];                        /* only for demostration */

void output (unsigned int number)  {
  printf ("\nresult: %d\n\n", number);
}

使用特权

评论回复
地板
hlzhaowu| | 2013-4-11 22:47 | 只看该作者
百度

使用特权

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

本版积分规则

26

主题

85

帖子

0

粉丝