前言:
今天有两个项目,分别为:
串口接收:

串口发送:

如上图将文件放在Keli5 中即可,然后烧录在单片机中就行了

烧录软件用的是STC-ISP,不知道怎么安装的可以去看江科大的视频:
【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.bilibili.com/video/BV1Mb411e7re?p=2&vd_source=ada7b122ae16cc583b4add52ad89fd5e
串口接收源代码:
头文件要记得宏定义和重定义,避免重复调用:
#ifndef _Timer0_h_//名字根据文件名定义即可
#define _Timer0_h_
//声明函数……
#endif
main.c
//接收程序
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"
unsigned char Sec;
void main(){
UATE_Init();//初始化
while(1){
UATE_SendByte(Sec);//发送字节
Sec++;//每秒递增
Delay(1000);
}
}
UART.c
#include <STC89C5xRC.H>
//初始化串口
//void UART_Init(){
// SCON=0x40;//0100 0000
// PCON=0;
// //&只有在两个位都为1时结果位才是1,而|只要有一个位为1结果位就是1
// TMOD &= 0x0F; //设置定时器模式,高四位清0,低四位不变
// TMOD |= 0x20; //设置定时器模式,高四位设计成0010,低四位不变,定时器1,模式2
// TL0 = 0x66; //设置定时初值
// TH0 = 0xFC; //设置定时初值
// TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时
// ET0=1;//允许中断
// EA=1;//允许总中断
// PT0=0;//低优先级
//}
void UATE_Init() //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
// AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
// AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
//发送字节(只发送,不接受)
void UATE_SendByte(unsigned char Byte){
SBUF=Byte;//传入字节数据
while(TI==0);//发送循环,发送完TI=1;
TI=0;//软件复位
}
UART.h
//UART.h
#ifndef __UART_H__
#define __UART_H__
void UATE_Init();
void UATE_SendByte(unsigned char Byte);
#endif
Delay.c
//Delay.c
#include <STC89C5xRC.H>
#include <INTRINS.H>
//延时函数
void Delay(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
Delay.h
//Delay.h
#ifndef __Delay_H__
#define __Delay_H__
//延时函数头文件
void Delay(unsigned int xms);
#endif
串口发送源代码:
头文件要记得宏定义和重定义,避免重复调用:
#ifndef _Timer0_h_//名字根据文件名定义即可
#define _Timer0_h_
//声明函数……
#endif
main.c
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"
void main(){
UATE_Init();//初始化
while(1){
}
}
//中断函数
void UART_Routine() interrupt 4{
if(RI==1){//RI等于1表示可以中断
P2=~SBUF;//发送数据
UATE_SendByte(SBUF);//接收数据
RI=0;//软件复位
}
}
UART.c
#include <STC89C5xRC.H>
//初始化串口
//void UART_Init(){
// SCON=0x40;//0100 0000
// PCON=0;
// //&只有在两个位都为1时结果位才是1,而|只要有一个位为1结果位就是1
// TMOD &= 0x0F; //设置定时器模式,高四位清0,低四位不变
// TMOD |= 0x20; //设置定时器模式,高四位设计成0010,低四位不变,定时器1,模式2
// TL0 = 0x66; //设置定时初值
// TH0 = 0xFC; //设置定时初值
// TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时
// ET0=1;//允许中断
// EA=1;//允许总中断
// PT0=0;//低优先级
//}
void UATE_Init()

最低0.47元/天 解锁文章
2338






