目录
1.发送与接收数字
1.基本功能
1)通过串口1发送数据。
2)电脑发送数字给单片机,单片机打开LED灯
2.初始化
1)关闭蜂鸣器、继电器。
2)单片机发送内容 “ openled ” 。
3)使用文本界面接收
3.电脑发送数据功能
1)发送1打开LED1。
2)发送2打开LED2.以此类推。
3)发送9关闭LED灯。
4)使用Hex界面发送
4.代码
#include <STC15F2K60S2.H>
#include "uart.h"
void Device(unsigned char p2,unsigned char p0)
{
P0=p0;
P2=P2&0x1f|p2;
P2=P2&0x1f;
}
void system()
{
Device(0x80,0xff);
Device(0xa0,0);
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA=1; //打开总中断
ES=1; //打开串口中断
}
//发送一个字节
//数字界面接收16进制的
//文本界面接收字符
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
unsigned char k[]="openled";
void main()
{
UartInit();
system();
UART_SendByte(k[0]);
UART_SendByte(k[1]);
UART_SendByte(k[2]);
UART_SendByte(k[3]);
UART_SendByte(k[4]);
UART_SendByte(k[5]);
UART_SendByte(k[6]);
while(1)
{
}
}
void uaet1() interrupt 4
{
//hex界面发送用的
if(RI==1) //如果接收标志位为1,接收到了数据
{
n=SBUF-1;
if(n<9)
{
Device(0x80,~(0x01<<n)); //读取数据,取反后输出到LED
}
if(n==9)
{Device(0x80,0xff); //读取数据,输出到LED}
UART_SendByte(SBUF); //将受到的数据发回串口
RI=0; //接收标志位清0
}
2.发送与接收字符串
1.基本功能
1)通过串口1发送数据。
2)电脑发送数字给单片机,单片机打开LED灯
2.初始化
1)关闭蜂鸣器、继电器。
2)单片机发送内容 “ 想要打开LED灯请输入对应的序号 ” 。
3)使用文本界面接收
3.电脑发送数据功能
1)发送1打开LED1。
2)发送2打开LED2.以此类推。
3)发送9关闭LED灯。
4)使用文本界面接收。
4.代码
#include <STC15F2K60S2.H>
void Device(unsigned char p2,unsigned char p0)
{
P0=p0;
P2=P2&0x1f|p2;
P2=P2&0x1f;
}
void system()
{
Device(0x80,0xff);
Device(0xa0,0);
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA=1;
ES=1;
}
//发送一个字节
//数字界面接收16进制的
//文本界面接收字符
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
//发送字符串
void UART_swing( char*a)
{
unsigned char i=0;
do
{
UART_SendByte(*(a+i));
i++;
}while(*(a + i)!='\0');
}
char a;
void main()
{
UartInit();
system();
UART_swing("想要打开LED灯请输入对应的序号\n");
while(1)
{
}
}
void uaet1() interrupt 4
{
if(RI==1)
{
a=SBUF;
switch(a)
{
case '1': Device(0x80,~0x01);break;
case '2': Device(0x80,~0x02);break;
case '3': Device(0x80,~0x04);break;
case '4': Device(0x80,~0x08);break;
case '5': Device(0x80,~0x10);break;
case '6': Device(0x80,~0x20);break;
case '7': Device(0x80,~0x40);break;
case '8': Device(0x80,~0x80);break;
case '9': Device(0x80, 0xff);break;
}
UART_SendByte(SBUF); //将受到的数据发回串口
RI=0; //接收标志位清0
}
}