今天是: 创芯电子 | 发布供求信息 | 设为首页 | 加入收藏  

首页   解密专栏   设计应用    初学实战   解决方案   下载中心   厂商信息   供求信息   资讯快递   联系我们
热点推荐
揭开物联网产业链全局图:..
我国电子信息产业现状及面..
深圳IC设计"拨云见日" ..
绿色、安全和通讯是汽车电..
从香港电子展分析消费电子..
金融危机影响电子元器件市..
松翰单片机解密/FEELING单..
并行频域OCT图像预处理系统..
基于dSPACE的双绕组感应发..
基于RF技术的机械数码一体..

图片链接






 首页 >> 初学实战 >> 串行通讯
单片机双机异步通信程序
时间: 2008-7-11
该实例采用PIC单片机设计

1 单片机PIC1编程(发送部分)
#include <pic.h>
/*该程序实现单片机双机异步通信功能,该程序是发送部分*/
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 <pic.h>
/*该程序实现单片机双机异步通信功能,该程序是接收部分,并把接收的数据显示在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){

}
}
 
上一篇: 单光子水平的超快全光开关原理性实验得以实现
下一篇: PIC单片机控制步进电机源程序
打印】 【关闭

【资讯版权声明】
 1. 凡本网站注明“来源:单片机基地”的所有作品,版权均属于单片机基地,转载请注明“来源:单片机基地”。
 2. 本网转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
 3. 未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
 4. 违反上述声明者,本网将追究其相关法律责任。谢谢!

网站地图  广告服务  版权声明  友情连接  关于我们 
Copyright©2005-2010 单片机基地,创芯电子技术 版权所有
技术支持:0755-82701553 21976338 E-mail:mcubase@163.com QQ:719659769
致力于单片机解密,IC解密,芯片解密加密技术研究,提供芯片解密服务,仅供合法研究学习用途
基地资源仅供学习参考,部分内容来源于网络,如侵犯您的版权,请通知本站即撤
ICP备案序号:粤ICP备06120039号