超级终端使用
- 格式:doc
- 大小:86.00 KB
- 文档页数:18
有趣的串口之超级终端的玩法
题:有趣的串口之超级终端的玩法(基于51)
作:杜洋(doyoung)
时:2006年11月14日
源:
1. 导言
================================
本文为超级终端的应用总结文章,实验基于51单片机,对ARM和其它MPU同样适用。
某人,接听一位用户的电话,他问什么是超级终端。对于嵌入式系统开发工程师来说,问这个问题是
值的讨论的,我们应该不应该问这个问题呢?至少阅过本文您不会重蹈覆辙。
2. 了解超级终端
================================
在WINDOWS XP或是WINDOWS 2000操作系统下,在“「开始」菜单\程序\附件\通讯”目录下可以看到
“超级终端”。这是WINDOWS自带的通信终端工具,我们用它的串口通信功能。
在“文件/属性/连接到(选项卡)/连接时使用(项)”里设置 COM1(串口接啥就选啥),在“设置
...”里设置为“19200 8 无 1 无”。最后点击“呼叫/呼叫”行完事了。
好吧,没有介绍其它设备之前您是可以用超级终端自慰的(自己和自己玩)。将COM1串口的2、3引脚
短接(接错了把电脑搞炸了别找我),即是将发出的数据接收回来。在超级终端框里输入信息同样显示出
来,好像在用TXT记事本或是QQ聊天对话框一样。如果您这样玩的很开心那就不用再看下一节了,直到您
还想知道更有趣的知识。
3. 单片机平台建立
================================
断开串口COM1的2、3引脚吧,应该和单片机互动起来才有应用的价值。之前,我们要有一块拥有串口
功能的单片机实验板或是嵌入目标板,否则请您检查一下IE的地址栏,看看您是不是错输入了网址来到我
的博客,希望我的地址和黄色小说的地址字符并不接近。在百度里输入“单片机串口电路”,答案会挤进
您的眼睛里,那我就不费口水了。
全当您有了我们所需要的设备,在51的FLASH中写入下面的程序。在超级终端上会发现同样自慰的效
果。
---------
#i nclude
#i nclude
//BAUD SET == 19200 8 NOR 1 NOR
//主程序
void main()
{
unsigned char dat;
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80; //SMOD=1;
TH1 = 0xFD; //Baud:9600 fosc=11.0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
while(1)
{
if ( RI )
{
dat = SBUF; //接收数据 SBUF 为单片机的接收发送缓冲寄存器
RI = 0;
SBUF = dat; //发送数据
}
}
}
-----------------------
4. 有趣的功能
================================
向串口打印字符吧,应该是有趣的事了。您可以在超级终端上打出你想对女友说却又不敢说的话。还
可以把关键的字眼改变颜色、加亮或是闪烁显示,还可以用\n(换行)、\r(归位)、\x00(十六进制输
入)来设置一个美丽的图景。当然,这是大炮打蚊子,她看了不会感动的,就自己感动一下算了。
下面的程序里我用到了上面我提过的功能,有兴趣研究一下是一件好事,不然就看下一节。
#i nclude
#i nclude
void send_char_com(unsigned char ch);
void send_string_com(unsigned char *str);
void init_serialcomm(void);
void Delay(unsigned int a);
//串口初始化
void init_serialcomm(void) //btl == 19200
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80; //SMOD=1;
TH1 = 0xFD; //Baud:9600 fosc=11.0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if(RI)
{
unsigned char ch;
RI = 0;
send_string_com("\x0c");
//send_char_com(0x0c);
x_welcome (); //显示欢迎画面
x_menu ( );
}
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI == 0);
TI=0;
}
//向串口发送一个字符串,长度不限。
//应用:send_string_com("d9887321$");
void send_string_com(unsigned char *str)
{
while(*str != '\0')
{
send_char_com(*str);