历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | PIC单片机双机异步通信程序详解

2020-02-06 来源:eefocus

1 单片机PIC1编程(发送部分)


#include


/*该程序实现单片机双机异步通信功能,该程序是发送部分*/


unsigned char tran[8]; /*定义一个数组存储发送数据*/


unsigned char k,data; /*定义通用寄存器*/


cONST char table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,


0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};


/*不带小数点的显示段码表*/


/*SPI显示初始化子程序*/


void SPIINIT()


{


PIR1=0;


SSPCON=0x30;


SSPSTAT=0xC0;


/*设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送,与"74HC595,当其


*SCLK从低到高跳变时,串行输入寄存器"的特点相对应*/


TRISC=0xD7; /*SDO引脚为输出,SCK引脚为输出*/


TRISA5=0; /*RA5引脚设置为输出,以输出显示锁存信号*/


}


/*给数组赋初值子程序 */


void fuzhi()


{


for(k=0;k<8;k ) {


tran[k]=k 3;


}


}


/*SCI部件初始化子程序*/


void sciint()


{


SPBRG=0X19; /*将传输的波特率设为约9 600位/秒*/


TXSTA=0X04; /*选择异步高速方式传输8位数据*/


RCSTA=0X80; /*允许同步串行口工作*/


TRISC6=1;


TRISC7=1; /*将RC6、RC7设置为输入方式,对外部呈高阻状态*/


}


/*SPI传输数据子程序*/


void SPILED(data)


{


SSPBUF=data; /*启动发送*/


do {


;


}while(SSPIF==0);


SSPIF=0;


}


/*显示子程序,显示8位数*/


void display()


{


RA5=0; /*准备锁存*/


for(k=0;k<8;k ) {


data=tran[k];


data=table[data]; /*查得显示的段码*/


SPILED(data); /*发送显示段码*/


}


RA5=1; /*最后给一个锁存信号,代表显示任务完成*/


}


/*主程序*/


main()


{


SPIINIT();


fuzhi(); /*给数组赋初值*/


sciint(); /*SCI部件初始化*/


di(); /*中断禁止*/


TXEN=1; /*发送允许*/


CREN=1; /*接收数据允许*/


for(k=0;k<8;k ){


TXREG=tran[k]; /*发出一个字符*/


while(1){


if(TXIF==1) break;


} /*等待写入完成*/


while(1){


if(RCIF==1) break;/*若收到响应字节,则终止等待*/


}


RCREG=RCREG; /*读响应字节,清RCIF*/


}


display(); /*显示发送的数据*/


while(1){


;


}


}

2 单片机PIC2编程(接收部分)


#include


/*该程序实现单片机双机异步通信功能,该程序是接收部分,并把接收的数据显示在8*个LED上*/


unsigned char rece[8];/*定义一个数组存储接收数据*/


unsigned char k,data;/*定义通用寄存器*/


const char table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,


0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};


/*不带小数点的显示段码表*/


/*spi显示初始化子程序*/


void SPIINIT()


{


;详细语句见发送程序


}


/*SCI部件初始化子程序*/


void sciint()


{


SPBRG=0X19; /*波特率设置与PIC1相同,为约9 600位/秒*/


TXSTA=0X04; /*异步高速传输*/


RCSTA=0X80; /*串行口工作使能*/


TRISC6=1;


TRISC7=1; /*将RC6、RC7设置为输入方式,对外部呈高阻状态*/


}


/*SPI传送数据子程序*/


void SPILED(data)


{


;详细语句与见发送程序


}


/*显示子程序,显示4位数*/


void display()


{


RA5=0; /*准备锁存*/


for(k=0;k<8;k ){


data=rece[k];


data=table[data]; /*查得显示的段码*/


SPILED(data); /*发送显示段码*/


}


RA5=1; /*最后给一个锁存信号,代表显示任务完成*/


}


/*主程序*/


main()


