原创 C8051F学习笔记4:UART0

2009-5-4 21:10 9788 14 14 分类: MCU/ 嵌入式

C<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8051F学习笔记4UART0<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


     C8051F有一个UART0


UART0特点:


1)     UART0是一个异步、全双工串口;


2)     UART0具有增强的波特率发生器电路,波特率由定时器1工作在8位自动重载方式产生;


3)     定时器1应被配置为方式2,即8位自动重装载方式。定时器1的重装载值应设置为使其溢出频率为所期望的波特率频率的两倍;


 

d2821b0a-3007-4a4e-bd03-999865357895.JPG


 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


4)     定时器1的时钟可以在6个时钟源中选择:SYSCLKSYSCLK/4SYSCLK/12SYSCLK/48、外部振荡器时钟/8和外部输入T1


5)     UART0的波特率由下面方程决定;



 


524b8371-d912-43df-a0f9-b019c4ed9151.JPG


 


其中T1CLK是定时器1时钟频率,TH1是定时器1的高字节(重装载值);


6)  UART0 有两个相关的特殊功能寄存器:


串行控制寄存器SCON0和串行数据缓冲器 SBUF0


用同一个 SBUF0 地址可以访问发送寄存器和接收寄存器。


SBUF0 时自动访问发送寄存器;


SBUF0 时自动访问接收寄存器,不可能从发送数据寄存器中读数据。


7)  如果UART0中断被允许:


每次发送完成  SCON0中的TI0位被置‘1’,接收到数据字节SCON0中的RI0位被置‘1’时将产生中断。


CPU转向中断服务程序时硬件不清除UART0中断标志。中断标志必须用软件清除,这就允许软件查询UART0中断的原因(发送完成或接收完成)。


 


由于对UART0相关寄存器的配置比较繁琐,所以借助Silicon Labs IDE软件的配置向导(Configuration Wizard)


 



            a9c104c9-25bb-4c2a-b8f5-28578bbab3d8.JPG


 


1.    UART Mode UART模式选择


8 Bit UART 8UART


每个数据字节共使用10位:一个起始位、8个数据位(LSB在先)和一个停止位。数据从TX0引脚发送,在RX0引脚接收。在接收时,8个数据位存入SBUF0,停止位进入RB80SCON0.2)。



 


点击看大图


                                                              8UART时序图


 


9 Bit UART 9UART


9UART方式,每个数据字节共使用11位:一个起始位、8个数据位(LSB在先)、一个可编程的第九位和一个停止位。


第九发送数据位由TB80SCON0.3)中的值决定,由用户软件赋值。它可以被赋值为PSW中的奇偶位P(用于错误检测),或用于多处理器通信。在接收时,第九数据位进入RB80SCON0.2),停止位被忽略。



 


点击看大图


                                                           8UART时序图


 


2.    Multiprocessor Communications Enable


UART Mode选相应位时,此选项相应可选


UART Mode="8" bit UART,可选下面两个选项


Logic level of stop bit ignored


RI0 will only be activated if stop bit is logic level 1


 


UART Mode="9" bit UART,可选下面两个选项


Logic level of ninth bit ignored


RI0 is set and an interrupt is generated only when the ninth bit is logic 1


 


      可参考SCON0的位7和位5



 

点击看大图 


      默认是8UART,停止位逻辑电平忽略。


 


3.    Receive Enable UART接收允许


通常是允许UART0接收,所以


REN0=1;


 


4.    Configure UART Interrupts 配置UART中断



 


05710560-4bad-4f22-8319-541743aeeb8d.JPG


允许UART中断(Enable UART0 Interrupt)


允许总中断   (Enable All Interrupts)


 


  IE = 0x90;   //IE7   EA =1   总中断允许


           //IE4   ES0=1   UART0中断允许位


 



3b25c855-7fdf-4f4c-989a-4df158180471.JPG


 


 


中断优先级设置


每个中断源都可以被独立地编程为两个优先级中的一个:低优先级或高优先级。一个低优先级的中断服务程序可以被高优先级的中断所中断,但高优先级的中断不能被中断。如果这两个中断的优先级相同,则由固定的优先级顺序决定哪一个中断先得到服务。



 

点击看大图 


 


5 Configure UART Baud Rate 配置波特率


   



1e321af9-4a42-464b-8d96-a7e09b448316.JPG


 


首先先选择振荡频率(Change Clock Frequency)C8051学习笔记1对震荡器的配置有详细的描述,这里就不详说了,配制成内振荡器+4倍乘法选择器,系统时钟为24MHz


    CLKMUL    = 0x80;


