⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scom.c

📁 51单片机串口测试程序(KEIL C51)
💻 C
字号:
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 

#include <reg51.h>
#include <string.h>
#define INBUF_LEN 4   //数据长度
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3 , flag,temp,ch;
bit     read_flag=0;
sbit  BEEP=P1^3;
sbit  relay=P1^2;
sbit clk=P1^0;
sbit din=P1^1;
unsigned char  code ledcode[]={0x11,0x7D,0x23,0x29,0x4D, 0x89,0x81,0x3D,0x01,0x09,0x05,\
0xc1,0x8f,0x61,0x83,0x87};//数码管段码 
void  leddisp(unsigned char num);
//初始化串口
void init_serialcomm(void)
{
     SCON=0x50;              //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收
     PCON=0x00;
     ES=1;   //开串口中断
     TMOD=0x21;   //定时器工作于方式2,自动装载方式
     TL1=0XFD;
     TH1=0XFD;
     TR1=1;
     EA=1;

}
//中断服务程序
void serial () interrupt 4 using 3 

{    
   if(RI)
    { 
	 RI=0;//清中断标志
     ch=SBUF;//读取接收寄存器
	 ch=SBUF;
     leddisp(ch);//调用数码管显示子程序,将接收到的数据显示到数码管上
   }
  if(TI)
    {
	TI=0;//清发送标志位	
	}
}
//送数码管显示
void  leddisp(unsigned char num)
    {
	 unsigned char i,k;
	 k=ledcode[num];
	 for(i=0;i<8;i++)//共8位
	    {
	     if((k&0x01)==0x01)	
		 din=1;
		 else 
		 din=0;
		 clk=0;
		 clk=1;
		 k>>=1; 	
		}
	
	}



main()

{    

 init_serialcomm();  //初始化串口  
 leddisp(0);//数码管显示0
 leddisp(1);//数码管显示1
 leddisp(2);//数码管显示2
 leddisp(3);//数码管显示3
    while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -