利用两片单片机进行通信,由单片机甲发送学号30至单片机乙,单片机乙接受到学号后用数码管或液晶屏显示学号30的程序
时间: 2024-05-12 10:13:32 浏览: 77
单片机甲(发送端)程序:
```c
#include <STC15F2K60S2.h>
#define FOSC 24000000L //系统时钟频率
#define BAUD 9600 //串口波特率
#define TIMER1_MS (65536-FOSC/12/1000) //定时器1初值
sbit P1_0 = P1^0; // 定义P1.0口
void InitUart() {
SCON = 0x50; //8位数据位,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装模式
TH1 = TL1 = TIMER1_MS; //设定定时器1初值
TR1 = 1; //启动定时器1
ES = 1; //使能串口中断
EA = 1; //开启总中断
}
void SendData(unsigned char dat) {
SBUF = dat; //将数据写入串口发送缓冲区
while(!TI); //等待数据发送完成
TI = 0; //清除发送完成标志
}
void SendString(unsigned char *s) {
while(*s) //遇到字符串结束符0时结束发送
SendData(*s++);
}
void main() {
InitUart(); //初始化串口
while(1) {
P1_0 = 1; //将P1.0口置高,表示开始发送数据
SendString("30"); //发送数据
P1_0 = 0; //将P1.0口置低,表示结束发送数据
delay(1000); //延时1秒钟
}
}
void Uart() interrupt 4 using 1 {
if(RI) { //接收到数据
RI = 0; //清除接收中断标志
}
if(TI) { //发送完成
TI = 0; //清除发送中断标志
}
}
```
单片机乙(接收端)程序:
```c
#include <STC15F2K60S2.h>
#define FOSC 24000000L //系统时钟频率
#define BAUD 9600 //串口波特率
#define TIMER1_MS (65536-FOSC/12/1000) //定时器1初值
sbit P1_0 = P1^0; // 定义P1.0口
sbit D0 = P2^0; //定义D0口
sbit D1 = P2^1; //定义D1口
sbit D2 = P2^2; //定义D2口
unsigned char uart_data; //串口接收到的数据
void InitUart() {
SCON = 0x50; //8位数据位,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装模式
TH1 = TL1 = TIMER1_MS; //设定定时器1初值
TR1 = 1; //启动定时器1
ES = 1; //使能串口中断
EA = 1; //开启总中断
}
void Display(unsigned char num) {
D0 = num % 10;
D1 = num / 10 % 10;
D2 = num / 100;
}
void main() {
InitUart(); //初始化串口
while(1) {
if(uart_data == '3' && SBUF == '0') { //判断接收到的数据是否为学号30
Display(30); //将学号30显示在数码管或液晶屏上
}
}
}
void Uart() interrupt 4 using 1 {
if(RI) { //接收到数据
uart_data = SBUF; //保存接收到的数据
RI = 0; //清除接收中断标志
}
if(TI) { //发送完成
TI = 0; //清除发送中断标志
}
}
```
阅读全文