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

📄 main.c

📁 本原码功能是单片机接收和发送串口字符的例子
💻 C
字号:
#include <AT89X52.H>
#include <stdlib.h>
#include <String.h>
#include <intrins.h>

#define fosc 11059200
#define baud 9600

unsigned char Dly,Dp;
unsigned char temp = 0;

idata SerialBuf[40];
bit SerialRecvFlag;
idata char SerialRecvCnt;

void initial (void);

unsigned char test = 0;

void main(void)
{
  unsigned int i; 
  ET0 = 1;      //定时器 0 开中断
  EX0 = 1;
  TL0=0x00;
  TH0=0xB8;
  initial();
  TR0 = 1;
  ES=1;
  EA=1;
  Dly = 1;

  test = 0;
  while(1)
  {
  	if (test == 1)
	{
      test = 0;
///?     		P3_3 = ~P3_3;
     		P3_4 = ~P3_4;
///?     		for (i = 0; i<1000 ; i++);
     }
   }
 }

void time0(void) interrupt 1 using 2
{
//?   TH0 = 0x70;
//?   Dp = 1;
 }

void initial (void)
{
//  T2CON  = 0X30;   // RCLK, TCLK = 1 1 ,强迫定时器2做波特率产生器 
  SCON   = 0X50;
  PCON = 0;
  //RCAP2L = (65536-(fosc/32/baud))%256;   //;TL2  默认波特率为 115200
  //RCAP2H = (65536-(fosc/32/baud))/256;   //;TL2  默认波特率为 115200
  //TR2    = 1;
  //TL1 = 0XFD;
  //TH1 = 0XFD;
  TMOD = 0X21;
  TH1 = 256-fosc/32/12/baud;
  TL1 = 256-fosc/32/12/baud;
  TR1 = 1;

  // 清除接收缓存区
  //for(tmp=0;tmp<sizeof(SerialBuf);tmp++) SerialBuf[tmp] = 0;
  memset(SerialBuf,0,sizeof(SerialBuf));
  SerialRecvCnt=0;
  SerialRecvFlag=0;
}

/****************************/
/* 函数名: Serial_Interrupt */
/* 参  数: 无               */
/* 返回值: 无               */
/* 功  能: 串口中断         */
/****************************/
void Serial_Interrupt(void) interrupt 4 using 1
{  
  if (RI) 
  {
    RI =0;
    if(SBUF==0x10)
	{
	  test = 1;
	  SBUF = 0x0B;
///?	  while(!TI);
///?	  TI = 0;
	}
  }
}

⌨️ 快捷键说明

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