历史上的今天
今天是:2024年11月13日(星期三)
2019年11月13日 | mage128串口加超级终端打印程序
2019-11-13 来源:51hei
#include #include #include #include #include #include #include #include //使用的是mage128的板子,这个是抄别人的,觉得很好用,里面的可变参数的 //理解起来还是有点儿困难的,不过myprintf()这个函数很好用,如果电脑没有 //串口,也可以用usb转串口来实现,需要安装usb转串口驱动,硬件管理器里面可 //以看到安装后的usb-serial的com口,还有设置好波特率 //初始化串口 void init_uart(void) { //UART 初始化 UCSR1B=_BV(RXEN1)|_BV(TXEN1);/*(1< } static int uart_putchar(char c) { if (c == 'n') uart_putchar('r'); loop_until_bit_is_set(UCSR1A, UDRE1); UDR1 = c; //mage128中有两个串口可以使用,这里使用了usart1,来发送数据,如果只有一个串口只要把寄存器中的1去掉就可以了, //这个函数可以将数据发送给串口调试软件,也可以通过xp自带的超级终端来查看所以不一定非要下载串口调试软件, //当然串口调试软件用起来功能多 return 0; } static int uart_getchar() { loop_until_bit_is_set(UCSR1A,RXC1); return UDR1; //mage128中有两个串口可以使用,这里使用了usart1,来发送数据,如果只有一个串口只要把寄存器中的1去掉就可以了, //这个函数可以将数据发送给串口调试软件,也可以通过xp自带的超级终端 } static void myprintf(const char* fmt,...) { const char* s; int16_t d; char buf[16]; va_list ap; va_start(ap,fmt); // 将ap指向fmt(即可变参数的第一个?下一个?) while (*fmt) { if (*fmt != '%')//如果不是%,则正常发送,这里不用for来发送所有非%字符的,原因是因为if语句里面有continue语句,//可以跳出循环执行下一个while循环,将所有的非%字符发送完毕,很牛逼,值得学习 { uart_putchar(*fmt++); // 正常发送 continue; //发送完毕以后跳出继续下一个循环,这样就可以继续发送下一个字符 } //由于上面的if以及continue的组合导致非%字符时程序不可能运行到这里,所以一旦运行到这里就说明*fmt++得到的是一个 //%字符 switch (*++fmt) //此时fmt先加一再取该地址处的数据原因在于上面是再得到了一个%以后才运行到此的, //所以此时不需要理会%了,只要读出%后的字符就可以 { case 's': s = va_arg(ap,const char*); // 将ap指针指向的数据类型转换成char*型,并返回之,此时返回一个字符串的首地址 for (; *s; s++) uart_putchar(*s); break; case 'x': d = va_arg(ap,int); // 将ap指针指向的数据类型转换成int型,并返回之 itoa(d,buf,16); // 将整型d以16进制转到buf中 for (s = buf; *s; s++) uart_putchar(*s); break; case 'd': d = va_arg(ap,int); itoa(d,buf,10); // 将整型d以10进制转到buf中 for (s = buf; *s; s++) uart_putchar(*s); break; default: uart_putchar(*fmt); //%号后面出现的非格式制定字符则按常理发送打印 break; } fmt++; //判断%号后面的字符以后,跳出switch语句,继续while循环,发送打印后面的字符 } va_end(ap); } int main(void) { init_uart();// 初始化串口 uint8_t i = 100; char * s = "Word!"; myprintf("nrHello %snr0x%x = %dn",s,i,i); return 0; }
下一篇:avr继电器+1602程序
史海拾趣
|
请问各位大侠,我在做wince下用TCPMP解码图片,但是我想将图片绘制在我提供的DC上面该怎么做? 我开发的平台是三星2530,在此之前我做过三星2440下面相同的程序,能将图片解码到我提供的DC上面 ...… 查看全部问答> |
|
请问在ce5.0的platform builder中用cec editor如何添加一个dll文件? 请问在ce5.0的platform builder中用cec editor如何添加一个dll文件?… 查看全部问答> |
|
牛人关于IC设计流程说明:1:Datasheet定义,这个是市场、AE、RD共同完成;2:电路设计,RD完成;3:Layout, Layout Engineer完成,但RD指导并配合(算RD部门);4:IC测试电路,RD定义测试电路和方法,AE完成PCB Layout(此AE一般是跟踪本项目的 ...… 查看全部问答> |
|
基于MSP430F149+nRF905无线数传模块的调试心得 调试nRF905无线模块近一个星期之久,下面细说一下基于MSP430F149+nRF905的调试步骤。 l 看到很多网友提出 First:测试nRF905模块是否正常工作 对于发射机 进入发射状态31脚1.5V&nbs ...… 查看全部问答> |
|
8月14日和8月15日 , 飞思卡尔FTF2012中国站在北京国贸大饭店隆重举行。阿牛哥一直关注着FTF盛会,无论是前一段时间FTF2012美国站的报道,还有阿牛哥应邀加过FTF2010上海,FTF2011深圳的盛会。这是一个所有工程师朋友都期待的盛 ...… 查看全部问答> |
|
小生最近在用LM3S9D90,ADC用高速转换(500K的转换速度算快吗?),因此使用DMA进行数据搬移。有两点我是一直搞不懂的: 1、 DMA仲裁机制是干嘛用的? 2、 ADC的缓冲是否一定要32位的? 以下是节选ADC和DMA初始化程序: ...… 查看全部问答> |
|
卖全新未拆封的LM3S811开发套件,C2000LauchPad 以及430LauchPad 要毕业了,才发现有没拆封的开发板:LM3S811卖100,c2000LAUCHpad卖50,430那个卖15.需要的联系马化腾:694311468… 查看全部问答> |




