整理电脑资料
阅读了下农民讲习所的一片PDF**
写了个完整的代码例子
供初学者学习下
**来源 农民讲习所 发的一片 设计者.叶志伟
《建立通用处理程序》
涉及到 指针使用 内存分配 串口处理等
注意 其中 串口使用了函数 未处理重入函数
/*********************************************************************************
[email=**@CPU]**@CPU[/email] @ AT89S52
[email=**@RAM]**@RAM[/email] @ 256Bytes
[email=**@ROM]**@ROM[/email] @ 0x0000-0x1fff
**@时间@ 12/19/09
**@环境@ keil uv3 v8.16
**@整理@ jerkoh
**@功能@ 51单片机模块化设计
**@注意@ 请保留以下字样-> 版权.设计者.叶志伟.农民讲习所.21IcBBS
*********************************************************************************/
/*********************************************************************************
**包含头文件
*********************************************************************************/
#include <reg52.h>
/*********************************************************************************
**定义功能原型
*********************************************************************************/
void Memory_Init(unsigned char *pRamEnd);
void Memory_Destory(void);
void Memory_MemSet(unsigned char idata *pRam,unsigned char mChar,unsigned char mLen);
unsigned char idata *Memory_Malloc(unsigned char mSize);
void Queue_Init(void);
void Queue_Destory(void);
void Queue_Push(struct QueueBuffer *pQueueBuffer,unsigned char mData);
void Queue_Clear(struct QueueBuffer *pQueueBuffer);
unsigned char Queue_Pop(struct QueueBuffer *pQueueBuffer);
unsigned char Queue_Read(struct QueueBuffer *pQueueBuffer,unsigned char mId);
unsigned int Queue_Num(struct QueueBuffer *pQueueBuffer);
struct QueueBuffer *Queue_Register(unsigned int mSize);
void Uart08_Init(unsigned char SendBufferMax,unsigned char ReciBufferMax,unsigned char mBaud);
void Uart08_Destory(void);
/*********************************************************************************
**定义结构体
*********************************************************************************/
struct QueueBuffer /*缓冲队列结构体*/
{ /*结构体内成员是指针占3字节*/
unsigned char *aBufferStart; /*缓冲区起始点*/
unsigned char *aBufferEnd; /*缓冲区结束点*/
unsigned char *pIn; /*写指针*/
unsigned char *pOut; /*读指针*/
unsigned int mCount; /*缓冲区数据个数*/
};
struct Uart0
{
struct QueueBuffer *psSend; /*发送队列指针*/
struct QueueBuffer *psReci; /*接收队列指针*/
};
/*********************************************************************************
**申明全局变量及宏定义
*********************************************************************************/
#define mSendBufferMax 32 /*发送缓冲区最大数据个数*/
#define mReciBufferMax 32 /*接收缓冲区最大数据个数*/
#define Baud_9600_11M 6 /*9600 8/n/1*/
/*宏定义串口发送*/
#define Uart08_Push(x) do{Queue_Push(sUart0.psSend,x);\
if(!fUart0_Send_OK){fUart0_Send_OK=1;TI=1;};\
}while(0)
/*宏定义串口接收*/
#define Uart08_Pop() Queue_Pop(sUart0.psReci)
/*宏定义读串口指定ID号*/
#define Uart08_Read(x) Queue_Read(sUart0.psReci,x)
/*宏定义读串口接受区数据个数*/
#define Uart08_ReciNum() Queue_Num(sUart0.psReci)
/*宏定义串口发送区清0*/
#define Uart08_SendClear(x) do{Queue_Clear(sUart0.psend);}while(0);
/*宏定义串口接收区清0*/
#define Uart08_ReciClear(x) do{Queue_Clear(sUart0.pReci);}while(0);
data struct Uart0 sUart0; /*定义串口的结构体*/
bit fUart0_Send_OK; /*发送结束标记*/
unsigned char idata *pRamEnd; /*内存指针尾*/
/*用于测试的缓冲区*/
unsigned char idata TestBuffer[32]={"Hello World!"}; |