本帖最后由 lisingch 于 2018-9-26 20:56 编辑
这次是利用UART0进行数据收发实验,单片机将接收到的数据原样转发。此实验的目的是为方便其它后续实验。
一、实验环境
1、Keil MDK51 9.59
2、SC-LINK
3、SC92F8003的DEMO硬件板
4、USB转TTL模块
5、串口调试助手 sscom5.13.1
二、实验过程
1、串口选择UART0,引脚为TX0(P1.5)、RX0(P1.6)与USB转TTL模块相连接。UART0的初始化程序直接选用了官方的DEMO。如:
/*****************************************************
*函数名称:void Uart0_Init(uint Freq,unsigned long int baud)
*函数功能:Uart0中断初始化
*入口参数:Freq-主频,baud-波特率
*出口参数:Freq,baud
*****************************************************/
void Uart0_Init(unsigned int Freq,unsigned long int baud) //选择Timer1作为波特率信号发生器
{
P1CON &= 0x9F; //TX/RX设置为输入带上拉
P1PH |= 0x60;
SCON |= 0X50; //设置通信方式为模式一,允许接收
TMCON |= 0X02; //定时器T1频率源自于fSYS
TMOD |= 0X20; //8位自动重载定时器,溢出时将TH1存放的值自动重装入TL1
PCON |= 0X80; //SMOD=1 串行端口在系统时钟的1/4下运行
TH1 = (Freq * 1000000 / baud) >> 8; //波特率为T1的溢出时间;
TL1 = Freq * 1000000 /baud;
TR1 = 0; //T1停止计数
ET1 = 0; //关闭TIMER1中断
EUART = 1; //开启Uart0中断
EA = 1; //打开所有的中断
}
在这里与传统51不同的是要对TX及RX引脚进行设置,即将其设置为输入带上拉模式。另一点传统51的串口中断使能位为“ES”,这里将其定义为“EUART”,使用时要注意。
2、其它程序比较简单,串口发送、接收均采用了中断方式。当收到数据后再转发,利用串口调试助手的配合即可观察到实验现象。
void Urat0Int(void) interrupt 4
{
unsigned char SerialBuff[1]; //用于存放接收数据
unsigned char tmp;
EA = 0;
tmp = ReceiveNByte(1,SerialBuff);
if(tmp == 0)
{
SendNByte(1,SerialBuff);
}
EA = 1;
}
3、实验现象
三、总结
实验时发现一个小问题,USB转TTL模块与DEMO板及PC连接后程序无法下载,必须将USB转TTL模块从PC机上拔下才行。后面尝试了这样的操作步骤可以不用拔下模块也可以下载了,即:先在串口调试助手中点击“关闭串口”,然后在Keil中点击“Build”,再点击“Download”就可以下载了。不知道是不是SC LINK与UART0的端口“打架”了。
|