ZGRHWY 发表于 2023-3-15 09:32

AT89C52和STM32F103ZE的串口相互通信

本帖最后由 侃遍天下无二人 于 2023-3-15 10:01 编辑

#include "stm32f10x.h"// Device header
#include "usart1.h"
#include "string.h"
#include "iic.h"
#include "delay.h"
#include "AT24C02.h"
#include "Led.h"
#include "Key.h"

uint32_ttemp_send=0xAA103232;
unsigned chartemp_send2;
unsigned char ByteSend={0};//发送的字节
unsigned char up[]={0xAA,0x10,0x32,0x32};

int main(void)
{
      int i,x=0;
      delay_init();
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
      Led_Init();
      Key_Init();
      UART5_Init(9600);
      while(1)
      {      
                for(i=0;i<4;i++)
                {
                        UART5_SenByte(up);
                        delay_ms(1000);
                }
                if(IT_U5.IT_flag == 1)
                        {
                              if(IT_U5.IT_read_buf==0xAA||IT_U5.IT_read_buf==0x10||IT_U5.IT_read_buf==0x32)
                              {      
                                        x++;
                                        if(x==4)
                                        {      
                                        LED1=!LED1;
                                        LED0=!LED0;
                                        }
                                        IT_U5.IT_flag=0;
                                        IT_U5.IT_len=0;
                                        memset(IT_U5.IT_read_buf,0,256);
                              }      
                        }
      }//strcmp
}



#include <REGX52.H>
#include "string.h"

//P30--RXD
//P31--TXD
typedef unsigned char uchar;
typedef unsigned int uint;

sbit s4=P3^2;//按键
uchar Buf;          //接收缓冲区
uchar R_flag;
uint i=0,x=0;
      uchar num;
unsigned char up[]={0xAA,0x10,0x32,0x32};

void ConfigUart();
uchar GetCh();
void GetString(uchar *buf);
void SendCh(uchar dat);
void SendString(uchar *str);


void int0()//外部中断请求
{
      IT0=0;
      EX0=1;
      EA=1;
}


void delay(int z)
{
          uint i,j;
for(i=0;i<z;i++)
for(j=0;j<114;j++);

}


void main()
{

      ConfigUart();
//      int0();
               
//      P2=0xff;
      while(1)
      {
                if(R_flag==1)
                {
                        if(num==0xAA||num==0x10||num==0x32)
                        {
                              P2=~P2;
                              x++;
                        }
                        if(x==4)
                        {
                              for(i=0;i<4;i++)
                              {
                                        SendCh(up);
                                        delay(1000);//按键消抖
                                        x=0;
                              }
                        }
                        R_flag=0;
                }
      }      
}

/*
*串口初始化
*/
void ConfigUart()
{
      TMOD &= 0x0F;                //高四位清0
      TMOD |= 0x20;   //定时器1方式2
      SCON= 0x50;                //
      TH1= 0xFD;    //9600
//      TH1= 0xFF;    //115200
      TL1= TH1;
      PCON = 0x00;                //叫地主!不加倍!!
      ES = 1;                            //打开串口中断
      EA = 1;                                        //打开总中断
      TR1 = 1;                              //打开定时器1
}
/*
*接收一个字符 OK
*/
uchar GetCh()
{
      uchar dat;

      while(!RI);
      dat = SBUF;
      RI = 0;
      return dat;      
}
/*
*接收一个字符串      ok
*保存到buf中      
*/
void GetString(uchar *buf)
{
      *buf = GetCh();
      while(*buf != '\r')         //CRT超级终端默认以'\r'回车符结尾
      {
                buf++;
                *buf = GetCh();
      }
      *buf = '\0';                   //添加结束符
}
/*
*发送一个字符         OK
*/
void SendCh(uchar dat)
{      
      SBUF = dat;
      while(!TI);
      TI = 0;               
}
/*
*发送一个字符串         OK
*/
void SendString(uchar *str)
{
      while(*str != '\0')
      {
                SendCh(*str);
                str++;      
      }
      SendCh('\r');          //回车
      SendCh('\n');          //换行
}

void InterruptUart(void) interrupt 4
{
   if(RI)
{
      num=SBUF;         
      R_flag=1;
      RI=0;
}
}

zhcj66 发表于 2023-3-15 11:00

这个应该是电子论坛的主题吧如阿莫论坛 等
页: [1]
查看完整版本: AT89C52和STM32F103ZE的串口相互通信