久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4292|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

mage128串口加超級終端打印程序。。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:83710 發(fā)表于 2015-6-24 21:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <inttypes.h>
  4. #include <avr/sfr_defs.h>
  5. #include <util/delay.h>
  6. #include <avr/pgmspace.h>
  7. #include <stdio.h>
  8. #include<stdarg.h>
  9. //使用的是mage128的板子,這個是抄別人的,覺得很好用,里面的可變參數(shù)的
  10. //理解起來還是有點兒困難的,不過myprintf()這個函數(shù)很好用,如果電腦沒有
  11. //串口,也可以用usb轉(zhuǎn)串口來實現(xiàn),需要安裝usb轉(zhuǎn)串口驅(qū)動,硬件管理器里面可
  12. //以看到安裝后的usb-serial的com口,還有設(shè)置好波特率
  13. //初始化串口
  14. void init_uart(void)
  15. {
  16. //UART 初始化
  17. UCSR1B=_BV(RXEN1)|_BV(TXEN1);/*(1<<RXCIE0)|(1<<TXCIE0)|*/
  18. UBRR1L=103; //9600 baud 6MHz:38 4MHz:25 16MHZ:103
  19. }
  20. static int uart_putchar(char c)
  21. {
  22. if (c == '\n')
  23. uart_putchar('\r');
  24. loop_until_bit_is_set(UCSR1A, UDRE1);
  25. UDR1 = c;
  26. //mage128中有兩個串口可以使用,這里使用了usart1,來發(fā)送數(shù)據(jù),如果只有一個串口只要把寄存器中的1去掉就可以了,
  27. //這個函數(shù)可以將數(shù)據(jù)發(fā)送給串口調(diào)試軟件,也可以通過xp自帶的超級終端來查看所以不一定非要下載串口調(diào)試軟件,
  28. //當(dāng)然串口調(diào)試軟件用起來功能多
  29. return 0;
  30. }
  31. static int uart_getchar()
  32. {
  33. loop_until_bit_is_set(UCSR1A,RXC1);
  34. return UDR1;
  35. //mage128中有兩個串口可以使用,這里使用了usart1,來發(fā)送數(shù)據(jù),如果只有一個串口只要把寄存器中的1去掉就可以了,
  36. //這個函數(shù)可以將數(shù)據(jù)發(fā)送給串口調(diào)試軟件,也可以通過xp自帶的超級終端
  37. }
  38. static void myprintf(const char* fmt,...)
  39. {
  40.     const char* s;
  41.     int16_t d;
  42.     char buf[16];
  43.     va_list ap;
  44.     va_start(ap,fmt);   // 將ap指向fmt(即可變參數(shù)的第一個?下一個?)
  45.     while (*fmt)
  46.     {
  47.         if (*fmt != '%')//如果不是%,則正常發(fā)送,這里不用for來發(fā)送所有非%字符的,原因是因為if語句里面有continue語句,//可以跳出循環(huán)執(zhí)行下一個while循環(huán),將所有的非%字符發(fā)送完畢,很牛逼,值得學(xué)習(xí)
  48.         {
  49.             uart_putchar(*fmt++);   // 正常發(fā)送
  50.             continue;      //發(fā)送完畢以后跳出繼續(xù)下一個循環(huán),這樣就可以繼續(xù)發(fā)送下一個字符
  51.         }
  52.   //由于上面的if以及continue的組合導(dǎo)致非%字符時程序不可能運行到這里,所以一旦運行到這里就說明*fmt++得到的是一個
  53.   //%字符
  54.         switch (*++fmt) //此時fmt先加一再取該地址處的數(shù)據(jù)原因在于上面是再得到了一個%以后才運行到此的,
  55.   //所以此時不需要理會%了,只要讀出%后的字符就可以
  56.         {
  57.          case 's':
  58.              s = va_arg(ap,const char*); // 將ap指針指向的數(shù)據(jù)類型轉(zhuǎn)換成char*型,并返回之,此時返回一個字符串的首地址
  59.              for (; *s; s++)
  60.                  uart_putchar(*s);
  61.              break;
  62.          case 'x':
  63.              d = va_arg(ap,int);      // 將ap指針指向的數(shù)據(jù)類型轉(zhuǎn)換成int型,并返回之
  64.              itoa(d,buf,16);          // 將整型d以16進制轉(zhuǎn)到buf中
  65.              for (s = buf; *s; s++)
  66.                  uart_putchar(*s);
  67.              break;
  68.    case 'd':
  69.              d = va_arg(ap,int);
  70.              itoa(d,buf,10);          // 將整型d以10進制轉(zhuǎn)到buf中
  71.              for (s = buf; *s; s++)
  72.                  uart_putchar(*s);
  73.              break;
  74.          default:
  75.               uart_putchar(*fmt);  //%號后面出現(xiàn)的非格式制定字符則按常理發(fā)送打印
  76.              break;
  77.         }
  78.         fmt++;        //判斷%號后面的字符以后,跳出switch語句,繼續(xù)while循環(huán),發(fā)送打印后面的字符
  79. }
  80.     va_end(ap);
  81. }
  82. int main(void)
  83. {
  84.     init_uart();// 初始化串口
  85.     uint8_t i = 100;
  86.     char * s = "Word!";
  87.     myprintf("\n\rHello %s\n\r0x%x = %d\n",s,i,i);
  88.     return 0;
  89. }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:91580 發(fā)表于 2016-3-5 19:46 | 只看該作者
感謝分享,我有需要。
回復(fù)

使用道具 舉報

板凳
ID:135047 發(fā)表于 2016-7-26 14:54 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩电影一区二区 | 成人精品鲁一区一区二区 | 久草网站 | 国产精品久久久久久久粉嫩 | 97caoporn国产免费人人 | 在线欧美小视频 | 尤物在线精品视频 | 久久综合九九 | 欧美精品一区二区三区蜜桃视频 | 亚洲国产精品精华素 | 国产精品久久久久久久久久久新郎 | 亚洲国产精品第一区二区 | 欧美日韩成人一区二区 | 天堂色 | 中文成人在线 | 91天堂网 | 免费一区| 欧美精品一区二区在线观看 | 视频一区二区在线观看 | 亚洲一区精品在线 | 91视频免费黄 | 久久久亚洲 | 成人免费一级 | 欧美a在线 | 日本三级电影免费 | 欧美精品一二三 | 国产精品免费在线 | 久久久久久国模大尺度人体 | 日韩欧美在线视频观看 | 欧美一区二区黄 | 一区二区三区高清不卡 | 男人的天堂视频网站 | 一级亚洲| 国产乱码精品一品二品 | 久色视频在线 | 国产精品成人久久久久 | 国产夜恋视频在线观看 | 日韩免费电影 | 日韩在线视频免费观看 | 国产视频在线观看一区二区三区 | 91精品国产欧美一区二区成人 |