串口通信模块在应用中比较重要,尤其是在调试程序时也是非常方便。本次实验即利用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的操作过程有了明确的认知,串口程序的正常运行也为下一步进行其它实验创造了条件。
|