STC8 单片机串口通信程序:接收字符并发送指令
#include <STC8.H> //包含STC8单片机头文件 #include 'intrins.h' //包含内嵌汇编函数头文件 #define uchar unsigned char //定义无符号字符类型 #define uint unsigned int //定义无符号整型
char command_1[15] = 'ONA'; //定义指令1 char command_2[15] = 'ONB'; //定义指令2 char command_3[15] = 'ONC'; //定义指令3 char command_4[15] = 'OND'; //定义指令4 char command_0[15] = 'ONF'; //定义指令0 char temp=0; //定义临时变量
void Delay_ms(uint k) //延迟函数 { uchar data i, j, m; //定义无符号字符类型变量i、j和m for (m = 0; m < k; m++) //k次循环 { nop(); //空指令,延时1us nop(); nop(); i = 11; //i赋初值11 j = 190; //j赋初值190 do //do-while循环 { while (--j); //j自减直到为0 } while (--i); //i自减直到为0 } }
void UartInit(void) //串口初始化函数 { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 AUXR &= 0xBF; //定时器时钟12T模式 AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //设置定时器模式 TMOD |= 0x20; //设置定时器模式 TL1 = 0xFD; //设置定时初始值 TH1 = 0xFD; //设置定时重载值 ET1 = 0; //禁止定时器中断 TR1 = 1; //定时器1开始计时 }
void UartSend(char dat) //发送一个字符 { SBUF = dat; //将dat赋值给SBUF,发送数据 while (!TI); //等待数据发送完成 TI=0; //清除发送中断标志位 }
void UartSendStr(char *p) //发送字符串 { while (*p) { UartSend(*p++); // 发送数据,指针p自增 } }
void main() //主函数 { UartInit(); //串口初始化 ES = 1; //使能串口中断 EA = 1; //使能总中断 while (1) //无限循环 { // while(RI == 0); // RI = 0; // 清除接收中断标志位 // temp = SBUF; // 读取接收到的数据 // if(temp == 0) // { // UartSendStr(command_0); // } // if(temp == 1) // { // UartSendStr(command_1); // }
Delay_ms(10); //延时10ms
}
}
void UART_Interrupt() interrupt 4 //串口中断函数 { while (!RI); //等待接收完成 RI = 0; //清除接收中断标志位 temp = SBUF; //读取接收到的数据 //UartSend(temp);// 发送接收到的数据 if(temp == '0') //如果接收到的数据为'0' { UartSendStr(command_0); //发送指令0 }
if(temp=='1') //如果接收到的数据为'1'
{
UartSendStr(command_1); //发送指令1
}
if(temp=='2') //如果接收到的数据为'2'
{
UartSendStr(command_2); //发送指令2
}
if(temp=='3') //如果接收到的数据为'3'
{
UartSendStr(command_3); //发送指令3
}
if(temp=='4') //如果接收到的数据为'4'
{
UartSendStr(command_4); //发送指令4
}
}
原文地址: https://www.cveoy.top/t/topic/oSY1 著作权归作者所有。请勿转载和采集!