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;
}
} 这个应该是电子论坛的主题吧如阿莫论坛 等
页:
[1]