找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2844|回复: 0
收起左侧

STC12C5A60S2单片机的串口实验程序

[复制链接]
ID:692965 发表于 2020-10-2 14:07 | 显示全部楼层 |阅读模式
最近找一些资料,发现关于STC12C5A60S2的资料很少,STC12C5A60S2是新一代的8051,是属于1T的单片机,我们先说一下12T的单片机和1T的单片机的区别,首先就是速度上,1T的单片机是12T单片机的10~12倍左右,我们在用软件延时的时候,都是死循环,同样的软件延时,但是延时的时间就不一样,就是为1T的单片机比12T的快12倍,还有就是功能上,也有很多地方很好用,刚开始使用STC12C5A60S2,有些地方我也是不太懂,大家可以一起交流,


这是官网上给出的关于stc12C5a60s2的数据手册,我也会把源代码和数据手册放到最后,有需要的可以自行下载,我们的stc12c5a60s2和89c52的引脚是完全一样的,我们可以直接插到89c52的开发板上,以下是引脚图
51hei截图20201002133944.png 功能.png

还有我们使用的晶振是11.0592MHz的(这个非常重要)
还有我们使用的LED的原理图
51hei截图20201002130916.png

当P1^4引脚位低电平时,LED灯会亮,但是我们采用的是取反。
剩下的就是控制相关的寄存器了
串口1的相关的寄存器.png

第一个我们设置电源控制寄存器,当SMOD=1,波特率加倍




SCON.png


第二个就是串行控制寄存器我们用的是方式2 9位UART,SCON=0x50;
剩下的一个就是总中断了
总中断.png

ES表示定时器中断,EA表示总中断;这些具体的参数都在STC官网的数据手里面有,第八章串口通信,
处置.png

设置好TH1和TL1的初值就算弄好了。
我们调试的过程
调试.png

1601616621835.jpg

成功点亮LED灯,证明串口通信成功~!~

单片机源程序如下:
  1. #include "stc15f2k60s2.h"
  2. #include "intrins.h"
  3. sbit LED=P1^5;
  4. typedef unsigned char u8;
  5. typedef unsigned int u16;

  6. u16 receiveData;
  7. void SendByte(unsigned char dat);
  8. void UART_Send_Str(char *pStr);
  9. /*******************************************
  10. 函数名称:void main()
  11. 函数功能:主函数
  12. 输入参数:无
  13. 输出参数:无
  14. *******************************************/
  15. void main()
  16. {

  17.    SCON=0x50;
  18.    PCON=0X80;  //波特率加倍
  19.    TMOD|=0x20;
  20.    TH1=0xfA;        //定时器1方式2        8位数据加一位检验位
  21.    TL1=0xfA;
  22.    TR1=1;
  23.    EA=1;        //总中断
  24.    ES=1;   //定时器中断允许位

  25. while(1)
  26. {
  27.   //UART_Send_Str("中国!!\r\n");  //发送字符串
  28. }
  29. }
  30. /*******************************************
  31. 函数名称:void SendByte(unsigned char dat)
  32. 函数功能:发送单个字节
  33. 输入参数:dat
  34. 输出参数:无
  35. *******************************************/
  36. void SendByte(unsigned char dat)  
  37. {
  38.   SBUF=dat;
  39.   while(!TI);
  40.   TI=0;
  41. }
  42. /*******************************************
  43. 函数名称:void UART_Send_Str(char *pStr)
  44. 函数功能:发送字符串
  45. 输入参数:*pStr
  46. 输出参数:无
  47. *******************************************/
  48. void UART_Send_Str(char *pStr)         
  49. {
  50.    
  51.         while(*pStr != '\0')
  52.         {
  53.                 SendByte(*pStr++);
  54.         }

  55. }
  56. /*******************************************
  57. 函数名称:void Uart1() interrupt 4
  58. 函数功能:串口中断函数
  59. 输入参数:无
  60. 输出参数:无
  61. *******************************************/
  62. void Uart1() interrupt 4         
  63. {receiveData=SBUF;                         //接收数据
  64. RI=0;                                                 //关闭计时器
  65. SBUF=receiveData;                          //发送数据
  66. while(!TI);
  67. TI=0;                                                   //发送完成标志位
  68. if(receiveData=='2')
  69. {
  70.    LED=~LED;//LED取反

  71. }
  72. }
复制代码
程序:
程序.7z (179.45 KB, 下载次数: 27)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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