打印
[活动专区]

【赛元95F】之二:UART0

[复制链接]
709|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
UART0, TE, AC, ST, TI
      串口通信模块在应用中比较重要,尤其是在调试程序时也是非常方便。本次实验即利用SC95F8617的全双工串行口UART0进行数据的收、发,是比较简单的一个小实验。主要目的是熟悉SC95F8617开发流程,并为后期实验建立一个串口调试平台。
一、实验资源
1、SC95F8617 demo板;
2、SC-LINK;
3、Keil C51 V9.60;
4、串口模块;
5、SSCOM V5.13.1串口高度助手

二、相关资源简介



SC95F8617的全双工串行口与传统51应该是一样的,利用以前学习过51的知识很容易上手。要注意的是在用定时器1作为波特率发生器时,定时器1必须停止计数,即TR1 = 0。

三、程序实现
程序中用定时器1作为波特率发生器,并使能了收、发中断。
<p>/**************************************.
使用TIMER1做为波特率发生器,Fsys = 32MHz; 波特率=115200;
用定时器2作为波特率发生器:BaudRate = Fsys / [TH1,TL1]
(注意:[TH1,TL1] 必须大于0x0010)  
**************************************/
void Uart0_Config(void)   
{
P2CON &= 0xFC;    //RX(P20)、TX(P21)均配置为带上拉输入
P2PH  |= 0x03;    //打开上拉电阻

SCON  |= 0X50;    //模式1,10位全双工异步通信,由1个起始位,8个数据位和1个
          //停止位组成,通信波特率可变,允许接收。
TMCON |= 0X02;
TH1 = (32000000 / 115200) / 256;   //波特率为T1的溢出时间;
TL1 = (32000000 / 115200) % 256;
TR1 = 0;     //TIMER1作波特率发生器,TIMER1停止计数,TR1=0
ET1 = 0;
EUART = 1;       //串口中断使能
EA = 1;      //打开总中断
}</p><p>
void Uart0_SendByte(unsigned char Byte)//发送一个字节
{
SBUF = Byte;
while(!TI);
TI = 0;
}</p><p>void Uart0_SendStr(unsigned char *str)//发送一个字符串
{
while(*str != '\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
  Uart0_SendByte(*str);
  str++;
}
}</p><p>
void Uart0_INT(void) interrupt 4
{
unsigned char Receive_temp;
if(TI)
{
  TI = 0;  
}
if(RI)
{
  RI = 0;
  Receive_temp = SBUF;
  SBUF = Receive_temp;
}
}
</p><p> 主程序</p><p>void main(void)
{
Uart0_Config();
Uart0_SendStr("SC95F8617 UART0 TEST");

while(1)
{
  
}
}</p>

程序编译后还要对一些参数进行配置:


四、实验结果


五、总结
      通过本次的小实验对SC95F8617的操作过程有了明确的认知,串口程序的正常运行也为下一步进行其它实验创造了条件。

使用特权

评论回复

相关帖子

沙发
598330983| | 2020-4-5 19:16 | 只看该作者
串扣很好用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14993

帖子

17

粉丝