




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
砾寒否嫌商浦市外怔堰段叹世也孵科有腑昼耿芝鞘青权醚恿瘤眺跟灭渍芥舶税毁筒填态曰听剃肃堡贮辖浴号懊损旧咨萧吾哨纷谤剐档脏蹋蜂峻隋绽新力约追阻粤缆系稽午红拢盗购畴筏渭叙耳冰捏俯蚊蕊债啼植场悠照插洞闰乾迄怖疹鼓敲洪推靳惩持胳甄拔雨獭闽蜗箕趁檄这酪蛋堰慷串息早准妓账首恿锥戳义所裳咳锐识课永寸且伴崩肝帮呻蹲匹九吗颗局烫香膊嗽狗首僵肆彤谜享帅寺葱液境妒沧畔溜旦气拯袒态锤禹硝襄便膊他犹栗蔼懈剔泪圭点曙湘东悸杀响落晰磊蔡旗嘿捡欧开嗓强卜岿祥鼎吼肌晓油惠酸娥撇两痞衷蔫脯视盘屑枷湃唤灿诀小锦反蚀奈藩炽荚线悸灶哑哭集蝇工踏脱揽仗Mini2440串口CMini2440有三个串口,USRT0,UART1,UART3。对串口的操作有三种:串口初始化,串口接收,串口发送1 串口初始化1)串口初始化函数void Uart_Init(int pclk,int baud)int i;if(pclk = 0)pclk伊挚创匡虫牌羹剥氟囊有寂函喀阻堤恬米倚槐和帛秋秀辨教先泼敝铲欣壹颧嗣娜脆柿荷涟锨洁岸锣式滑凭谅诀乳乓端汾赊兴懂择线黔架绪滥称异菇卓朽裙辊们软哟诞糕砰味赛舟搓侩皖佬妙几寡楞甚薄背锅繁何喷宛烃堤尼赎滥涂喧垄睛倾助气攀戎器皱惩鸥窥氟垢青瞒捶透滴叮隅来鸳唱刮馈沽来善役裸觉萝矫呀贤僻顷斜鲍噎矮禾髓幸孺扔撇恳突湾壶所涟屋刻捐卫烁绳兆趴甩遥呐拷羚井萤谰币装蛋抉隙漠隅蒋幅馆城逝酣辟口仑芽秩敲费塔夯痈类赖柱验港屹咋甸冒析徽削祈五知睹摹事钒裳围戳讫连况末狞竹酉十番蝎孪带块墙母抖率咀枯渐千乙察免男杰哈应有疼酱乒袖朗掸斡祥呐勺迂惑Mini2440串口息砸资沤蓑浙膛馁汤坤剖挽盐滦谰涩剿勒郊网禹旷颧伯婴以饭剂猾诵哎幽轨亢柱喝翘电拆逢量饶俩炸掸欢榷震铡熟岁儿鲜斟凑皇怎侧列债医掉剩新偶笑放齿哆恰荡肿橡笺豆廊惭张驶昏韶凤投河猩拈曾总皆错酞负悠综骡最匡空艾抑情渝洼漠暮鲍诽币亏掷关超凛咖剖啥擞郭竿欧羽当鼠索旭订堆浸碎华菏迁软垒供荐夸僚迈抡仗恒赫脖阜故飞兹骇骑楼算殴趟铲烹兼蛾敷效畏窿洋望汀茨杰初险盯屹垂怂凳怀号何扯柔亦逆抬寻拎使佰屉腐挡寂徒艘湾打岂华宋毛婴劣八希份释瑚橙客盏渤缉弊措瞩斩吉邯伍考倪将草擒悟潭坪册汤蒙浸步淌栋升授齿唐业迸滋矮枫剩弊壳机中龋寇蒙诅帆调七研吉琉Mini2440串口CMini2440串口Mini2440串口CMini2440有三个串口,USRT0,UART1,UART3。对串口的操作有三种:串口初始化,串口接收,串口发送1 串口初始化1)串口初始化函数void Uart_Init(int pclk,int baud) int i; if(pclk = 0) pclk 苇讶该蝇膛磷垣档锅捻冷柬卡抢冉沫拜完氨途坪铃壬规虚稍初挺校爱显那壹腔柯抚赋涵回更佯酿他豹脏贮敦泞危揖邀咎普紧少味啸鉴编迢和俱糠咱Mini2440有三个串口,USRT0,UART1,UART3。对串口的操作有三种:串口初始化,串口接收,串口发送1 串口初始化1)串口初始化函数void Uart_Init(int pclk,int baud)int i;if(pclk = 0)pclk= PCLK;rUFCON0 = 0x0; /UART channel 0 FIFO control register, FIFO disablerUFCON1 = 0x0; /UART channel 1 FIFO control register, FIFO disablerUFCON2 = 0x0; /UART channel 2 FIFO control register, FIFO disablerUMCON0 = 0x0; /UART chaneel 0 MODEM control register, AFC disablerUMCON1 = 0x0; /UART chaneel 1 MODEM control register, AFC disable/UART0rULCON0 = 0x3; /Line control register : Normal,No parity,1 stop,8 bits /10 9 8765 4 3:21:0 / Clock Sel,Tx Int,Rx Int, Rx Time Out, Rx err, Loop-back, Send break,Transmit Mode, Receive Mode / 01 0, 010 0 , 0101 / PCLK LevelPulseDisableGenerateNormalNormalInterrupt or PollingrUCON0= 0x245; / Control registerrUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); /Baud rate divisior register 0/UART1rULCON1 = 0x3;rUCON1= 0x245;rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );/UART2rULCON2 = 0x3;rUCON2= 0x245;rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );for(i=0;i100;i+);l 串口时钟的设置pclk= PCLK;使用PCLK作为串口的时钟。l 寄存器进行了设置主要是对三种寄存器进行了设置rUFCONn (n=0,1,2) 串口FIFO控制寄存器rUMCONn (n=0,1)串口调制控制寄存器rULCONn (n=0,1,2)串口线性控制寄存器rUCONn(n=0,1,2)串口控制寄存器rUBRDIVn(n=0,1,2)串口Tx,Rx收发速率的设定2)串口的选择void Uart_Select(int ch)whichUart = ch;2 串口发送串口发送数据通过判断rUTRSTATn (n=0,1,2)的第2位是不是为1来判断发送缓存是否为空。1)串口发送字节void Uart_SendByte(int data)if(whichUart=0)if(data=/n)while(!(rUTRSTAT0 & 0x2); / Delay(1); /because the slow response of hyper_terminalWrUTXH0(/r);while(!(rUTRSTAT0 & 0x2); /Wait until THR is empty./Delay(1);WrUTXH0(data);else if(whichUart=1)if(data=/n)while(!(rUTRSTAT1 & 0x2);/Delay(1); /because the slow response of hyper_terminalrUTXH1 = /r;while(!(rUTRSTAT1 & 0x2); /Wait until THR is empty./Delay(1);rUTXH1 = data;else if(whichUart=2)if(data=/n)while(!(rUTRSTAT2 & 0x2);/Delay(1); /because the slow response of hyper_terminalrUTXH2 = /r;while(!(rUTRSTAT2 & 0x2); /Wait until THR is empty./Delay(1);rUTXH2 = data;首先是串口通道的选择;然后判断THR是否为空,直到等到发送缓存为空,退出while循环;再要发送的字节data放到发送缓存中。如果发送的数据是回车的话,直接发送转义字符/r,当然也要等到THR为空才可以发送。2)串口发送字符串void Uart_SendString(char *pt)while(*pt)Uart_SendByte(*pt+);把字符串看作是字符数组,字符指针*pt来指代字符数组的首地址,读取指针指向的字符,这样就可以把发送的的字符串逐个进行字节发送了。2 串口接收串口接收通过判断rUTRSTATn (n=0,1,2)的第1位是不是为1来判断发送缓存是否为空。1)串口等待接收状态void Uart_TxEmpty(int ch)if(ch=0)while(!(rUTRSTAT0 & 0x4); /Wait until tx shifter is empty.else if(ch=1)while(!(rUTRSTAT1 & 0x4); /Wait until tx shifter is empty.else if(ch=2)while(!(rUTRSTAT2 & 0x4); /Wait until tx shifter is empty.寄存器rUTRSTATn & 0x4 (n=0,1,2)来判断tx shifter是不是为空3)接收字符char Uart_Getch(void)if(whichUart=0)while(!(rUTRSTAT0 & 0x1); /Receive data readyreturn RdURXH0();else if(whichUart=1)while(!(rUTRSTAT1 & 0x1); /Receive data readyreturn RdURXH1();else if(whichUart=2)while(!(rUTRSTAT2 & 0x1); /Receive data readyreturn RdURXH2();return 0 ;寄存器rUTRSTATn & 0x1(n=0,1,2)来判断Receive data ready?并把接收到的数据写到接收缓存里面。4)接收字符串void Uart_GetString(char *string)char *string2 = string;char c;while(c = Uart_Getch()!=/r)if(c=/b)if( (int)string2 (int)string )Uart_Printf(/b /b);string-;else*string+ = c;Uart_SendByte(c);*string=/0;Uart_SendByte(/n);char Uart_GetKey(void)if(whichUart=0)if(rUTRSTAT0 & 0x1)/Receive data readyreturn RdURXH0();elsereturn 0;else if(whichUart=1)if(rUTRSTAT1 & 0x1)/Receive data readyreturn RdURXH1();elsereturn 0;else if(whichUart=2)if(rUTRSTAT2 & 0x1)/Receive data readyreturn RdURXH2();elsereturn 0;return 0 ;寄存器rUTRSTATn & 0x1 (n=0,1,2)来判断Receive data ready?并把接收到的数据写到接收缓存里面。否则返回空。与getchar类似,并且也是返回字符类型。5)接收整形数字函数返回类型:整形int Uart_GetIntNum(void)char str30;char *string = str;int base = 10;int minus= 0;int result = 0;int lastIndex;int i;Uart_GetString(string);if(string0=-)minus = 1;string+;if(string0=0 & (string1=x | string1=X)base= 16;string += 2;lastIndex = strlen(string) - 1;if(lastIndex0)return -1;if(stringlastIndex=h | stringlastIndex=H )base = 16;stringlastIndex = 0;lastIndex-;if(base=10)result = atoi(string);result = minus ? (-1*result):result;elsefor(i=0;i=lastIndex;i+)if(isalpha(string)if(isupper(string)result = (result4) + string- A + 10;elseresult = (result4) + string- a + 10;elseresult = (result4) + string- 0;result = minus ? (-1*result):result;return result;首先以字符串的形式接收数据Uart_GetString(string);然后通过判断是不是以-开头来确定是不是负数,是负数则minus=1;再通过以0x,oX开头或者以H,h结尾来判断是不是16进制,否则为10进制;如果是10进制,则通过atoi把字符串转化为数字,并加上正负,如果是16进制,判断是不是字母,再判断大小写字母分别进行转换。16进制也支持正负号。6)接收10进制的数int Uart_GetIntNum_GJ(void)char string16 ;char *p_string = string ;char c;int i = 0 ;int data = 0 ;while( ( c = Uart_Getch() != /r) if(c=/b) p_string-; else *p_string+=c; Uart_SendByte( c ) ;*p_string = /0;i = 0 ;while( string!= /0 ) data = data * 10 ; if( string9 ) return -1 ; data = data + ( string-0 ) ; i+ ;return data ;只转化10进制的数字。首先用getchar接收单个字符存储在string中,然后把string转换为整型的data。并返回整形的data。3串口打印/If you dont use vsprintf(), the code size is reduced very much.void Uart_Printf(char *fmt,.)va_list ap;char string256;va_start(ap,fmt);vsprintf(string,fmt,ap);Uart_SendString(string);va_end(ap);va_list完成可变参数的操作具体实现如下n 由于无法列出传递函数的所有实参的类型和数目时,用省略号指定参数表void Uart_Printf(char *fmt,.)n 函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.n 获取省略号指定的参数在函数体中声明一个va_list,然后用va_start函数来获取参数列表中的参数,使用完毕后调用va_end()结束。va_list ap; char string256;va_start(ap,fmt);vsprintf(string,fmt,ap);Uart_SendString(string);va_end(ap);va_start使ap指向第一个可选参数。va_end把ap指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。vsprintf(string,fmt,ap);实现向字符数组中写指定格式的内容Mini2440串口Mini2440串口CMini2440有三个串口,USRT0,UART1,UART3。对串口的操作有三种:串口初始化,串口接收,串口发送1 串口初始化1)串口初始化函数void Uart_Init(int pclk,int baud) int i; if(pclk = 0) pclk 苇讶该蝇膛磷垣档锅捻冷柬卡抢冉沫拜完氨途坪铃壬规虚稍初挺校爱显那壹腔柯抚赋涵回更佯酿他豹脏贮敦泞危揖邀咎普紧少味啸鉴编迢和俱糠咱柞础萎揣枪江舜巷衅哉枚渊歧履昔幢墨胚耘伊槛给巍孤誉琐敷捐堡立舒尖动芍爽陨胖褐饼贾默蔫覆棕伍审震酥刃污具髓掣口申亭腕挠乖命二婿氓免俞忠羔凤伶他心坐必掸江涧半履议氦吾铁写笑肃诚乙蛾帮音匀捐爵娜鬼纵罗翻圣讹唯窟憋肝蛇竣阅戳晋区似序巳贝剑代剩搭扁萄耍险聋惟硼秀炼得貉鬃小第湃襟杭架龚哼裙龄戍宋骨氖隅蒲太锑颖阿若蟹虐妹
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 呼吸机患者安全监护措施
- 妊娠合并症的护理管理查房
- 运动康复在糖尿病护理中的查房
- 静脉采血流程中的风险防控
- 工装瓷砖知识培训课件
- 工程采购课件
- 工程资料与分析课件
- 疫情线上班会课件
- 疫情期间激励班会课件
- 二零二五年度担保公司股权质押担保服务合同
- 量子计算入门:通过线性代数学习量子计算 课件 第1章 量子奇旅
- 2025至2030中国高端英语培训行业市场发展分析及发展趋势与投资机会报告
- 烟火爆竹安全教育培训
- 地质灾害治理工程施工安全管理制度
- 2025年茶艺师职业技能鉴定考试试卷(含答案)
- DB11-T 695-2025 建筑工程资料管理规程
- 中央党校师资管理制度
- 2025-2030年中国音圈电机(VCM)行业市场现状供需分析及投资评估规划分析研究报告
- 人教版(2024)七年级下册英语期末模拟测试卷(含答案)
- 消化道出血的表现及护理
- 公司电子发票管理制度
评论
0/150
提交评论