概述
实现功能:51单片机(STC89C52)接收来自stm32的信号并打印在数码管上;
51单片机通过按键按下发送信号控制stm32单片机的LED灯亮灭。
注意事项:两个单片机要共地;
波特率要一致(9600);
51端选择串口工作方式1,stm32端串口设置字长8,无校验位;
主代码如下
51端代码
#include "reg52.h"
#include "smg.h"
#include "public.h"
#include "intrins.h"
#define MATRIX_button P1
#define LED_PORT P0
static u8 rec;
//static u8 rec_diplay;
sbit
led = P2^1;
sbit beep = P2^5;
sbit led2 = P2^6;
sbit led3 = P2^7;
u8 ret[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
u8 scan_button2()
{
static u8 ret1 = 0;
static u8 ret2 = 0;
MATRIX_button = 0xf0;//行
if(MATRIX_button != 0xf0)
{
delay_us(1000);
if(MATRIX_button != 0xf0)
{
switch(MATRIX_button)
{
case 0x70:ret1 = 0;break;
case 0xb0:ret1 = 1;break;
case 0xd0:ret1 = 2;break;
case 0xe0:ret1 = 3;break;
}
MATRIX_button = 0x0f;
if(MATRIX_button != 0x0f)
{
switch(MATRIX_button)
{
case 0x07:ret2 = 0;break;
case 0x0b:ret2 = 1;break;
case 0x0d:ret2 = 2;break;
case 0x0e:ret2 = 3;break;
}
}
while(MATRIX_button != 0x0f);
return ret[ret1][ret2];
}
return 0;
}
}
void uart_init()
{
TMOD |= 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
SCON |=0x50;
EA = 1;
ES = 1;
TR1 = 1;
}
void main()
{
char key_set;
uart_init();
while(1)
{
key_set = scan_button2();
if(key_set>0)
{
SBUF = key_set+48;
}
smg_display(rec-48,8);
//delay_us(100);
}
}
void uart() interrupt 4
{
u16 t = 600;
if(RI)
{
rec = SBUF;
while(t--)
{
smg_display(rec-48,8);
}
if(rec == 49) led2 = !led2;
else if(rec == 50) led3 = !led3;
RI = 0;
}
}
32端:
#include "stm32f10x.h"
#include "usart1.h"
#include "stdio.h"
#include "delay.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 i ;
//u16 count,i,times;
delay_init();
led_init();
key_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
my_USART1();
while(1)
{
i = key_scan(0);
switch(i)
{
case 1:USART_SendData(USART1,49);break;
case 2:USART_SendData(USART1,50);break;
case 3:USART_SendData(USART1,51);break;
//case 1:printf("1");break;
//case 2:printf("2");break;
//case 3:printf("3");break;
}
}
}
void USART1_IRQHandler()
{
u8 rec;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
rec = USART_ReceiveData(USART1);
if(rec == 49)
LED1 = !LED1;
else if(rec == 50)
LED2 =!LED2;
}
}
最后
以上就是健康百褶裙为你收集整理的STM32与51单片机进行串口通信的全部内容,希望文章能够帮你解决STM32与51单片机进行串口通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复