找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2805|回复: 10
收起左侧

求大神给个单片机与电脑串口通信的程序

[复制链接]
ID:246395 发表于 2017-11-6 09:56 | 显示全部楼层 |阅读模式
本人初入单片机,小白一枚,现在用的开发板的单片机是stc89c52, 单片机的p20---p27口接的LED,想在电脑端 用“串口调试助手”直接控制这几个LED灯 的亮或灭,  不知道怎么写程序,大神能帮忙写一个吗,我研究研究,谢谢了
1.jpg
2.jpg
回复

使用道具 举报

ID:7485 发表于 2017-11-6 10:38 | 显示全部楼层
单片机的接收程序?单片机设置波特率,串口中断接收,将接收到的数据送P2口。电脑上的可以用“串口助手”。
捕获.JPG
回复

使用道具 举报

ID:246395 发表于 2017-11-6 10:47 | 显示全部楼层
ahshmj 发表于 2017-11-6 10:38
单片机的接收程序?单片机设置波特率,串口中断接收,将接收到的数据送P2口。电脑上的可以用“串口助手”。 ...

不好意思我小白一枚,表达不准确,我要就是烧到单片机上的那个代码,还有 怎么设置这个穿孔助手软件
回复

使用道具 举报

ID:243921 发表于 2017-11-6 11:30 | 显示全部楼层
你去找一下单片机串口例程的源码  然后在源码的基础上修改一下就可以实现了  自己多看看书 多敲敲代码  你这个其实不难的
自己动手才有意思
回复

使用道具 举报

ID:213173 发表于 2017-11-6 11:59 | 显示全部楼层
本帖最后由 wulin 于 2017-11-6 13:26 编辑
ahshmj 发表于 2017-11-6 10:38
单片机的接收程序?单片机设置波特率,串口中断接收,将接收到的数据送P2口。电脑上的可以用“串口助手”。 ...
发错了,撤销........


无标题.jpg
回复

使用道具 举报

ID:213173 发表于 2017-11-6 13:22 | 显示全部楼层
#include <reg51.h>
#define uchar unsigned char
uchar ch;
bit flag=0;                //接收完成标志,

void init_uart()
{
        TMOD=0X20;         //定时器/计算器工作模式寄存器
        TH1=0XFD;         //波特率9600
        TL1=0XFD;         //波特率9600
        SCON=0X50;         //串行控制寄存器
        TR1=1;             //开定时器T1
        EA=1;                //开总中断
        ES=1;                //开串行口中断   
}

void main()
{
        init_uart();
        while(1)
        {
                if(flag==1)                //接收完成标志为1
                {
                        ES=0;                //关串口中断
                        flag=0;                //接收完成标志清0
                        SBUF=ch;                //发送数据
                        while(!TI);        //等待发送中断请求标志位为1
                        TI=0;                //发送中断请求标志位清0
                        ES=1;                //开串口中断
                }
                P2=~ch;                        //LED低电平显示收到的数据

        }
}
void UART_interrupt() interrupt 4
{
        RI=0;     //接收中断请求标志位                 
        ch=SBUF;        //获取SBUF接收到的数据
        flag=1;        //接收完成标志置1      
} 无标题.jpg

回复

使用道具 举报

ID:7485 发表于 2017-11-6 15:34 | 显示全部楼层
且听风吟1314 发表于 2017-11-6 10:47
不好意思我小白一枚,表达不准确,我要就是烧到单片机上的那个代码,还有 怎么设置这个穿孔助手软件[em04 ...

还是看不明白你的意思。
回复

使用道具 举报

ID:164602 发表于 2017-11-7 09:36 | 显示全部楼层
我的板子和你完全一样,我这个程序,就是串口控制LED灯的。程序功能是:用字符方式发送1,LED灯最右边的一个亮,以字符方式发送2,灯灭。
#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit LED1=P2^0;

u8 receiveData;
u8 n[]="12";

void UsartInit()//串口初始化函数
{
        SCON=0X50;//设置为工作方式1
        TMOD=0X20;//设置计数器工作方式2
        PCON=0X80;//波特率加倍
        TH1=0XF3;//计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;//打开接收中断
        EA=1;//打开总中断
        TR1=1;//打开计数器
}

void main()
{
        UsartInit();//串口初始化
        while(1);
}

void Usart() interrupt 4//中断函数
{
        unsigned char m;
        m=SBUF;
        if(m==n[0])
        {
                LED1=0;
        }         
        if (m==n[1])
        {
                LED1=1;
        }
        receiveData=SBUF;//出去接收到的数据
        RI = 0;//清除接收中断标志位
        SBUF=receiveData;//将接收到的数据放入到发送寄存器
        while(!TI);//等待发送数据完成
        TI=0;//清除发送完成标志位
}


串口调试软件用的STC-ISP的串口调试功能。如图所示设置就可以了。
1.jpg

注意:串口号是你的号,这里的COM3是我的。
回复

使用道具 举报

ID:246395 发表于 2017-11-7 10:05 | 显示全部楼层
wulin 发表于 2017-11-6 13:22
#include
#define uchar unsigned char
uchar ch;

非常感谢,我现在通过以上程序能用串口控制这几个LED了,但是如果要把其它P口加入到里面一起控制的话,如把p00-p07  p10-p17 一起加入用串口控制,程序要怎么改呢,麻烦了
回复

使用道具 举报

ID:164602 发表于 2017-11-7 11:26 | 显示全部楼层
且听风吟1314 发表于 2017-11-7 10:05
非常感谢,我现在通过以上程序能用串口控制这几个LED了,但是如果要把其它P口加入到里面一起控制的话,如 ...

你先将这个程序好好看看吧。
看这么几个方面?
第一:串口通讯都要设置些什么寄存器?
第二:每个寄存器的值是怎么来的?可不可以改变?
第三:控制部分在哪里?为什么可以控制?(这个看懂了,你自然会控制其它I/O口了)
我这个程序,只能是个示范程序,其实真的要完成有意义的控制,还有很多内容,努力学吧,祝成功!
回复

使用道具 举报

ID:213173 发表于 2017-11-7 11:41 | 显示全部楼层
且听风吟1314 发表于 2017-11-7 10:05
非常感谢,我现在通过以上程序能用串口控制这几个LED了,但是如果要把其它P口加入到里面一起控制的话,如 ...

只要把串口接收到的数据用一个函数加以解析就可以按需要控制任意端口,用这个函数替换P2=~ch;
void service()
{
        switch(ch)
        {
                case 0x01: P0=0X0F; break;
                case 0x02: P1=0Xf0; break;
                case 0x03: P2=0X55; break;
                ......
                ......
                case 0xff: P1=0Xaa; break;
                default: break;
        }       
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表