//设想先在主程序内部ram存入一组数据base[],再调用debug_insert函数,把数据插入缓冲区 //然后调用串行中断程序从串口发出
#include<reg52.h> #include<stdio.h> #include<intrins.h>
#define uchar unsigned char #define uint unsigned int
#ifndef NULL #define NULL ((void*)0L) #endif
#define DB_MAXSIZE 0x10
idata uchar base[10] _at_ 0x40 ;
uchar db_head, db_tail,db_buffer[DB_MAXSIZE];
//Function:debug_init //description:缓冲区指针设为0
//////////////////////////////////////////////////
void debug_init(void)
{ SCON=0x50; PCON=0x00; TMOD=0x20;
TH1=0xfb;//波特率9600 18.432MHZ ES=1;//开放串行中断
EA=1;
TR1=1;
}
////////////////////////////////////////////////////
//Function: debug_insert
//description:把指向存储区的数据拷贝到缓冲区
//parameters:base -指针 指向要拷贝数据的头地址
void debug_insert(uchar idata *base,uchar size) { bit sendit=0;//标志位,表明是否要进行串行初始化
uchar i=0;
if (!size||base==NULL)
{return;}
if (db_tail==db_head)
sendit=1;
while((db_tail==db_head) || (i<size)) //缓冲区有空间且数据区还有数据时进行拷贝 { db_buffer[db_tail]=base;//拷贝当前字节
i++;
db_tail++;//移动指针
if (db_tail==DB_MAXSIZE)//指针是否超出范围 { db_tail=0; } }
if(sendit)//是否要传输一个字节 {
SBUF=db_buffer[db_head]; } }
////////////////////////////////////////////////////////////////////
//Function: debug_output
//description:串行中断程序,增加缓冲区头指针,如果指针不等于尾指针 // 输出下一个字节 ////////////////////////////////////////////////// void debug_output(void) interrupt 4 { RI=0; if (TI) db_head++; TI=0; if (db_head ==DB_MAXSIZE)//是否超出范围 { db_head=0; } if (db_head!=db_tail) SBUF=db_buffer[db_head]; } ////////////////////////////////////////////////////// main( ) { uchar i ;
for(i=0;i<10;i++) base=i;
debug_init(); debug_insert( base,10); while(1) {} }
|