串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。
STC15F2K60S2系列单片机有两个高速异步串行通信端口,分别为UART1和串UART2,对于串口的初始化我们可以借助STC下载器软件里提供的代码进行参考编写,例:
有了STC下载器为我们提供的串口初始化程序以后,剩下的就简单多了,在程序里编写相应的发送程序函数和接受程序函数就OK了。
设计内容:
1.上位机发送一个十六进制数,开发板按照接收到的指令让相应LED位点亮。如上位机发送0X55,则L1、L3、L5、L7灯点亮,L2、L4、L6、L8灯熄灭。
2.每按下一次S4按键,开发板向上位机发送字符串abc并自动切换到下一行。
#include <stc15f2k60s2.h>
#define uchar unsigned char //定义无符号字符类型uchar
#define uint unsigned int //定义无符号整型类型uint
uchar code dat[]={"abc\r\n"};
void delayms(int ms); //延时函数
void allinit(); //初始化函数
void keyscan(); //独立按键函数
void UartInit(void); //[email protected]
void urte_send(unsigned char *p,unsigned char inter);
void main()//主函数
{
allinit(); //初始化函数
UartInit(); //串口初始化
EA = 1;ES = 1; //打开总中断,打开串口中断
while(1)
{
keyscan(); //独立按键函数
}
}
void UartInit(void) //[email protected]
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设定定时器1为16位自动重装方式
TL1 = 0xC7; //设定定时初值
TH1 = 0xFE; //设定定时初值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void urte1() interrupt 4 //串口中断入口
{
if(RI==1)
{
RI = 0;
P2=0X80;P0=SBUF;
}
}
void urte_send(unsigned char *p,unsigned char inter)
{
unsigned char i;
for(i=0;i<inter;i++) //判断发送字符串长度
{
SBUF=*(p+i); //需要发送的字符串保存到SBUF缓存器
while(TI==0); //判断串行发送数据结束否
TI=0; //TI清零
}
}
void keyscan()
{
if(P33==0) //判断P33是否等于0
{
delayms(5); //延时5ms
if(P33==0) //再次判断P33是否等于0
{
urte_send(dat,7); //发送定义字符串数据
}
while(!P33); //如果按键不松开,则一直循环
}
}
void delayms(int ms)//延时函数
{
uint i,j;
for(i=ms;i>0;i--)
for(j=845;j>0;j--);
}
void allinit()//初始化函数
{
P2=0XA0;P0=0X00; //关闭蜂鸣器继电器
P2=0X80;P0=0XFF; //关闭所有LED灯
P2=0XC0;P0=0XFF; //选中所有数码管段选
P2=0XFF;P0=0XFF; //关闭所有数码管
}