PIC单片机双机异步通信程序详解

2020-02-06来源: eefocus关键字:PIC单片机  双机异步通信  寄存器

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){


;


}

关键字:PIC单片机  双机异步通信  寄存器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic487381.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:关于PIC+TCA6424程序
下一篇:PIC单片机中断程序的设计技巧总结

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PIC单片机入门_MPLAB 集成开发环境和 MPASM编译器
1.七大汇编指令1.1 #INCLUDE语法:  #include “文件名.*” 或<文件名.*> 或无括号 或 引号示例:   #INCLUDE p12f675.inc1.2 #DEFINE用于定义变量和分配初始值;用户友好的名字被分配给常数,寄存器 ,管脚名等. 使程序易读;例:   #DEFINE MYCONSTANT H’5A’1.3 _ _CONFIG设置配置位1.4 ORG语法: ORG   <address>例: ORG 0x0000描述:  定义起始地址(0x0000).1.5 EQU语法:  &nbs
发表于 2020-03-09
PIC单片机入门_MPLAB 集成开发环境和 MPASM编译器
PIC单片机的第一个例程
今天白天在网上找软件找了好久,在官网下了MPLAB,和PICC还要注册比较麻烦。今天用的软件Protues仿真的。 第一个程序点亮一盏灯,电路很简单。下面贴出程序。 #include <pic.h>//包含头文件int main(void){    TRISB=0x00;//PortB方向寄存器,PortB为输出         while(1)    {         
发表于 2020-03-09
PIC单片机存储器拓展
择备用电池顶替上,改为备用电池供电,确保感应水龙头能正常工作不受影响。英锐恩开发芯片PIC16F684是Microchip的8位单片机产品,其功能特性主要有以下几点:增强中程核心,49个指令,16个堆栈级别具有自读写功能的FLASH程序存储器96 LCD段驱动支持内32 MHz振荡器集成电容mTouch传感模块综合温度指示器MI2C,SPI,EUSART W/AUTOW3 ECCP和2 CCP(增强/捕获比较PWM)可选电压基准的比较器14路电压基准10b模数转换器25 mA源/槽电流I/O四个8位定时器(TMR 0/TMR 2/TMR 4/TMR 6)一个16位定时器(TMR 1)扩展看门狗定时器(EWDT)增强型断电复位棕色复位
发表于 2020-03-08
如何在PIC单片机的GPIO引脚上生成PWM信号
T_OFF, 如上所示。T_OFF = T_TOTAL – T_ON鉴于这些公式,我们可以开始编程PIC单片机。该程序涉及PIC定时器模块 和PIC ADC模块 ,根据POT的ADC值,根据变化的占空比创建PWM信号。编程PIC在GPIO引脚上生成PWM在本节中,让我们了解程序的实际编写方式。像所有程序一样,我们首先设置配置位。我已经使用了memory views选项为我设置它。// CONFIG#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)#pragma config WDTE
发表于 2020-03-08
如何在PIC单片机的GPIO引脚上生成PWM信号
PIC单片机的新开发环境--MPLAB X IDE
自从学习pic单片机开始所有的历程全部是以MPLAB  IDE为编译环境,然MPLAB  IDE即便是最新的版本在win7 64位下运行也会出现挂载不上picc编译器的情况,这就导致了作为初学者的我选择了更换电脑系统的下下策。我安装了win7 32位系统,首先说32位系统会吞掉将近一个多G的内存分配给显卡,而且32位系统最多识别4个G的内存所以家内存条也解决不了问题,也就是说实际电脑使用的时候能用到的内存只有2个多G,这将对我们电脑的工作产生非常大的影响。于是我在网上搜罗发现Microchip公司推出的新版本的编译环境MPLAB X IDE是可以在windows7-10之间畅游的,所以便打起了这个家伙的主意
发表于 2020-03-05
PIC单片机之硬件仿真的配置字问题
注意:本实验的芯片是PIC24FJ256DA210,用到的开发环境是:MPLAB IDE v8.92   编译工具是xc16-gcc.exePIC单片机在硬件仿真的时候如果配置字配置不好,会出现不能仿真的后果,会有下面提示:PK3Err0040: The target device is not ready for debugging.Please check your configuration bit settings and programthe device before proceeding.如下图:这时候我的配置字是这样的:        _CONFIG1
发表于 2020-03-04
PIC单片机之硬件仿真的配置字问题
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved