久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
mage128串口加超級終端打印程序。。
[打印本頁]
作者:
hongniu
時間:
2015-6-24 21:21
標題:
mage128串口加超級終端打印程序。。
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <avr/sfr_defs.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include<stdarg.h>
//使用的是mage128的板子,這個是抄別人的,覺得很好用,里面的可變參數(shù)的
//理解起來還是有點兒困難的,不過myprintf()這個函數(shù)很好用,如果電腦沒有
//串口,也可以用usb轉(zhuǎn)串口來實現(xiàn),需要安裝usb轉(zhuǎn)串口驅(qū)動,硬件管理器里面可
//以看到安裝后的usb-serial的com口,還有設(shè)置好波特率
//初始化串口
void init_uart(void)
{
//UART 初始化
UCSR1B=_BV(RXEN1)|_BV(TXEN1);/*(1<<RXCIE0)|(1<<TXCIE0)|*/
UBRR1L=103; //9600 baud 6MHz:38 4MHz:25 16MHZ:103
}
static int uart_putchar(char c)
{
if (c == '\n')
uart_putchar('\r');
loop_until_bit_is_set(UCSR1A, UDRE1);
UDR1 = c;
//mage128中有兩個串口可以使用,這里使用了usart1,來發(fā)送數(shù)據(jù),如果只有一個串口只要把寄存器中的1去掉就可以了,
//這個函數(shù)可以將數(shù)據(jù)發(fā)送給串口調(diào)試軟件,也可以通過xp自帶的超級終端來查看所以不一定非要下載串口調(diào)試軟件,
//當然串口調(diào)試軟件用起來功能多
return 0;
}
static int uart_getchar()
{
loop_until_bit_is_set(UCSR1A,RXC1);
return UDR1;
//mage128中有兩個串口可以使用,這里使用了usart1,來發(fā)送數(shù)據(jù),如果只有一個串口只要把寄存器中的1去掉就可以了,
//這個函數(shù)可以將數(shù)據(jù)發(fā)送給串口調(diào)試軟件,也可以通過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(即可變參數(shù)的第一個?下一個?)
while (*fmt)
{
if (*fmt != '%')//如果不是%,則正常發(fā)送,這里不用for來發(fā)送所有非%字符的,原因是因為if語句里面有continue語句,//可以跳出循環(huán)執(zhí)行下一個while循環(huán),將所有的非%字符發(fā)送完畢,很牛逼,值得學(xué)習(xí)
{
uart_putchar(*fmt++); // 正常發(fā)送
continue; //發(fā)送完畢以后跳出繼續(xù)下一個循環(huán),這樣就可以繼續(xù)發(fā)送下一個字符
}
//由于上面的if以及continue的組合導(dǎo)致非%字符時程序不可能運行到這里,所以一旦運行到這里就說明*fmt++得到的是一個
//%字符
switch (*++fmt) //此時fmt先加一再取該地址處的數(shù)據(jù)原因在于上面是再得到了一個%以后才運行到此的,
//所以此時不需要理會%了,只要讀出%后的字符就可以
{
case 's':
s = va_arg(ap,const char*); // 將ap指針指向的數(shù)據(jù)類型轉(zhuǎn)換成char*型,并返回之,此時返回一個字符串的首地址
for (; *s; s++)
uart_putchar(*s);
break;
case 'x':
d = va_arg(ap,int); // 將ap指針指向的數(shù)據(jù)類型轉(zhuǎn)換成int型,并返回之
itoa(d,buf,16); // 將整型d以16進制轉(zhuǎn)到buf中
for (s = buf; *s; s++)
uart_putchar(*s);
break;
case 'd':
d = va_arg(ap,int);
itoa(d,buf,10); // 將整型d以10進制轉(zhuǎn)到buf中
for (s = buf; *s; s++)
uart_putchar(*s);
break;
default:
uart_putchar(*fmt); //%號后面出現(xiàn)的非格式制定字符則按常理發(fā)送打印
break;
}
fmt++; //判斷%號后面的字符以后,跳出switch語句,繼續(xù)while循環(huán),發(fā)送打印后面的字符
}
va_end(ap);
}
int main(void)
{
init_uart();// 初始化串口
uint8_t i = 100;
char * s = "Word!";
myprintf("\n\rHello %s\n\r0x%x = %d\n",s,i,i);
return 0;
}
復(fù)制代碼
作者:
fsss007
時間:
2016-3-5 19:46
感謝分享,我有需要。
作者:
lihaokang
時間:
2016-7-26 14:54
謝謝樓主
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲高清在线
|
亚洲精品在线免费
|
成人激情视频网
|
欧美日韩一区二区三区在线观看
|
国产丝袜一区二区三区免费视频
|
欧美极品一区二区
|
作爱视频免费观看
|
精品在线一区二区
|
久久黄色
|
亚洲国产偷
|
亚洲二区精品
|
久久久久久国产精品免费免费狐狸
|
国产精品一区二区三区久久
|
九九av
|
大久
|
一区二区三区四区不卡
|
精品网
|
日韩和的一区二在线
|
亚洲国产aⅴ成人精品无吗 国产精品永久在线观看
|
日本在线视频一区二区
|
久久亚洲二区
|
a级黄色毛片免费播放视频 国产精品视频在线观看
|
久久久青草婷婷精品综合日韩
|
国产一区三区视频
|
国产在线视频一区二区
|
国产a区
|
国产一区二区三区在线
|
男女网站免费
|
女人毛片a毛片久久人人
|
国产激情第一页
|
亚洲一区视频在线
|
欧美亚洲高清
|
国产精品区二区三区日本
|
日韩一区二区三区在线播放
|
成人av色
|
日韩毛片免费视频
|
91福利影院
|
91精品国产综合久久香蕉922
|
国产精品美女久久久免费
|
国产精品视频
|
国产成人精品一区二区三区在线观看
|