历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2019年12月03日 | 如何在PIC单片机上实现发送数据

2019-12-03 来源:elecfans

该程序运行在pIC单片机p18f458上实现发送缓冲器0向接收缓冲器0发送数据的自测试模式,其中接收采用中断方式。


//发送采用查询方式

#include “p18f458.h”

intCAN_FLAG; //定义标志寄存器

//**************初始化子程序***************

void initcan()

{

TRISB=(TRISB|0X08)&0XFB; //设置CANRX/RB3为输入,CANTX/RB2为输出

//设置CAN的波特率为125K,在Fosc=4M时,Tbit=8us,假设BRP=01h

//则TQ=[2*(1+BRP)]/Fosc=2*(1+1)/4=1us。

如何在PIC单片机上实现发送数据

//NOMINAL BIT RATE=8TQ,SJW=1,Sync_Seg=1TQ,Prog _Seg=1TQ,Phase_Seg1=3TQ,Phase_Seg2=3TQ

CANCON=0X80; //请求进入CAN配置模式REQOP=100

while(CANSTAT&0X80==0){;} //等待进入CAN配置模式OPMODE=100

BRGCON1=0X01; //设置SJW和BRP,SJW=1TQ,BRP=01H

BRGCON2=0X90; //设置Phase_Seg1=3TQ和Prog _Seg=1TQ

BRGCON3=0X42; //设置Phase_Seg2=3TQ

//设置发送邮箱0标识符号和发送的数据

TXB0CON=0X03; //发送优先级为最高优先级,TXPRI=11

TXB0SIDH=0XFF; //设置发送缓冲器0的标准标识符,本程序采用标准识符

TXB0SIDL=0XE0;

TXB0DLC=0X08; //设置数据长度为8个字节

TXB0D0=0X00; //写发送缓冲器数据区的数据

TXB0D1=0X01;

TXB0D2=0X02;

TXB0D3=0X03;

TXB0D4=0X04;

TXB0D5=0X05;

TXB0D6=0X06;

TXB0D7=0X07;

//设置接收邮箱0的标识符和初始化数据

RXB0SIDH=0XFF; //设置接收缓冲器0的标识符

RXB0SIDL=0XE0;

RXB0CON=0X20; //仅仅接收标准标识符的有效信息,FILHIT0=0表示RXB0采用fiLTEr0

RXB0DLC=0X08; //设置接收缓冲器0的数据区长度

RXB0D0=0X00; //初始化接收缓冲器0的数据区数据

RXB0D1=0X00;

RXB0D2=0X00;

RXB0D3=0X00;

RXB0D4=0X00;

RXB0D5=0X00;

RXB0D6=0X00;

RXB0D7=0X00;

//初始化接收滤波器0和接收屏蔽,

RXF0SIDH=0XFF;

RXF0SIDL=0XE0;

RXM0SIDH=0X00;

RXM0SIDL=0X00;

//初始化CAN模块的I/O控制寄存器

//CIOCON=0X00;

//使CAN进入某种工作模式模式

CANCON=0X00; //=0X40,进入自测试模式;=0x00,正常操作模式

while(CANSTAT&0XE0!=0){;}

//while(CANSTAT&0X40==0){;}

//初始化CAN的中断

PIR3=0X00; //清所有中断标志

PIE3=0X01; //使能接收缓冲器0的接收中断

IPR3=0X01; //接收缓冲器0的接收中断为最高优先级

}

//*********接收缓冲器0接收中断服务程序***********

#pragma interrupt can_isr

#pragma code low_ISR=0x18

void low_ISR()

{

_asm

goto can_isr

_endasm

}

#pragma code

void can_isr()

{

if(PIR3bits.RXB0IF==1) CAN_FLAG=1;

PIR3bits.RXB0IF=0; //清接收中断标志

RXB0CONbits.RXFUL=0; //打开接收缓冲器来接收新信息

}

//****************主程序**can总线收发编程****************

main()

{

INTCON=0x00; //禁止所有中断

initcan();

WDTCON=0; //=1,看门狗使能;=0,禁止看门狗

INTCON=0xc0; //使能中断

while(1)

{

TXB0CONbits.TXREQ=1; //请求发送,TXREQ=1

while(PIR3bits.TXB0IF!=1){;} //等待发送完成

while(CAN_FLAG==0){;} //等待接收数据

CAN_FLAG=0; //清接收到标志

TXB0CONbits.TXREQ=0; //禁止发送

TXB0D0=RXB0D0+1; //用接收数据加1来更新发送数据

TXB0D1=RXB0D1+1;

TXB0D2=RXB0D2+1;

TXB0D3=RXB0D3+1;

TXB0D4=RXB0D4+1;

TXB0D5=RXB0D5+1;

TXB0D6=RXB0D6+1;

TXB0D7=RXB0D7+1;

}

}

推荐阅读

史海拾趣

C.K Magma公司的发展小趣事

为了进一步提升技术水平和市场竞争力,C.K Magma公司积极寻求国际合作。他们与国外的知名科研机构和企业建立了战略合作关系,共同开展技术研发和市场拓展。这些合作不仅为公司带来了先进的技术和管理经验,还拓宽了公司的国际视野,为公司的长远发展奠定了坚实基础。

Arima Lasers Corp公司的发展小趣事

Arima Lasers Corp的初期,是一个典型的初创企业,面临着资金短缺和技术难题的双重压力。然而,公司的研发团队在激光技术方面取得了重大突破,成功开发出一种新型的激光发射器,具有更高的功率和更稳定的性能。这一技术突破不仅吸引了投资者的关注,也为公司在市场上赢得了初步的声誉。随着产品的不断迭代和优化,Arima Lasers Corp逐渐在激光行业中占据了一席之地。