{


SPIINIT(); /*spi显示初始化*/


sciint(); /*SCI部件初始化*/


di(); /*中断禁止*/


CREN=1; /*接收允许*/


TXEN=1; /*发送允许*/


for(k=0;k<8;k ){


while(1){


if(RCIF==1) break;


} /*等待接收数据*/


rece[k]=RCREG; /*读取接收数据,同时清掉RCIF*/


TXREG=rece[k]; /*发送接收到的数据*/


while(1){


if(TXIF==1) break;


} /*等待写入完成*/


}


display(); /*显示接收的数据*/


while(1){


;


}

推荐阅读

史海拾趣

Advanced Optoelectronic Technology Corp公司的发展小趣事

在光电技术领域,AOTC始终保持领先地位。公司不断推出创新产品,如高效能的光电传感器、智能照明系统等,这些产品不仅提升了人们的生活品质,还推动了整个电子行业的变革。AOTC的技术创新得到了业界的广泛认可,公司逐渐成为了行业的领军企业。

Condor公司的发展小趣事

AOTC公司起源于一个由几位电子工程专家组成的小团队,他们共同研发出了一种新型的光电转换器,具有更高的转换效率和更小的体积。这一技术突破迅速吸引了风险投资家的注意,公司得到了初始的资金支持,并开始了正式的商业化进程。

GAIA Converter Inc公司的发展小趣事

锋鸣电子(北京分公司)在成立初期便意识到供应链管理的重要性。公司通过与上游原材料供应商建立长期稳定的合作关系,确保原材料的稳定供应和成本控制。同时,公司还加强了对下游客户的沟通与服务,根据客户需求定制化生产,提升客户满意度。通过高效的供应链整合,锋鸣电子在激烈的市场竞争中保持了良好的竞争力,实现了业务的稳步增长。

ConnectBlue公司的发展小趣事

2014年5月19日,ConnectBlue公司被全球领先的定位与无线通信技术公司u-blox收购。这一收购为ConnectBlue公司带来了新的发展机遇和更广阔的市场空间。在u-blox的支持下,ConnectBlue公司得以进一步加大研发投入,拓展产品线,提升产品品质和服务水平。同时,公司还借助u-blox的全球销售网络和品牌影响力,进一步开拓国际市场,实现了新的跨越式发展。

Elekon Industries公司的发展小趣事

Elekon始终将品质放在首位。公司建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。此外,Elekon还引进了先进的生产设备和技术,确保产品的质量和性能达到国际先进水平。这些举措使得Elekon的产品在市场上享有很高的声誉和口碑。

BELDEN公司的发展小趣事

随着市场的不断发展和竞争的加剧,BELDEN公司开始通过并购来扩大规模和提升竞争力。2004年7月,BELDEN公司与CDT公司合并,这次合并使得BELDEN成为了全球最大的通讯线缆和网络产品生产厂家之一。合并后的BELDEN不仅拥有了更丰富的产品线和更强大的技术实力,还进一步提升了在全球市场中的竞争地位。此后,BELDEN继续通过并购等方式不断扩大规模,逐步成为了电子行业的领军企业。

问答坊 | AI 解惑

电流放大电路

谁有电流放大电路的相关资料,拿出来分享一下。实用的电路最好,我找了好几个电路,但调试结果都不太理想。 …

查看全部问答>

继电器学习

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 继电器学习,资料分享!! [ 本帖最后由 open82977352 于 2010-2-10 16:47 编辑 ]  …

查看全部问答>

字符输出有误!

程序实现若输入“abcdefg”,则输出将其完全反向输出,应为“gfedcba”,但下面程序输出无结果,忘大家告知下!哪里有错误#include \"stdio.h\"#include \"string.h\"   int main(){char pstr[10];strcpy(pstr, \"abcdefg\");char tmp ...…

查看全部问答>

在EVC中如何给按钮贴图?

我想在EVC中如何给按钮贴图,可是setbitmap函数evc不能用,应该怎么办啊?麻烦哪位给解答一下,谢谢了~~~~~~…

查看全部问答>

求助关于MC35I模块的问题

我在使用MC35I模块时出现了一些疑问,紧急求助,不盛感谢! 1.请问六脚的SIM卡插座与MC35I模块应该如何硬件连接,SIM卡的VPP引脚需要使用吗? 2.我使用单片机控制该模块,每次模块启动后,当模块搜索网络时,模块就掉电了,我给模块提供的电压是4.2 ...…

查看全部问答>

isp 烧录

对于stc单片机和atmel单片机的烧录硬件是否一样? 为何用相同的硬件烧录不进去?…

查看全部问答>

SPI重映射

我现在碰到的问题是,SPI的NSS接到PA4,我又要用SPI又要用DAC,它们共用一个引脚,我该怎么配置, 用SPI的重映射可以实现吗?附板子电路图…

查看全部问答>

CCS3.3下,如何加载库

求助 CCS下是否可以加载DLL库?如果可以,如何实现? 如果不行,可否加载其他库?如何实现? 实际上我是想将自己编写的某个模块做成一个库,然后加载进CCS的工程中。 求助高手!…

查看全部问答>

请问这些电子器件,找不到封装图及功能是什么,谢谢!

EXCCET24WC256BLM41P750SPT74AHC1G14BLM21B331SBRCA_JACKCONNECTOR45750317U8A_XC2S300E-7TQ208CU8BBelFuse S558-5999-T7 …

查看全部问答>

烙铁温度测量工具有哪些?

如题,烙铁温度测量工具有哪些? \0\0\0eeworldpostqq…

查看全部问答>