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

📄 rs232_c51.c

📁 Keil C51开发的一个单片机串口通信的源代码
💻 C
字号:
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 

//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 

#include <reg51.h>
#include<stdio.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  cp=P1^1;
sbit  DIR=P1^2;
int i;
unsigned int xdata *RAMDATA;     /*定义RAM地址指针*/
unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;


void init_serialcomm(void)
{
     SCON=0x50;   //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收
     PCON=0x00;
     ES=1;
     TMOD=0x21;   //定时器工作于方式2,自动装载方式
     TH0=(65536-1000)%256;
     TL0=(65536-1000)/256;
     TL1=0xfd;
     TH1=0xfd;
     ET0=1;
     TR0=1;
     TR1=1;
//     TI=0;
     EA=1;
//   TI=1; 
     RAMDATA=0x1F45;
}

void serial () interrupt 4 using 3 
{    
   if(RI)
	  { RI=0;
		 ch=SBUF;
       TI=1;           //置SBUF空
       switch(ch)
			{
				case 0x01 :printf("A");  TI=0;break;
				case 0x02 :printf("B");  TI=0;break;
				case 0x03 :printf("C");  TI=0;break;
				case 0x04 :printf("D");  TI=0;break;
				default  :printf("fg");   TI=0;break;
			}
		}
}

//向串口发送一个字符 

void timer0() interrupt 1 using 3
{
     // char i; 
       flag++;
       TH0=0x00;
       TL0=0x00;
          if(flag==10)
	         { // cp=!cp;
              // for(i=0;i<6;i++)
              P2=0x25;
              TI=1;
              temp=*RAMDATA;
              printf("%c",temp);
              TI=0;
              //   RAMDATA--;
              flag=0;
             }
}

      

//主程序

main()
{    
  init_serialcomm();  //初始化串口 
	//向6264中送数据
  	{ 
    *RAMDATA=0x33;
  	}
  while(1)
   { 
    *RAMDATA=0x33;;    
   }
}

⌨️ 快捷键说明

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