找回密码
 立即注册

QQ登录

只需一步,快速开始

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

中颖单片机UART1串口实现自动硬件地址识别和通讯SH88F516源程序

[复制链接]
跳转到指定楼层
楼主
SH88F516代码工程与串口调试工具:


中颖单片机UART1控制源码如下:
  1. /***************************
  2. 说明: 串口1拥有独立的波特率发生器,不需要占用定时器资源,在多机通讯时还具有自动硬件地址识别和帧出错检测
  3. 功能。本程序代码可以很好的实现自动硬件地址识别和通讯功能,利用串口调试助手发送地址和数据命令,单片机接
  4. 收有效命令后,将数据再发送到串口调试助手。操作注意点如下:发送十六进制数据55(55在程序中定义为硬件地址),
  5. 选择偶校验(偶校验保证了输出第8位为1),发送后会返回十六进制数据55,说明地址匹配,下面可以任意发送数据
  6. (除了FF和AA)进行通讯,发送的数据都可以返回到串口调试助手,十六进制FF(偶校验为1)为系统默认的广播命令,
  7. 十六进制AA为程序中定义的通讯结束命令,因而可以发送AA结束此次通讯。串口调试助手(serial V2.2.exe)在UART1文
  8. 件夹中。
  9. 要求:打开拨码开关J4,使串口1有效。
  10. *************************/
  11. #include <sh88f516.h>

  12. unsigned char data RCV_num;
  13. bit flag1;
  14. void init();
  15. void SendChar(unsigned char value);

  16. main()
  17. {
  18.         init();
  19.                                        
  20.     while(1)
  21.         {         
  22.                 if(flag1)
  23.                 {
  24.                         flag1 = 0;
  25.                         SendChar(RCV_num);
  26.                 }
  27.         }

  28. }


  29. void init()
  30. {

  31.         CLKCON = 0x00;                        //时钟设置 系统时钟=晶振频率   Fsys=16MHz

  32.         SADDR1 = 0x55;          //多机通讯时的从机地址设置=0x55
  33.         SADEN1 = 0xFF;                  //从机地址屏蔽设置

  34.         SCON1 = 0xF0;                     //工作在方式3 ,多机通讯模式
  35.         SBRT1 = 0xFF;                    //工作在方式3时,BAUDRATE=(1/16)*Fsys/(32768-SBRT[1:0])          Fsys=16MHz
  36.         SBRT0 = 0x98;                    //BAUDRATE=9600时, SBRT[1:0]=0x7F98,   SBRT1.7=1        -->        SBRT1=0xFF,         SBRT0 = 0x98;
  37.         
  38.         IEN1 = 0x04;                    //ES1=1,不可位寻址
  39.         EA = 1;                                    //开启总中断

  40. }


  41. void UART1_RCV_INT() interrupt 9  using 3  //串口接收中断的中断号为9.
  42. {

  43.         IEN1 &= 0xFB;                                                   //关闭串口1中断
  44.         SCON1 &= 0xDF;                                                   //SM12_TXCOL = 0;

  45.         RCV_num = SBUF1;


  46.         if(RCV_num==0xAA)                                           //收到0xAA就结束此次通讯
  47.         {
  48.                 SCON1 |= 0x20;                           //SM12_TXCOL = 1;
  49.         }        
  50.         
  51.         flag1 = 1;

  52.         RI1 = 0;                                                           //清除串口1中断标志位
  53.         IEN1 |= 0x04;                                                   //打开串口1中断
  54. }

  55. void SendChar(unsigned char value)
  56. {
  57.         IEN1 &= 0xFB;               //ES1=0;               
  58.         SBUF1=value;                            //写SBUF1,激活发送
  59.         while(TI1==0);                          //等待转换结束
  60.         TI1=0;                                                //清除发送标志位
  61. …………
  62. …………
  63. …………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码



压缩包里面包含有中颖单片机sh88f516常用功能的源码,中文注释都很详细
下载地址:http://www.51hei.com/bbs/dpj-98300-1.html



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

使用道具 举报

沙发
ID:168808 发表于 2019-9-18 08:16 | 只看该作者
楼主,我现在用这个程序测试时:为什么发送0x55,要没有带奇偶校验才能中断收到,加了奇偶校验收不到0x55,而发送数据如果不加检验位,多个字节会出现乱码?用的是SH88F516,外部晶振12MHZ,波特率:9600,请问这个是什么问题?是不是哪里没有设置好,还有SH88F516用成专用接口怎么设置,规格书没有写?比如SPI接口,帮忙回复一下谢谢。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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