了解超级终端
本文为超级终端的应用总结**,实验基于51单片机,对ARM和其它MPU同样适用。在WINDOWS XP或是WINDOWS 2000操作系统下,在“「开始」菜单\程序\附件\通讯”目录下可以看到“超级终端”。这是WINDOWS自带的通信终端工具,我们用它的串口通信功能。在“文件/属性/连接到(选项卡)/连接时使用(项)”里设置 COM1(串口接啥就选啥),在“设置...”里设置为“19200 8 无 1 无”。最后点击“呼叫/呼叫”行完事了。好吧,没有介绍其它设备之前您是可以用超级终端自慰的(自己和自己玩)。将COM1串口的2、3引脚短接(接错了把电脑搞炸了别找我),即是将发出的数据接收回来。在超级终端框里输入信息同样显示出来,好像在用TXT记事本或是QQ聊天对话框一样。如果您这样玩的很开心那就不用再看下一节了,直到您还想知道更有趣的知识。
单片机平台建立
断开串口COM1的2、3引脚吧,应该和单片机互动起来才有应用的价值。之前,我们要有一块拥有串口功能的单片机实验板或是嵌入目标板,否则请您检查一下IE的地址栏,看看您是不是错输入了网址来到我的网站,希望我的地址和**的地址字符并不接近。在百度里输入“单片机串口电路”,答案会挤进您的眼睛里,那我就不费口水了。全当您有了我们所需要的设备,在51的FLASH中写入下面的程序。
#include <AT89X51.h>
#include <string.h>
//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; //发送数据
}
}
}
有趣的功能
向串口打印字符吧,应该是有趣的事了。您可以在超级终端上显示出操作界面。还可以把关键的字眼改变颜色、加亮或是闪烁显示,还可以用\n(换行)、\r(归位)、\x00(十六进制输入)来设置一个美丽的图景。下面的程序里我用到上面提过的功能,有兴趣研究一下是一件好事,不然就看下一节。
#i nclude <AT89X51.h>
#i nclude <string.h>
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);
*str++;
}
*str = 0;
}
//欢迎画面(启动时显示)
void x_welcome ( void ){
send_string_com("\x0c\n\r\033[1;34m");
send_string_com("欢迎使用串口控制平台 ");
send_string_com("\n\rby DoYoung V1.0 2006.11.11");
}
//
void x_menu ( void ){
send_string_com("\n\n\r\033[1;31mUART> \033[1;30m");
send_string_com("请输入功能序号: ");
send_string_com("\n\r\033[1;31mdoyoung> \033[1;30m");
}
void x_run ( void ){
send_string_com("\b\x5c");
Delay(200);
send_string_com("\b|");
Delay(200);
send_string_com("\b/");
Delay(200);
send_string_com("\b-");
Delay(200);
}
void Delay(unsigned int a){
unsigned char i;
while( --a != 0){
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
} //i 从0加到125,CPU大概就耗时1毫秒
}
//主程序
main(){
init_serialcomm(); //初始化串口
x_welcome (); //显示欢迎画面
x_menu ();
while(1){
x_run ( ) ;
}
}
|