• 大小: 41KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 4倍频  串口输出  

资源简介

本程序经过高手大哥调试正确可用 下载就可直接使用 精度准确

资源截图

代码片段和文件信息


#include “reg51.h“
#include “intrins.h“

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define UART_IDLE    0
#define UART_SND_BUSY  1
#define UART_RCV_BUSY  1
#define FOSC 11059200L
//缓冲区大小
#define RECV_BUFFER_SIZE 5

//sbit bit9 = P2^2;
bit busy;

//接收缓冲数据结构
struct RecvBuffer
{
BYTE buffer[RECV_BUFFER_SIZE];//使用数组定义缓存大小
long out;
long in;
long rbufCount;//缓存大小计数
};

struct RecvBuffer rbuf;

//--------------------------------------------------------
//发送程序
//--------------------------------------------------------

void SendData(BYTE dat)
{
while(busy != UART_IDLE);
busy = UART_SND_BUSY;//清标志位
SBUF = dat;
}

 //--------------------------------------------------------
 //初始化发送的数据
 //--------------------------------------------------------
//发送字符串
void SendString(char *s)
{
while(*s)
{
SendData(*s++);
}
}
//---------------------------------------------------------
//接收缓存区定义
//---------------------------------------------------------   

//uart接收数据缓冲区
void rbuf_init(struct RecvBuffer * rbuf);
long rbuf_conten_size(struct RecvBuffer * rbuf);
void rbuf_clear(struct RecvBuffer * rbuf);
void delay(long count);
//-----------------------------------------------------
//-----------------------------------------------------

//uart接收缓冲 初始化
void rbuf_init(struct RecvBuffer * rbuf)
{
rbuf_clear(rbuf);
}

//uart接收缓冲 清空缓冲
void rbuf_clear(struct RecvBuffer * rbuf)
{
rbuf->rbufCount = rbuf->out = rbuf->in = 0;
}

//清空串口数据
void uartFlash()
{
rbuf_clear(&rbuf);
}

//--------------------------------------------------------
//--------------------------------------------------------

//uart接收缓冲 获取数据大小
long rbuf_conten_size(struct RecvBuffer * rbuf)
{

return rbuf->rbufCount;
}

//----------------------------------------------------------------
//uart接收缓冲 从缓冲读取
//----------------------------------------------------------------

long rbuf_write_to_buf(struct RecvBuffer * rbufBYTE * bufferlong count)
{
//计算COPY的大小
long i;
long rbufCount = rbuf_conten_size(rbuf);//-----?
long cpyCount;
 //rbuf没有数据
 if(rbufCount == 0)
 {
  return 0;
 }

 //不拷贝数据
 if(count == 0)//count没有赋初值?
 {
  return 0;
 }

//保证要拷贝的大小,不超过缓冲区
cpyCount = rbufCount > count? count : rbufCount;

for(i = 0 ; i < cpyCount ; i++)
{
//COPY 串口数据更新rbuf
buffer[i] = rbuf->buffer[rbuf->out];
  ++rbuf->out;
rbuf->out = rbuf->out %  RECV_BUFFER_SIZE;

}

//
while(busy == UART_RCV_BUSY);
ES = 0;
rbuf->rbufCount -= cpyCount;
ES = 1;

return cpyCount;
}
//---------------------------------------------------------
//串口初始化
//---------------------------------------------------------

void uartInit(long baud)
{
TMOD= 0x20;//定时器工作方式选择
SCON=0x50;//串口工作方式选择
TH1= TL1 = -(FOSC/12/32/baud);//装载计数初值
TR1 = 1;//开启定时器1
ES = 1;
EA = 1;

rbuf_init(&rbuf);
}

//----------------------------------------------------------
//接收

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4231  2012-11-24 19:02  光电编码\51uart.c

     文件        604  2012-11-26 13:16  光电编码\51uart.h

     文件       8878  2012-11-28 21:15  光电编码\51uart.LST

     文件      10270  2012-11-28 21:15  光电编码\51uart.OBJ

    .......     50521  2012-11-24 17:10  光电编码\guangdian.uvopt

    .......         0  2012-11-24 17:09  光电编码\guangdian_uvproj.bak

     文件       3954  2012-11-28 21:15  光电编码\HXA.c

     文件      16253  2012-11-28 21:15  光电编码\光电编码

     文件       3253  2012-11-28 20:56  光电编码\光电编码.c

     文件       5970  2012-11-28 21:15  光电编码\光电编码.hex

     文件         48  2012-11-28 21:15  光电编码\光电编码.lnp

     文件      10417  2012-11-28 21:15  光电编码\光电编码.LST

     文件      20408  2012-11-28 21:15  光电编码\光电编码.M51

     文件       7674  2012-11-28 21:15  光电编码\光电编码.OBJ

     文件        169  2012-11-28 21:16  光电编码\光电编码.plg

    .......     57310  2012-11-28 21:16  光电编码\光电编码.uvopt

    .......     13413  2012-11-24 19:08  光电编码\光电编码.uvproj

    .......     57306  2012-11-28 21:15  光电编码\光电编码_uvopt.bak

    .......     13247  2012-11-24 17:09  光电编码\光电编码_uvproj.bak

     目录          0  2012-11-28 21:16  光电编码

----------- ---------  ---------- -----  ----

               283926                    20


评论

共有 条评论