微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > PCB设计学习讨论 > 51 单片机 串口 控制 点亮 led

51 单片机 串口 控制 点亮 led

时间:10-02 整理:3721RD 点击:
如题 发送 ff 使 一盏 led 亮

最简单的就是:


你可以在适当的位置改吧改吧代码
#include <reg52.h>
#include <intrins.h>
unsigned char tmp;
void send_char(unsigned char txd);
main()
{
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
        TH1=TL1=0xFD;                                // 波特率9600
       
        SCON = 0x50;                        // 设定串行口工作方式1 允许接收,相当于下面三句
        //SM0=0;
        //SM1=1;
        //REN=1;
        PCON =0x00;                        // 波特率不倍增
        TR1 = 1;                                // 启动定时器1
        while(1)
        {
       
                if(RI==1)                                                // 是否有数据到来
                {
                        RI = 0;
                        tmp = SBUF;                                // 暂存接收到的数据
                        P0 = tmp;                                // 数据传送到P0口
                        send_char(tmp);                        // 回传接收到的数据
                }               
        }
}
void send_char(unsigned char txd)
// 传送一个字符
{
        SBUF = txd;
        while(!TI);                                // 等特数据传送
        TI = 0;                                        // 清除数据传送标志
}

这是中断法 可以参考
#include<reg52.h>
#define uchar unsigned  char
#define uint unsigned int
uchar  idata trdata[]={'H','E','L','L','O','W','O','R','L','D','!','8','9','C','5','2',0x0d,0x0a,0x00};
sbit K1=P3^2; //对应开发板K1按键
/*-------------------------------------------------------------*/
//串口初始化
void UART_Init(void)
{
SCON = 0x50; //串口工作方式为1 , 串行允许接收
//SM0=0;
//SM1=1;
//REN=1;
TMOD = 0x20; //定时器1 工作在方式2
//PCON = 0x80; //SMOD = 1; 波特率加倍
TH1 = 0xfd; //波特率 9600bps fosc="11".0592MHz
TL1 = 0xfd;
ES = 1; //开串口中断
TR1 = 1; //允许定时器1工作
EA = 1; //开总中断
}
void delay1ms(uint i)
{
uchar j;
        while(i--)
        {
                for(j=0;j<115;j++)          //1ms基准延时程序
                {
                  ;
                }


        }
}
/*-------------------------------------------------------------*/
//串口发送一个字节
void Uart_SendChar(unsigned char dat)
{
SBUF = dat; //待发送的数据写入缓冲区
while(!TI); //等待发送完成
TI = 0; //清零发送标志位
}
/*-------------------------------------------------------------*/
//串口发送一个字符串
void Uart_SendString()
{         uchar
      i=0;
    while(trdata[i]!=0x00)
                {
                        SBUF=trdata[i];
                      while(!TI);
                      TI=0;
                      i++;
            }
}

/*-------------------------------------------------------------*/
//主函数
void main(void)
{
UART_Init(); //初始化串口
while(1)
{
if(K1==0)
{
delay1ms(20);
if(K1==0)
{
Uart_SendString(); //发送数据
while(!K1);        //等待按键释放
}
}
}
}
/*-------------------------------------------------------------*/
//串口接收中断函数
void INT_UartRcv(void) interrupt 4
{
unsigned char Rcv = 0;
if(RI) //查询接收标志位(有数据发送过来时置为1)
{
RI = 0;                 //接收标志位清零
Rcv = SBUF; //存储缓冲区的数据
P0=SBUF;
Uart_SendChar(Rcv); //让从计算机上传到单片机的数据 , 传回的计算机显示
}
}

也学习下,了解了解

请教下  这个串口在接收数据时候不用把ES置0;

小编不在不吧。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top