历史上的今天
返回首页

历史上的今天

今天是:2025年08月08日(星期五)

正在发生

2020年08月08日 | STC15系列单片机RS-485通讯例程(带CRC校验)

2020-08-08 来源:51hei

单片机源程序如下:

#include



sbit bitCtrl_485Eable = P1^3;//

sbit bitCtrl_485_2Eable = P7^3;//


xdata unsigned char mod_comd[9]={0x01,0x04,0x75,0x31,0x02,0x00,0x00,0x08,0x09};

unsigned char freq = 0;



/****************************************************************************************/

// unsigned char MyDeviceAddr _at_ 0x06000;

// unsigned char PODeviceAddr _at_ 0x05999;

unsigned char MyDeviceAddr;

unsigned char PODeviceAddr;



/*********************************

串口1变量定义

**********************************/

bit busy1 = 0;

xdata unsigned char u8Uart1TxBuffer[USART1_TX_BUFFER_SIZE];

xdata unsigned char u8Uart1RxBuffer[USART1_RX_BUFFER_SIZE];

unsigned char  u8Rx1Head = 0;

unsigned char  u8Rx1Tail = 0;

unsigned char  u8Tx1Head = 0;

unsigned char  u8Tx1Tail = 0;


unsigned char  mdbs1_stat = 0;

unsigned char  mdbs1_len = 0;

unsigned char  mdbs1_cnt = 0;

unsigned char  mdbs1_maxlen = 0;

xdata unsigned char mdbs1_Rxbuf[16];

xdata unsigned char mdbs1_Txbuf[16];

unsigned char  mdbs1_pos = 0;

unsigned char  mdbs1_timerflag = 0;

unsigned char  mdbs1_overtime = 0;

unsigned char  mdbs1_data_len = 0;

/****************************************************************************************/


/****************************************************************************************/

   


/*********************************

串口2变量定义

**********************************/


bit busy2 = 0;

xdata unsigned char u8Uart2TxBuffer[USART2_TX_BUFFER_SIZE];

xdata unsigned char u8Uart2RxBuffer[USART2_RX_BUFFER_SIZE];

unsigned char  u8Rx2Head = 0;

unsigned char  u8Rx2Tail = 0;

unsigned char  u8Tx2Head = 0;

unsigned char  u8Tx2Tail = 0;



unsigned char  mdbs2_stat = 0;

unsigned char  mdbs2_len = 0;

unsigned char  mdbs2_cnt = 0;

unsigned char  mdbs2_maxlen = 0;

xdata unsigned char mdbs2_Rxbuf[16];

xdata unsigned char mdbs2_Txbuf[16];

unsigned char  mdbs2_pos = 0;

unsigned char  mdbs2_timerflag = 0;

unsigned char  mdbs2_overtime = 0;

unsigned char  mdbs2_data_len = 0;

/****************************************************************************************/



/*定时器0初始化,采用16位自动重装技术模式*/


void Timer0Init(void)                                //10毫秒@11.0592MHz                          //16位重装计数器

{

        AUXR &= 0x7F;                                        //定时器时钟12T模式

        TMOD &= 0xF0;                                        //设置定时器模式

                                

        TL0 = -(FOSC/12/100);                        //设置定时初值

        TH0 = -(FOSC/12/100) >> 8;                //设置定时初值

//        RL_TH0



        TF0 = 0;                                                //清除TF0标志

        TR0 = 1;                                                //定时器0开始计时

        Timer0_InterruptFirst();

        ET0 = 1;                                                //enable timer0 interrupt

}

/***定时器0中断服务函数**/

void tm0_isr() interrupt 1  using 1

{


                                                               

    TF0 = 0;                                            //清除TF0标志

        TL0 = -(FOSC/12/100);                    //设置定时初值

        TH0 = -(FOSC/12/100) >> 8;                //设置定时初值

   

         ++freq;  

        


}


