📄 用仿真器调试简单串口接收程序.txt
字号:
/********************************************************************/
/*试验串行口通信的例子 DieHeart. Sep 14th,2004 */
/********************************************************************/
//这是包含默认的寄存器头文件,
//该文件在keil自己的目录里,包含了所有52内核的寄存器定义。
#include
//这是特殊寄存器位定义,IO也是特殊寄存器的位
sbit key1=P3^2;
sbit key2=P3^5;
sbit key3=P2^4;
sbit key4=P2^5;
sbit led3=P1^0;
sbit led4=P1^1;
sbit led5=P1^2;
sbit led6=P1^3;
//包含_getkey读字符库函数,
//目的是确定标准输入是否为COM口,学习与MCU51的联机通信
#include
//这是设置串口模式的自定义函数,参数可以修改,只要与计算机的串行数据格式一致即可!
void stdio(void)
{
SCON = 0x50;//串口工作方式设置字节,1个起始位,8个数据位,1个停止位组成10位帧
PCON = 0x80;//波特率加倍模式
TMOD = 0x20;//COM2:自动重置初值的8位定时/计数器
TH1 = 0xf4;//串行口波特率发生器,=256-f/12/16/9600,f=22118400
TR1 = 1; //启动T1
TI = 1; //中断方式允许位
}
void main(void)
{
char key;
stdio();
while(1)
{
if(!key1) //检测key1是否按下,按下时程序会读到该位为0,平时为1
{
led3=0; //点亮LED3
led4=1;
led5=1;
led6=1;
printf("1"); //串行输出字符"1"
}
if(!key2) //检测key2是否按下,按下时程序会读到该位为0,平时为1
{
led3=1;
led4=0; //点亮LED4
led5=1;
led6=1;
printf("2"); //串行输出字符"2"
}
if(RI) //判断串口是否收到数据
{
key=_getkey(); //读串口数据
switch(key)
{
case 1: //从串口收到数据1
{
led3=1;
led4=1;
led5=0; //点亮LED5
led6=1;
printf("3"); //串行输出字符"3"
}
break;
case 2: //从串口收到数据2
{
led3=1;
led4=1;
led5=1;
led6=0; //点亮LED6
printf("4"); //串行输出字符"4"
}
break;
}
}
}
}
/****************************************************/
/* 使用方法: */
/* 将程序下载到仿真器,并置脱机运行模式 */
/* 保持仿真器与计算机的连接状态 */
/* 启动串口工具软件,并设置与单片机一致的波特率 */
/****************************************************/
/****************************************************/
/* 运行效果: */
/* 按KEY1,LED3亮,同时计算机接收到许多字符"3" */
/* 按KEY2,LED4亮,同时计算机接收到许多字符"4" */
/* OK啦,和昨天的一样! */
/* 从串口工具软件发送1, ? */
/* LED1亮,同时计算机接收到"1" */
/* 从串口工具软件发送2, */
/* LED2亮,同时计算机接收到"2" */
/* */
/* Hoho,OK! */
/* */
/* ^-^ DieHeart ^-^ */
/****************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -