资源描述
//单片机连接PC的超级中断,实现单片机和计算机互相通信
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Choice;
uchar Flag;
//void DelayMS(uint);//延时函数
void Sendchar(uchar);//字符发送函数
void Sends(uchar *s);//发送函数
void Serial_init();//初始化串口
void Send_menu();//默认开机时超级终端菜单
void Process();//处理用户选择函数
//*************************************主函数************************//
void main()
{
Serial_init(); //初始化
Send_menu(); //发送默认菜单
while(1)
{
if(Flag) //如果有用户向52发送命令
Process(); //,则处理
}
}
/* void DelayMS(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<10;i++);
}
*/
void Sendchar(uchar c)
{
//TI = 0;
SBUF = c; //发送 (字符)
while(!TI);
TI=0;
// DelayMS(10); // 不延时易出错 试试while(!TI);TI=0;
}
/*void Sends(uchar *s)
{
uchar temp;
temp = *s;
while(temp != 0)
{
if (temp == '\n')
{
Sendchar('\r'); //返回行首
}
Sendchar(temp);
s++;
temp = *s;
}
}*/
void Sends(uchar *s) //比较上面的简单
{
while(*s)
{
if (*s == '\n')
{
Sendchar('\r'); //返回行首
}
Sendchar(*s);
s++;
}
}
void Serial_init()
{
SCON=0x50; //串口模式1,允许接收
TMOD=0x20; //T1工作模式2
TH1=0xfd; //波特率9600
TL1=0xfd;
PCON=0x00; //波特率不倍增
EA=1; //总中断开关打开
ES=1; //允许串口中断
TR1=1; //启动定时器1
}
void Send_menu()
{
Sends(" ||**欢迎使用单片机测试系统^_^**||\n\n\n");
Sends(" 请输入[1-5]\n");
Sends(" 1.发光二极管测试 \n");
Sends(" 2.8——LED测试 \n");
Sends(" 3.1602测试 \n");
Sends(" 4.串口测试 \n");
Sends(" 5.readme \n");
Sendchar(0x0a); Sendchar(0x0a); Sendchar(0x0a); //换行
Sendchar('\r'); //返回行首
}
void Process()
{
switch (Choice)
{
case '1':
Sends("发光二极管测试中......\n退出请按'0'键 \n ");P2=0xfe;Flag=0;
break;
case '2':
Sends("8—LED 测试中...... \n退出请按'0'键 \n ");P2=0xfc;Flag=0;
break;
case '3':
Sends("1602测试中......\n退出请按'0'键\n ");P2=0xf8;Flag=0;
break;
case '4':
Sends("串口测试中......\n退出请按'0'键\n ");P2=0xf0;Flag=0;
break;
case '5':
Sends("*****************readme**************************\n");Flag=0;
Sends("made by lxc on Feb.10\n联系方式:liuxuecheng@");Sends("\n");P2=0xe0;
break;
case '0':
Sends("\n");
Sends(" \n");Send_menu();P2=0xff;Flag=0;
break;
default:
Sends("**********只能输入(1-5)**********\n");
Sends("\n");Flag=0;
break;
}
}
void Receive_int() interrupt 4
{
if(RI)
{
RI=0; //清接收中断标志
Flag = 1;
Choice = SBUF; //得到用户选择
}
}
//如果原文转载请表明出处。
展开阅读全文