/************************************************************************/

  //8位数据   波特率可变    无奇偶检验位    1位起始位  1位停止位

  //使用定时器1作为波特率发生器

   void Uart1Init(void)                                        //9600bps@11.0592MHz

{

        PCON &= 0x3F;                                        //波特率不倍速

        SCON = 0x50;                                        //8位数据,可变波特率

        AUXR &= 0xBF;                                        //定时器1时钟为Fosc/12,即12T  传统51速度

        AUXR &= 0xFE;                                        //串口1选择定时器1为波特率发生器

//        AUXR |=0X01;                                          //串口1选择定时器2为波特率发生器


        TMOD &= 0x0F;                                        //清除定时器1模式位

        TMOD |= 0x20;                                        //设定定时器1为8位自动重装方式


//        TMOD &= 0xF0;                                        //清除定时器2模式位

//        TMOD |= 0x02;                                        //设定定时器2为8位自动重装方式


        TL1 = -(FOSC/12/32/BAUD);                //设定定时初值

        TH1 = -(FOSC/12/32/BAUD);                //设定定时器重装值

/*****


定时器2工作方式为固定16位自动重装载   装在值需重新计算

*/

//        T2L = -(FOSC/12/32/BAUD);                //设定定时初值

//        T2H = -(FOSC/12/32/BAUD);                //设定定时器重装值



        ET1 = 0;                                                //禁止定时器1中断

        TR1 = 1;                                                //启动定时器1

//        S1_USE_P36P37();                        //定义串口1管脚

        UART1_InterruptFirst();                  //中断优先级设定

        ES = 1;                                 //????????



   bitCtrl_485Eable=0;

}

/******************        *****************************************************/

/*************串口2初始化************/

/************************************************************************/


//#define                S3_Int_en()                        IE2   |=  8

void Uart2Init(void)                                //10毫秒@11.0592MHz

