标题:
中颖单片机UART1串口实现自动硬件地址识别和通讯SH88F516源程序
[打印本页]
作者:
weihu
时间:
2017-11-18 05:16
标题:
中颖单片机UART1串口实现自动硬件地址识别和通讯SH88F516源程序
SH88F516代码工程与串口调试工具:
0.png
(9.46 KB, 下载次数: 115)
下载附件
2017-11-18 05:11 上传
中颖单片机UART1控制源码如下:
/***************************
说明: 串口1拥有独立的波特率发生器,不需要占用定时器资源,在多机通讯时还具有自动硬件地址识别和帧出错检测
功能。本程序代码可以很好的实现自动硬件地址识别和通讯功能,利用串口调试助手发送地址和数据命令,单片机接
收有效命令后,将数据再发送到串口调试助手。操作注意点如下:发送十六进制数据55(55在程序中定义为硬件地址),
选择偶校验(偶校验保证了输出第8位为1),发送后会返回十六进制数据55,说明地址匹配,下面可以任意发送数据
(除了FF和AA)进行通讯,发送的数据都可以返回到串口调试助手,十六进制FF(偶校验为1)为系统默认的广播命令,
十六进制AA为程序中定义的通讯结束命令,因而可以发送AA结束此次通讯。串口调试助手(serial V2.2.exe)在UART1文
件夹中。
要求:打开拨码开关J4,使串口1有效。
*************************/
#include <sh88f516.h>
unsigned char data RCV_num;
bit flag1;
void init();
void SendChar(unsigned char value);
main()
{
init();
while(1)
{
if(flag1)
{
flag1 = 0;
SendChar(RCV_num);
}
}
}
void init()
{
CLKCON = 0x00; //时钟设置 系统时钟=晶振频率 Fsys=16MHz
SADDR1 = 0x55; //多机通讯时的从机地址设置=0x55
SADEN1 = 0xFF; //从机地址屏蔽设置
SCON1 = 0xF0; //工作在方式3 ,多机通讯模式
SBRT1 = 0xFF; //工作在方式3时,BAUDRATE=(1/16)*Fsys/(32768-SBRT[1:0]) Fsys=16MHz
SBRT0 = 0x98; //BAUDRATE=9600时, SBRT[1:0]=0x7F98, SBRT1.7=1 --> SBRT1=0xFF, SBRT0 = 0x98;
IEN1 = 0x04; //ES1=1,不可位寻址
EA = 1; //开启总中断
}
void UART1_RCV_INT() interrupt 9 using 3 //串口接收中断的中断号为9.
{
IEN1 &= 0xFB; //关闭串口1中断
SCON1 &= 0xDF; //SM12_TXCOL = 0;
RCV_num = SBUF1;
if(RCV_num==0xAA) //收到0xAA就结束此次通讯
{
SCON1 |= 0x20; //SM12_TXCOL = 1;
}
flag1 = 1;
RI1 = 0; //清除串口1中断标志位
IEN1 |= 0x04; //打开串口1中断
}
void SendChar(unsigned char value)
{
IEN1 &= 0xFB; //ES1=0;
SBUF1=value; //写SBUF1,激活发送
while(TI1==0); //等待转换结束
TI1=0; //清除发送标志位
…………
…………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
压缩包里面包含有中颖单片机sh88f516常用功能的源码,中文注释都很详细
下载地址:
http://www.51hei.com/bbs/dpj-98300-1.html
作者:
yeahfeng
时间:
2019-9-18 08:16
楼主,我现在用这个程序测试时:为什么发送0x55,要没有带奇偶校验才能中断收到,加了奇偶校验收不到0x55,而发送数据如果不加检验位,多个字节会出现乱码?用的是SH88F516,外部晶振12MHZ,波特率:9600,请问这个是什么问题?是不是哪里没有设置好,还有SH88F516用成专用接口怎么设置,规格书没有写?比如SPI接口,帮忙回复一下谢谢。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1