for (i = 0; i < 20; i++);    // Wait 5us for initialization


CLKMUL    |= 0xC0;


while ((CLKMUL & 0x20) == 0);


CLKSEL    = 0x02;


OSCICN    = 0x83;



 


32ed298a-9b2e-4b51-b786-c79df03f8cb0.JPG


 


选择波特率(Target Baud Rate)为19200bps,T1时钟自动配置成SYSCLK/4 (Prescaled Clock Inputs)。要注意,最后配置出来的实际波特率为19230bps,是有误差的,只要误差小于0.45%,串口通信时就不会有误码。


同时打开定时器1(Enable Timer)


     TCON      = 0x40;  //TR1=1


        TMOD      = 0x20;


CKCON     = 0x01;


TH1       = 0x64;


 


6.    Configure Port I/O 配置优先权交叉译码器


 



点击看大图 


 


注意:


要注意的是,首先要使能优先权交叉译码器(Enable Crossbar)


1为使端口P0P1P2.0 ~ P2.3工作在标准端口I/O输入/输出方式,交叉开关必须被使能。当交叉开关被禁止时,端口输出驱动器被禁止。P2.4 ~ P2.7P3.0总是作为标准GPIO使用。


2未被交叉开关分配的端口引脚和未被模拟外设使用的端口引脚都可以作为通用I/O


 


UART0管脚分配到P0.4P0.5,还有一个系统时钟输出,便于检测,SYSCLK分配到P0.0。全都是数字管脚,推挽输出。


    P0MDOUT   = 0x31;


XBR0      = 0x09;


XBR1      = 0x40;


 


 


    下面程序是系统时钟(SYSCLK)24MHz,波特率为19200bps,上电复位后PC机串口调试助手显示: blog.ednchina.com/tengjingshu


PC机通过串口向C8051F发送字符,C8051F串口回传这个字符。


 https://static.assets-stash.eet-china.com/album/old-resources/2009/5/4/d4f57ad3-09f1-415e-8736-4d1722ad8d05.rar


 

由于C8051F的电源是3.3V,所以RS232电平转换芯片采用MAX3232,我也换过用MAX232,好像也行J

文章评论2条评论)

登录后参与讨论

用户1012002 2011-6-12 19:09

我的QQ:24732458

用户1012002 2011-6-12 18:58

弱弱的问一下: TI0=1;//SCON.1 Configuration Wizard 2配置上哪里体现啊?
相关推荐阅读
藤井树 2015-10-12 14:43
印制电路板的抗干扰设计 zz
印制电路板的抗干扰设计     作者:中船重工集团第707所 肖麟芬   摘   要:本文以印制电路板的电磁兼容性为核心,分析了电磁干扰的产生机理...
藤井树 2013-10-22 15:32
2010.5.30 黄草梁上包饺子一日登山活动——摘韭菜篇
        上次桃花节的时候也有野韭菜,那时候的我连草和韭菜叶分不清,才回去的韭菜也不敢吃,哈哈,这次可算真正见识了韭菜,黄草梁也叫韭菜梁,因为满山遍野都是野韭菜而闻名,比较圆比较粗的就是野韭...
藤井树 2013-10-22 15:28
2010.5.30 黄草梁上包饺子一日登山活动——包饺子篇
摘韭菜回来,大家已经忙开了 我也装模作样地“工作着” 哈哈,还不让我包,包饺子是技术活,一定要皮薄馅厚才有资格包,像我这样的只能旁观了 摘的韭菜应该足够了,旁边那个袋子是我摘来带回学校的 ...
藤井树 2013-08-09 15:19
datasheet下载网站整理(查IC芯片手册)【原创】
*************************************************************************         作为电子工程师,芯片的dat...
藤井树 2010-06-04 00:21
陈伟宁王辉一家捐助渠道(北京菲亚特—英菲尼迪)
       王辉的最新消息请关注 http://chenweining.org/       目前事故责任认定已经出来了——陈家全责。        发信人: program (程序), 信区: D...
藤井树 2010-06-01 13:43
2010.5.30 黄草梁上包饺子一日登山活动——美景篇
这天不得不说的是天空,蓝蓝的天空,白白的云    绿油油的山脊  我、洪涛哥哥、huangna妹妹还有她同事小艾走在黄草梁上    在蓝天白云下合影       阳光照过来,景色真美 象鼻山,走不...
我要评论
2
14
关闭 站长推荐上一条 /2 下一条