Daewoo公司的发展小趣事

随着金融危机的持续影响,Daewoo汽车公司最终未能幸免于难。2000年,大宇汽车公司宣告破产。然而,就在此时,美国通用汽车公司看到了Daewoo汽车公司的潜力和价值,决定对其进行收购。这一收购不仅为Daewoo汽车公司带来了新的生机,也使其能够借助通用汽车的技术和管理经验实现转型和升级。

兆易创新(GigaDevice)公司的发展小趣事

Daewoo公司最初由金宇中于1967年创建,起始于一个规模不大的纺织厂。然而,金宇中并不满足于纺织业的局限,他敏锐地察觉到了韩国经济快速发展的机遇。于是,Daewoo公司逐渐扩展业务领域,70年代侧重发展化学工业,80年代后更是进军汽车、电子和重工业领域,并积极参与国外资源的开发。这种前瞻性的战略布局,为Daewoo公司的快速发展奠定了基础。

Bomar Interconnect公司的发展小趣事

为了确保产品质量和稳定性,Bomar Interconnect公司建立了严格的质量管理体系。公司引进了先进的质量检测设备和方法,对原材料、生产过程、成品进行全面检测和控制。同时,公司还加强了员工培训,提高了员工的质量意识和操作技能。这些措施有效提升了产品的质量水平,降低了不良品率,为客户提供了更加可靠的产品和服务。

遨格芯微(AGM)公司的发展小趣事

遨格芯微(AGM)自2012年成立以来,始终致力于可编程逻辑技术的研发。经过数年的努力,AGM成功开发出具有自主知识产权的FPGA核心技术,并在FPGA编译软件和电路领域取得了先进和成熟的技术成果。2014年,AGM的PLD芯片成熟并开始在行业得到应用,这标志着AGM在可编程逻辑技术领域取得了重大突破。随后,AGM推出三个系列的CPLD、FPGA、Programmable SoC产品,并进入量产阶段,得到了包括三星在内的多家知名厂商的认证,为公司的进一步发展奠定了坚实基础。

问答坊 | AI 解惑

单片机电源及基本部分的安装调试

v 单片机电源及基本部分的安装调试…

查看全部问答>

TI科学家谈浮点DSP未来发展

自十多年前浮点数字信号处理器(DSP)诞生以来,便为实时信号处理提供了算术上更为先进的备选方案。不过,定点器件至今仍是业界的主流--当然低成本是主要原因。定点DSP每器件产品的价格很低,这对大规模大众市场应用而言是相当重要的优势。 相比较而 ...…

查看全部问答>

人员定位系统基站

系统简介   本系统采用国际标准ZigBee无线通讯技术, 集人员定位,考勤管理和安全管理于一体。系统能够及时、准确地将管理区域内各个区域人员情况动态反映到管理中心,使管理人员能够随时掌握管理区域内人员的总数及分布情况,以便于进行更 ...…

查看全部问答>

大侠们

#pragma interrupt_handler int0_isr:2 中断0  上升沿有效 void int0_isr(void) {CLI();TCCR1B=0x00;//关断计数器 a=TCNT1H;  记录下电平的时间 即计数次数。一个数组记录高八位  一个数组记录低八位。 b=TCNT1 ...…

查看全部问答>

3g卡或者GPRS 处于online data 模式下 收不到新短信提示,怎么处理 的??

请教个问题:3g卡或者GPRS 处于online data 模式下 收不到新短信提示,怎么处理 的?? 如何在拨上号后仍然可以正常接收到新短信提示?几种cnmi的设置都试过,不行,只要拨上号后,就无法收到短信到达提示。 …

查看全部问答>

用Protues仿真时出现的问题!急急急!请各位高手帮忙!

我用proteus把原理图画好后,在芯片AT89C52上加入.hex文件,然后开始仿真。之后就是出现以下两个问题: 1 Node VCC not found whilst binding pin V+ of U3-ADC#0028! 2 Simulation FAILED due fatal simulator errors. 我的汇编程序是在KEIL ...…

查看全部问答>

如何用C#编写播放wav的代码

我用VS2005 C#开发PDA程序,现在需要当点击某个按钮的时候发出哔的声音,我准备好了wav文件,可是不会编写播音代码,好像用playsound不行,因为那是windows平台下的api. pda的操作系统是windowsmobile5…

查看全部问答>

微软:amd APU可以充分释放ie九硬件加速

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 AMD今天终于在CES 2011上正式发布了筹备多年的Fusion APU融合加速处理器,也宣告了融合时代的正式带来。对于这一技术,微软亦十分欢迎,并且表示,采用AMD Fusion APU的计算机能充分利用IE9的 ...…

查看全部问答>

ARM与英蓓特推出中国版MCU开发工具包价格低于¥5,000元

ARM与英蓓特推出中国版MCU开发工具包 价格低于¥5,000元  上网时间:2007年05月24日  ARM公司与深圳市英蓓特信息技术有限公司日前推出中国版ARM RealView微处理器开发工具包(MDK)。这一新产品是特别为满足中国软 ...…

查看全部问答>

STM8S中断程序中不能做乘法运算

                                 乘法运算在主程序中正常,也可作为函数在中断中调用。但是直接在中断中就异常,后发现问题出在*2的整数倍以外的运 ...…

查看全部问答>