这个程序我也在搞,把你修改一下儿就好了.
//设想先在主程序内部ram存入一组数据base[], //再调用debug_insert函数,把数据插入缓冲区 //然后调用串行中断程序从串口发出
//在Keil中编译前,设置时钟为18.432MHZ //调试时,全速运行, //打开KEIL的串行接收窗口,按键盘任意键,即可收到01234 # include<reg52.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, buff_cnt, 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;
db_head = db_tail = 0; buff_cnt = 0; }
int putchar(uchar c) { if (buff_cnt < DB_MAXSIZE) { db_buffer[db_tail] = c; // Put character into buffer db_tail++; // Increment pointer
buff_cnt++;
if (db_tail >= DB_MAXSIZE) // Pointer wrapping db_tail = 0; return 1; } else { return 0; // Buffer is full } }
//////////////////////////////////////////////////// //Function: debug_insert //description:把指向存储区的数据拷贝到缓冲区 //parameters:base -指针 指向要拷贝数据的头地址 void debug_insert(uchar idata * base, uchar size) { uchar i = 0;
if (!size || base == NULL) { return; }
while (buff_cnt < DB_MAXSIZE && i < size) { putchar(base[i++]); }
}
//////////////////////////////////////////////////////////////////// //Function: debug_output //description:串行中断程序,增加缓冲区头指针,如果指针不等于尾指针 // 输出下一个字节 ////////////////////////////////////////////////// void debug_output(void) interrupt 4 { while(buff_cnt > 0) { SBUF=db_buffer[db_head++]; buff_cnt--; if (db_head >= DB_MAXSIZE) // Pointer wrapping db_head = 0; while (TI == 0); TI = 0; } }
main() { uchar i; for (i = 0; i < 5; i++) base = (i+0x30);
debug_init();
debug_insert(base, 5); while (1); }
|
|