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