6173|1

1万

帖子

25

TA的资源

版主

楼主
 

CH554的串口通信测试 [复制链接]

串口是单片机中最基本的功能之一,在CH554上有两个串口,我们先从串口0开始(串口1和LED复用了),测试它的基本使用。

  • 程序还是使用了RTX51tiny结构,使用方法见 CH554测试:RTX51 tiny
  • 为了让程序有更好通用性,没有使用例程自带的Public文件。
  • 将串口的常用功能做了封装(这部分不依赖RXT51),只要使用UART0_init()就可以实现串口初始化,用户收发中断函数设置。
  • 运行后以9600波特率,每秒发送一个ASCII字符,不断递增。如果通过串口发送数据,将会改变当前的字符。
  • 串口波特率部分的计算还不完善,没有考虑频率和波特率更大范围的计算,这部分以后在补充。

  1. #include <rtx51tny.h>
  2. #include <SST89X5XXRD2.H>

  3. #include "stdint.h"
  4. #include "cfg.h"

  5. sbit LED1 = P1^6;
  6. sbit LED2 = P1^7;

  7. uint32_t F_CPU = FREQ_BASE;

  8.   
  9. void (* _UART0_RXD_ISR_USR)(void);
  10. void (* _UART0_TXD_ISR_USR)(void);

  11. void UART0_write(uint8_t dat)
  12. {
  13.   SBUF = dat;
  14. }

  15. uint8_t UART0_read()
  16. {
  17.   return SBUF;
  18. }

  19. uint8_t UART0_init(uint32_t baudrate, void *USRTXD, void *USRRXD)
  20. {
  21.   ES = 0;
  22.   T2MOD |= 0xA0;  // bTMR_CLK = bT1_CLK = 1
  23.   T2CON &= 0x18;  // RCLK = TCLK = 0
  24.   PCON |= 0x80;   // SMOD = 1

  25.   TMOD &= 0x0F;
  26.   TMOD |= 0x20;
  27.   TH1 = 256 - F_CPU / (16 * baudrate);
  28.   TR1 = 1;
  29.   
  30.   SCON = 0x50;
  31.   
  32.   _UART0_RXD_ISR_USR = 0;
  33.   if(USRRXD)
  34.     _UART0_RXD_ISR_USR = USRRXD;

  35.   _UART0_TXD_ISR_USR = 0;
  36.   if(USRTXD)
  37.     _UART0_TXD_ISR_USR = USRTXD;
  38.   
  39.   ES = 1;
  40.   
  41.   return 1;
  42. }

  43. void UART0_ISR() interrupt 4
  44. {
  45.   if(TI)
  46.   {
  47.     TI = 0;
  48.     if(_UART0_TXD_ISR_USR)
  49.       _UART0_TXD_ISR_USR();   
  50.   }
  51.   
  52.   if(RI)
  53.   {
  54.     RI = 0;
  55.     if(_UART0_RXD_ISR_USR)
  56.       _UART0_RXD_ISR_USR();
  57.   }
  58. }

  59. uint8_t cnt = 0;

  60. // user UART0 RXD routine
  61. void UART0_RXD_ISR()
  62. {
  63.   cnt = UART0_read();
  64. }

  65. job0 () _task_ 0
  66. {
  67.    
  68.   UART0_init(9600, 0, UART0_RXD_ISR);
  69.   
  70.   while(1)
  71.   {
  72.     if((cnt < '0') || (cnt > 'z'))
  73.       cnt = '0';
  74.     UART0_write(cnt);
  75.     cnt++;
  76.    
  77.     // 1s
  78.     LED1 = !LED1;
  79.     os_wait(K_TMO, 10, 0);
  80.   }
  81. }

复制代码


完整程序: uart.zip (35 KB, 下载次数: 18)

此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处



此帖出自单片机论坛

最新回复

  详情 回复 发表于 2017-10-16 08:53
点赞 关注(1)
 

回复
举报

305

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
此帖出自单片机论坛
 
个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表