{

/*        

        T2MOD = 0;                                                //初始化模式寄存器

        T2CON = 0;                                                //初始化控制寄存器

        TL2 = -(FOSC/12/100);                        //设置定时初值

        TH2 = -(FOSC/12/100) >> 8;                //设置定时初值

        RCAP2L = -(FOSC/12/100);                //设置定时重载值

        RCAP2H = -(FOSC/12/100) >> 8;        //设置定时重载值

        TR2 = 1;                                            //定时器2开始计时

推荐阅读

史海拾趣

Electroswitch公司的发展小趣事

Electroswitch Electronics Products(以下简称“Electroswitch”)成立于1986年,是Electro Switch Corp的一个子公司,后者早在1946年就已创立。在创立之初,Electroswitch就致力于设计和制造高品质的开关产品,以满足电子应用领域的各种需求。通过不断的技术创新和产品优化,Electroswitch逐渐在电子行业中树立了良好的声誉。

Electro-Mech Components Inc公司的发展小趣事

自1976年起,EMC在蒂华纳不仅为自身运营制造工厂,还开始为其他美国公司,如GM/Hughes Aircraft和Daneher Joslyn Sunbank Electronics提供制造服务。这种深度合作模式不仅增强了EMC的生产能力,也使其能够接触到更多的先进技术和管理经验。通过与这些美国公司的合作,EMC的产品质量和生产效率都得到了显著提升,同时也为公司的全球化战略打下了坚实基础。

Diplohmatic A/S公司的发展小趣事

在追求经济效益的同时,Diplohmatic A/S公司也积极践行环保理念。公司投入资金研发环保型电子产品,采用可再生材料和节能技术,减少生产过程中的废弃物排放。此外,公司还积极参与环保公益活动,倡导绿色消费和低碳生活。这些举措不仅提升了公司的社会形象,也为推动电子行业的可持续发展做出了贡献。

Atlantic Microwave Ltd公司的发展小趣事

随着国内市场的饱和,Atlantic Microwave Ltd公司开始将目光投向了更广阔的国际市场。公司组织了一支专业的国际营销团队,深入调研不同国家和地区的市场需求和文化习惯,制定了针对性的市场推广策略。同时,公司还积极参与国际电子展会和技术交流活动,展示公司的最新产品和技术实力,成功打开了多个国际市场的大门。

Aearo Technologies公司的发展小趣事

随着技术的不断进步,Aearo Technologies在能量控制领域取得了重大突破。公司研发的新型材料不仅能够有效控制噪声和振动,还能提高产品的耐用性和可靠性。这些技术优势使得公司的产品在航空航天、军用防护以及消费电子等多个领域得到了广泛应用。通过不断拓展市场,Aearo Technologies逐渐成为了能量控制技术的领导者。

E-Mark Inc公司的发展小趣事

JKL公司是一家创新型电子企业,专注于研发新能源汽车电子控制系统。为了推动新能源汽车的发展并满足欧洲市场的需求,JKL公司决定对其产品进行E-Mark认证。在认证过程中,JKL公司积极投入研发资源,不断创新技术,提升产品的智能化和安全性。最终,JKL公司的产品成功获得了E-Mark认证,并在欧洲市场得到了广泛应用和认可。这一认证不仅加速了JKL公司新能源汽车技术的市场推广速度,也提升了公司在国际市场的竞争力。

问答坊 | AI 解惑

直流互感器仿真问题

各位师兄紧急求助: 如何用Mutisim10对直流互感器建模并仿真? 已知输入端dc电流20MA,输出5V 互感器资料见附件 先谢过师兄了!!!急。。。。。…

查看全部问答>

一声警钟:施工缺陷案例分析课件

今天偶然闲逛到一安全网站,看到内容不错,与大家共勉,虽然咱大多数搞弱电,但是保护身体。 生产过程中发生的大量事故不同程度的来自于设备或设施上的缺陷,这些缺陷可能产生于设备设施的结构、强度、材质等很多方面。当具有设计或施工缺陷的设备 ...…

查看全部问答>

求教。。如何区分420线和480线摄像机

:L :L :L :L      本人一直为怎样区分420线和480线摄像机而烦恼,在网上查了很多的方法,不过都要拆机看蕊片型号的,机被拆了就不保了,所以想找出其它的方法。近日从各位大侠分享的图片中发现420线枪的图像右边有一条从上至 ...…

查看全部问答>

ise 11.1使用遇到的问题

11.1,问下ise的行为仿真是怎么操作的?…

查看全部问答>

Marvell 8688 WIFI SDIO

问题是可以Search到AP,但是关联不上,每次连接都失败. OS起来后,debug port输出如下: -OALIntrRequestSysIntr(irq = 21, sysIntr = 27) GetSystemPowerStstusEx2 failed with error 0x1f. -OALIntrRequestSysIntr(irq = 100, sysIntr = 28) -OA ...…

查看全部问答>

请问下window mobile6.0 都支持哪些数据库啊

我的开发环境是VS2008+SQLite3,原以为window mobile6.0是支持sqlite的,结果做了例子,一直报错说error LNK2019: 无法解析的外部符号 sqlite3_open... 最初看sqlite介绍的时候说是支持智能手机的windowCE系统的,怎么会这样啊,真不支持吗? 如果 ...…

查看全部问答>

一些工程师的感言

很真切!这些有经验的工程师的讲的也许会对你有一定启示!…

查看全部问答>

段式液晶显示的驱动

本人是单片机的初学者,想用单片机控制段式液晶的显示,但不知道怎么选择外围电路,和程序的编写。所以想请教一下高手。…

查看全部问答>

海量TMS320C54x 资料共享

各取所需,觉得好的别忘了顶一下哈…

查看全部问答>

南华大学黄智伟 放大器类赛题使用的元器件汇总及有关设计制作中的一些问题探讨

本帖最后由 paulhyde 于 2014-9-15 03:00 编辑 南华大学黄智伟 放大器类赛题使用的元器件汇总及有关设计制作中的一些问题探讨    …

查看全部问答>