找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10655|回复: 2
打印 上一主题 下一主题
收起左侧

基于STCSTC15F2K60S2单片机的串口通讯

[复制链接]
跳转到指定楼层
楼主
ID:444712 发表于 2018-12-18 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一章 STCSTC15F2K60S2的简介
1.1 STC15F2K60S的各引脚简介
(1)电源引脚
   Vcc:一般接电源的+5V。具体的电压幅度应参考单片机的手册。
   GND:接电源地。
(2)外接晶体引脚
                        
     芯片内部一个反相放大器的输入端和输出端。通常用于连接晶体振荡器。
(3)控制和复位引脚
                        
     功能:当访问外部存储器或者外部扩展的并行I/O口时,ALE(允许地址锁
     存)的输出用于锁存地址的低位字节。
    RST(与P5.4复用):当振荡器运行时,在此引脚上出现两个机器周期的
     高电平将使单片机复位。如果需要单片机接上电源就可以复位,则需要使
     用上电复位电路。
(4)I/O口的复用功能   
    P0口:
       a.用作数据总线(D7~D0)或者地址总线低8位(A7~A0)。
      b.用作普通I/O。   
    P1口:
      a.用作普通I/O。
      b.复用为ADC转换输入、捕获/比较/脉宽调制、SPI通信线、第二串口
        或者第二时钟输出,如表所示。
      
      P2口:
       a:用作通用I/O。
       b:用作地址总线的高8位输出。
       c:用于SPI和捕获/比较/脉宽调制的备用切换端口。
     
     P3口:
       a:用作通用I/O。
       b:可复用为外部中断输入、计数器输入、时钟输出、第一串口和外部总
         线的读/写控制,如表所示。
            
      P4口:
        a:用作通用I/O。
        b:某些口线具有复用功能,可配置为SPI通信线、捕捉/比较/脉宽调
           制、第二串口线等。
         
       P5口:
         a:P5.4/RST(复位脚)/MCLKO(内部R/C振荡时钟输出;
         b:输出的频率可为MCLK/1或MCLK/2)/SS_3(SPI接口的从机选择信
           号备用切换引脚)。
         c:该引脚默认为I/O口,可以通过ISP编程将其设置为RST(复位)
           引脚。
第二章 单片机通过USB与PC机的通信设计
2.1设计方案选择
由于实际应用中单片机在数据处理能力、人机交互等方面往往不能满足要求, 因而通常用PC来弥补单片机的这些不足。例如,在工程应用中,常常由一台PC机和一台单片机构成主从式计算机测控系统。在这样的系统中,以单片机为核心的智能测控仪表(从机)作为现场测控设备,完成数据的采集、处理和控制各种任务,同时将数据传给PC机(主机),PC机将这些数据加工处理后,进行显示、打印报表等。PC机也可以将各种控制命令传送给单片机,干预单片机系统的运行,从而发挥PC机的优势。要实现这样的功能,就涉及到PC机与单片机之间的通信问题。现在的计算机提供了各种各样的串口,他们支持不同的通信协议,有着不同的功能。目前计算机提供的串口有RS-232,RJ45,USB2.0等。
   2.1.1 PC机同单片机通信存在的问题
目前,15系列单片机同PC机的通信在大多数情况下仍然是使用RS-232(DB-9)串口作为通信接口实现的。而随着USB接口技术的成熟和使用的普及,由于USB接口有着一系列RS-232(DB-9)串口无法比拟的优点,RS-232(DB-9)串口正在逐步的为USB接口所替代。而在现在的大多数笔记本电脑中,出于节省物理空间和用处不大等原因,RS-232(DB-9)串口已不再设置,这就约束了基于RS-232(DB-9)串口与PC机联络的单片机设备的使用范围。
   2.1.2 USB接口同RS-232(DB-9)串口的比较
      通过USB接口和RS-232(DB-9)的比较,不难发现:
(1)USB接口支持即插即用和热插拔,而RS-232(DB-9)串口不支持即插即  
     用和热插拔,设备安装后需重启计算机方可使用。
(2)USB接口的传输速率较快,可达480Mbps(V2.0),而RS-232(DB-9)串
     口的最高速率仅为19200波特。
(3)USB接口占用体积较小,插拔方便;而RS-232(DB-9)串口的的插拔需
     要使用改锥,且在机箱后操作,比较麻烦。
     综上可知,USB 接口取代RS-232(DB-9)串口的趋势不可逆转。
   2.1.3 USB转接芯片的选择
   目前常用的USB转接芯片包括PL2303,CH341,CP2101,FT232等。在综合考虑了各方面因素后,CH341成为了本次电路设计的首选芯片。CH341是南京沁恒电子公司生产的USB总线的转接芯片,通过USB总线提供异步串口,打印口,并口及常用的2线和4线等同步串行端口。其特点有:
(1)提供全速USB设备借口,兼容USB2.0,外围设备只需要晶体和电容;
(2)可通过外部的低成本串行EPROM定义厂商ID,产品ID,序列号等;
(3)成本低廉,可直接转换原串口外围设备;
(4)采用SOP-28封装,串口应用还提供小型的SSOP-20封装。正是由于在PC机同单片机通信电路中,USB转接芯片CH341 具有以上其他芯片无法比拟的优点,同时价格低廉并且提供中文技术支持,因此它成为了本电路USB转接芯片的最优选择。本电路采用的是SSOP-20封装的CH341T。            
2.2 通信功能要求
(1)PC控制单片机IO口输出,并且通过两个LED灯显示数据发收状态,如果数据处于发送或者接收状态,则相应的LED灯闪亮。
(2)PC控制单片机IO口输出,并且通过两个按键控制PC机是否接收数据。
(3)PC机与单片机之间的通信结果通过串口助手进行调试和显示。第四章 程序设计
2.3 串口初始化
    voidUartInit(void)      //115200bps@22.1184MHz
{
    SCON= 0x50;      //8位数据可变波特率
    AUXR|= 0x40;     //定时器1时钟为Fosc,即1T
    AUXR&= 0xFE;     //串口1选择定时器1为波特率发射生器
    TMOD&= 0x0F;     //设置定时器1为16位自动重装方式
    TL1= 0xD0;       //设定定时初值
    TH1= 0xFF;       //设定定时初值
    ET1= 0;       //禁止定时器1中断
    TR1= 1;       //启动定时器1
}
2.4 主程序
voidmain(void)
{
    P0M1= 0;  P0M0 = 0;  //设置为准双向口
    P1M1= 0;  P1M0 = 0;  //设置为准双向口
    P2M1= 0;  P2M0 = 0;  //设置为准双向口
    P3M1= 0;  P3M0 = 0;  //设置为准双向口
    P4M1= 0;  P4M0 = 0;  //设置为准双向口
    P5M1= 0;  P5M0 = 0;  //设置为准双向口
    P6M1= 0;  P6M0 = 0;  //设置为准双向口
    P7M1= 0;  P7M0 = 0;  //设置为准双向口
UartInit()     ;      
    //UART1_config(1);   // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
    EA= 1;    //允许总中断
    ES=1; //开串口中断
    PrintString1("STC15F2K60S2UART1 Test Prgramme!\r\n");  //SUART1发送一个字符串
    while(1)
    {   if(INT0==0)    //如果相应按键(默认为sw18)按下,则允许接收
       {REN=0;}
        if((TX1_Cnt != RX1_Cnt) &&(!B_TX1_Busy)) //收到数据, 发送空闲
        {
            SBUF= RX1_Buffer[TX1_Cnt];     //把收到的数据远样返回
            B_TX1_Busy= 1;
            if(++TX1_Cnt>= UART1_BUF_LENGTH)  TX1_Cnt = 0;
        }
    else{if(INT1==0)    //如果相应按键(默认为sw17)按下,则禁止接收
        {REN=1;}}
    }
}
2.5 中断服务程序
    voidUART1_int (void) interrupt 4//中断服务子程序
{
    if(RI)   //如果产生中断,则把SBUF内容赋值给单片机的数组
    {   
           RI= 0;
          RX1_Buffer[RX1_Cnt] = SBUF;
          if(++RX1_Cnt >= UART1_BUF_LENGTH)   
          RX1_Cnt = 0;    //防溢出
       }   
    if(TI)
    {
        TI = 0;
        B_TX1_Busy = 0;
    }
}

3.0 总程序
    /*************   功能说明   **************
双串口全双工中断方式收发通讯程序。
通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.
******************************************/
#define    MAIN_Fosc          22118400L  //定义主时钟
#include   "STC15Fxxxx.H"
#define        Baudrate1          115200L
#define        UART1_BUF_LENGTH  200
u8  TX1_Cnt;   //发送计数
u8  RX1_Cnt;   //接收计数
bit B_TX1_Busy;   //发送忙标志
u8  idataRX1_Buffer[UART1_BUF_LENGTH];    //接收缓冲
void UartInit(void)      //115200bps@22.1184MHz
{
    SCON= 0x50;      //8位数据可变波特率
    AUXR|= 0x40;     //定时器1时钟为Fosc,即1T
    AUXR&= 0xFE;     //串口1选择定时器1为波特率发射生器
    TMOD&= 0x0F;     //设置定时器1为16位自动重装方式
    TL1= 0xD0;       //设定定时初值
    TH1= 0xFF;       //设定定时初值
    ET1= 0;       //禁止定时器1中断
    TR1= 1;       //启动定时器1
}
void main(void)
{
    P0M1= 0;  P0M0 = 0;  //设置为准双向口
    P1M1= 0;  P1M0 = 0;  //设置为准双向口
    P2M1= 0;  P2M0 = 0;  //设置为准双向口
    P3M1= 0;  P3M0 = 0;  //设置为准双向口
    P4M1= 0;  P4M0 = 0;  //设置为准双向口
    P5M1= 0;  P5M0 = 0;  //设置为准双向口
    P6M1= 0;  P6M0 = 0;  //设置为准双向口
    P7M1= 0;  P7M0 = 0;  //设置为准双向口
UartInit()     ;      
    //UART1_config(1);   // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
    EA= 1;    //允许总中断
    ES=1; //开串口中断
    PrintString1("STC15F2K60S2UART1 Test Prgramme!\r\n");  //SUART1发送一个字符串
    while(1)
    {   if(INT0==0)
       {REN=0;}
        if((TX1_Cnt != RX1_Cnt) &&(!B_TX1_Busy)) //收到数据, 发送空闲
        {
            SBUF= RX1_Buffer[TX1_Cnt];     //把收到的数据远样返回
            B_TX1_Busy= 1;
            if(++TX1_Cnt>= UART1_BUF_LENGTH)  TX1_Cnt = 0;
        }
    else{if(INT1==0)
        {REN=1;}}
    }
}
void UART1_int (void) interrupt 4//中断服务子程序
{
    if(RI)
    {   
           RI= 0;
          RX1_Buffer[RX1_Cnt] = SBUF;
          if(++RX1_Cnt >= UART1_BUF_LENGTH)   
          RX1_Cnt = 0;    //防溢出
       }   
    if(TI)
    {
        TI = 0;
        B_TX1_Busy = 0;
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:555092 发表于 2019-11-8 16:32 | 只看该作者
u8  TX1_Cnt;出现错误是什么原因
回复

使用道具 举报

板凳
ID:394949 发表于 2019-12-6 16:47 | 只看该作者
我也一样的,改为char试试
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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