📄 接受数据.c
字号:
//*******************************************************************************************//
// 程序名:接受数据.c
// 功能:串口接受一个1到8的字符,产生中断,从P1口输出控制8个小灯。
//调用函数:void shuc(char d); void delayms(unsigned char ms);
// 输入:用串口调试程序,从键盘输入1到8的其中一个。
// 输出:从P1口输出控制信号。
// 设计者:于宇宙 日期:2007年 7 月 3 日
// 修改者: 日期: 年 月 日
// 版本:
//********************************************************************************************//
#include <reg52.h>
#include <absacc.h>
void shuc(char d); //字符输出函数
void delayms(unsigned char ms);//延时函数
sbit k0= P1^0;
sbit k1= P1^1;
sbit k2= P1^2;
sbit k3= P1^3;
sbit k4= P1^4;
sbit k5= P1^5;
sbit k6= P1^6;
sbit k7= P1^7;
//char a[]="Hao deng liang \n";
char r=0,j=0,c=0;
//-----------------------------------------------------------------------------------------------------
main()
{
//-----------------------------------------------------------------------------------------------------
IE=0x00; //中断控制设计
EA=1; //中断全部打开
ES=1; //串口中断打开
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 启动定时器1
RI = 0; //允许接受字符
TI = 0;
P1=0;
P2=0x00;
//------------------------------------------------------------------------------------------------------
while(1)
{
delayms(1);
if(r=='1') {P1=0;k0=1;shuc(r);P2=0x80;P0=0x06;r=0;}
if(r=='2') {P1=0;k1=1;shuc(r);P2=0x40;P0=0x5b;r=0;}
if(r=='3') {P1=0;k2=1;shuc(r);P2=0x20;P0=0x4f;r=0;}
if(r=='4') {P1=0;k3=1;shuc(r);P2=0x10;P0=0x66;r=0;}
if(r=='5') {P1=0;k4=1;shuc(r);P2=0x80;P0=0x6d;r=0;}
if(r=='6') {P1=0;k5=1;shuc(r);P2=0x40;P0=0x7d;r=0;}
if(r=='7') {P1=0;k6=1;shuc(r);P2=0x20;P0=0x07;r=0;}
if(r=='8') {P1=0;k7=1;shuc(r);P2=0x10;P0=0x7f;r=0;}
if(r=='z') {P1=0;shuc(r);P2=0xff;P0=0x00;r=0;}
delayms(1);
}//end while
}//end main
//-----------------------------------------------------------------------------------------------------
//***********************************************************************************************//
// 函数名:intersvr0(void)
// 功能:串口中断处理程序。
//调用函数:
//输入参数:r,RI.
//输出参数:
// 说明:
//************************************************************************************************//
void intersvr0(void) interrupt 4 using 1//串口中断服务函数
{
if(RI) //接受中断
{
RI = 0;
r = SBUF; // 暂存接收到的数据
}
if(TI) //发送中断
{
TI = 0;
}
}
//----------------------------------------------------------------------------------------------
//***********************************************************************************************//
// 函数名:shuc(char d)
// 功能:从串口输出控制的说明。
//调用函数:
//输入参数:d,j.
//输出参数:
// 说明:
//************************************************************************************************//
void shuc(char d)
{
SBUF =d;
// while(!TI);
// TI = 0;
// j=0;
//while(j<=15)
// {
// if(a[j] != '\0')
// {
// SBUF = a[j];
// while(!TI);
// TI = 0;
// }
// j++;
}
//}
//-----------------------------------------------------------------------------------------------------
//***********************************************************************************************//
// 函数名:delayms(unsigned char ms)
// 功能:延时1毫秒函数。
//调用函数:
//输入参数:ms.
//输出参数:
// 说明:
//************************************************************************************************//
void delayms(unsigned char ms) // 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -