/设想先在主程序内部ram存入一组数据base[],再调用debug_insert函数,把数据插入缓冲区 //然后调用串行中断程序从串口发出
# include<reg52.h> # include<stdio.h>
#ifndef NULL #define NULL ((void*) 0L) #endif
#define DB_MAXSIZE 0x10 // #define uchar unsigned char #define uint unsigned int
idata uchar base[5] _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 { bit sendit=0;
RI=0;
if (TI)
db_head++;
if (db_head==DB_MAXSIZE)//是否超出范围 { db_head=0; { if (db_head!=db_tail)
SBUF=db_buffer[db_head];//送下一个字节
//sendit=0; } } }
main( ) { uchar i ;
for(i=0;i<5;i++) base=i; db_head=db_tail=0;
debug_init(); debug_insert( base,5); while(1); }
输出老是一个乱码,问题在“SBUF=db_buffer[db_head];//送下一个字节“ 只能传一个字节,改成SBUF=db_buffer[db_head++]还不中
那位大虾帮帮忙
|