#include "system.h" #include "stc8a8k64s4a12.h" void Init_Serial(void) { SCON=0X50; PCON=0X80; ES=1; EA=1; TMOD=0X20; AUXR=0X00; TL1=243; //9600 TH1=243; TR1=1; } void UART_SendByte(unsigned char Byte) { SBUF=Byte; while(TI==0); TI=0; } void main() { unsigned int i; System_Init(); Init_Serial(); P3_Mode_PullUp(PIN_0|PIN_1); P2_Mode_OUT_PP(0XFF); // SBUF=0XAA; while(1) { // for(i=0;i<50000;i++); // SBUF=0XAA; } } void s_int(void) interrupt 4 { if(TI==1) { TI=0; } if(RI==1) { RI=0; P2=SBUF; UART_SendByte(SBUF); } }标注每一行代码的注释
时间: 2023-10-30 21:04:59 浏览: 62
STC8A8K64S4_LED_stc8_STC8A8K64S4A12_STC8A8K64S412_
// 引入系统头文件
#include "system.h"
// 引入单片机头文件
#include "stc8a8k64s4a12.h"
// 串口初始化
void Init_Serial(void) {
SCON=0X50; // 8 位数据,可变波特率,允许接收
PCON=0X80; // 波特率不加倍
ES=1; // 允许串口中断
EA=1; // 开启总中断
TMOD=0X20; // 定时器 1,模式 2
AUXR=0X00; // 不使用辅助定时器 1
TL1=243; // 波特率为 9600
TH1=243; // 波特率为 9600
TR1=1; // 启动定时器 1
}
// 发送一个字节的数据
void UART_SendByte(unsigned char Byte) {
SBUF=Byte; // 将要发送的数据存入 SBUF
while(TI==0); // 等待发送完成
TI=0; // 清除发送中断标志位
}
void main() {
unsigned int i;
// 初始化系统
System_Init();
// 初始化串口
Init_Serial();
// 将 P3.0 和 P3.1 引脚设置为上拉输入
P3_Mode_PullUp(PIN_0|PIN_1);
// 将 P2 引脚设置为输出
P2_Mode_OUT_PP(0XFF);
// 无限循环
while(1) {
// 空循环
}
}
// 串口中断处理函数
void s_int(void) interrupt 4 {
if(TI==1) { // 如果是发送中断
TI=0; // 清除发送中断标志位
}
if(RI==1) { // 如果是接收中断
RI=0; // 清除接收中断标志位
P2=SBUF; // 将接收到的数据存入 P2 引脚输出
UART_SendByte(SBUF); // 将接收到的数据通过串口发送回去
}
}
阅读全文