串口通信接收发送数据显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、接收数据

#include

#define Data_d P0

#define Data_w P2

#define uint unsigned int

#define uchar unsigned char

unsigned char flag;

unsigned char Duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88};// 显示段码值01234567

code const unsigned char Weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码

/*------------------------------------------------

延时子程序

------------------------------------------------*/

void delayms(unsigned int z)

{

unsigned int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

///*------------------------------------------------

// 定时器初始化子程序

//------------------------------------------------*/

//void Init_Timer0(void)

//{

// TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

// //TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出

// //TL0=0x00;

// EA=1; //总中断打开

// ET0=1; //定时器中断打开

// TR0=1; //定时器开关打开

//}

/*-----------------------------------------------

串口初始化

------------------------------------------------*/

void serial_init(void)

{

SCON = 0x50; /* SCON: 模式1, 8-bit UART, 使能接收REN=1,SM0=0,SM1=1 */

TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */

TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */ TR1 = 1; /* TR1: timer 1 run */ EA = 1; /*打开总中断*/

ES = 1; /*打开串口中断*/

}

void Display(uchar FirstBit,uchar Num)

{

uchar i;

for(i=0;i

{

Data_d=0; //清空数据,防止有交替重影

// dula=1; //段锁存

//dula=0;

Data_w=Weima[i+FirstBit]; //取位码

// wela=1; //位锁存

// wela=0;

Data_d=Duanma[i]; //取显示数据,段码

// dula=1; //段锁存

// dula=0;

}

}

void display(void)

{

unsigned char s_flag;

if(flag!=0xff)

{

delayms(5);

if(flag!=0xff)

{

s_flag=flag;

switch(s_flag)

{

case 0x00:Display(0,1);break;

case 0x01:Display(0,2);break;

case 0x02:Display(0,3);break;

case 0x03:Display(0,4);break;

case 0x04:Display(0,5);break;

case 0x05:Display(0,6);break;

case 0x06:Display(0,7);break;

case 0x07:Display(0,8);break;

default:break;

}

}

}

// return(0);

}

/******************************************************************/

/* 主函数*/

/******************************************************************/

void main (void)

{

serial_init();

while (1) /*主循环不做任何动作*/

{

}

}

/******************************************************************/

/* 串口中断程序*/

/******************************************************************/

void UART_SER (void) interrupt 4 //串行中断服务程序

{

unsigned char Temp; //定义临时变量

if(RI) //判断是接收中断产生

{

RI=0; //标志位清零

Temp=SBUF; //读入缓冲区的值

flag=SBUF;

flag=flag&0xff;

display();

//P1=Temp; //把值输出到P1口,用于观察

SBUF=Temp; //把接收到的值再发回电脑端

}

if(TI) //如果是发送标志位,清零

TI=0;

}

///*------------------------------------------------

// 定时器中断子程序

//------------------------------------------------*/

//void Timer0_isr(void) interrupt 1 using 1

//{

// TH0=(65536-10)/256; //重新赋值12M晶振计算,指令周期1uS,0.01MS,定时扫描

// TL0=(65536-10)*256;

相关文档
最新文档