串口通信接收发送数据显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;