PIC单片机通用同步异步通信的应用_第1页
PIC单片机通用同步异步通信的应用_第2页
PIC单片机通用同步异步通信的应用_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第8章 通用同步/异步通信的应用8.5单片机双机异步通信1单片机PIC1编程(发送部分)#in clude<pic.h>/*该程序实现单片机双机异步通信功能,该程序是发送部分*/unsignedchartran8;/*定义一个数组存储发送数据*/unsignedchark , data ;/* 定义通用寄存器 */con st char table20=0xc0, 0xf9, 0xa4, OxbO , 0x99, 0x92, 0x82, 0XD8, 0x80,0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0x7f, 0xbf, 0x89, 0x

2、ff;/*不带小数点的显示段码表*/*spi显示初始化子程序*/void SPIINIT()PIR 仁0;SSPCON=0x30SSPSTAT=0xC0/*设置SPI的控制方式,允许 SSP方式,并且时钟下降沿发送,与"74HC595,当其*SCLK从低到高跳变时,串行输入寄存器”的特点相对应*/TRISC=0xD7;/*SDO引脚为输出,SCK引脚为输出*/TRISA5=0;/*RA5弓I脚设置为输出,以输出显示锁存信号*/*给数组赋初值子程序*/ void fuzhi()for(k=0 ; k<8; k+)tran k=k+3;voidscii nt()SPBRG=0X19

3、TXSTA=0X04RCSTA=0X80/*SCI部件初始化子程序*/*将传输的波特率设为约9 600位/秒*/*选择异步高速方式传输8位数据*/*允许同步串行口工作*/TRISC6=1;TRISC7=1;/*SPI传输数据子程序*/*将RC6 RC7设置为输入方式,对外部呈高阻状态*/voidSPILED(data)SSPBUF=data do /*启动发送*/*while(SSPIF=O);SSPIF=0;显示子程序,显示void display。8位数*/RA5=0;for(k=0 ; k<8;data=tra nkk+)/*准备锁存*/*data=tabledataSPILED(

4、data)RA5=1 ;/*/*主程序*/main ()SPIINIT0;fuzhi();scii nt();di();TXEN=1CREN=1 for(k=0 ; k<8 ;k+)/*/*/*TXREG=trank;while(1)if(TXIF=1) break while(1)/*查得显示的段码*/发送显示段码*/最后给一个锁存信号,代表显示任务完成/*给数组赋初值*/*SCI部件初始化*/中断禁止*/发送允许*/接收数据允许*/*发出一个字符*/*等待写入完成*/*/if(RClF=1) break ; /*若收到响应字节,则终止等待*/RCREG=RCREG /* 读响应字节,

5、清 RCIF*/display。;/*显示发送的数据*/while(1);2单片机PIC2编程(接收部分)#in clude<pic.h>/*该程序实现单片机双机异步通信功能,该程序是接收部分,并把接收的数据显示在*个LED上*/un sig ned char un sig ned char const charrece8 ; /*定义一个数组存储接收数据,data ; /*定义通用寄存器*/,0xf9, 0xa4,0xb0, 0x99, 0x92, 0x82,*/0x80, 0x90, 0x88,/*不带小数点的显示段码表/*spivoidtable20=0xc00x83,显示初

6、始化子程序*/SPIINIT()0XD8,0xc6, 0xa1, 0x86, 0x8e, 0x7f, 0xbf, 0x89, 0xff; */详细语句见发送程序/*SCIvoid部件初始化子程序scii nt()*/SPBRG=0X19TXSTA=0X04RCSTA=0X80TRISC6=1;TRISC7=1;/*SPI传送数据子程序*/*/*/*波特率设置与 PIC1相同,为约9 600位/秒*/ 异步高速传输*/串行口工作使能*/*将RC6 RC7设置为输入方式,对外部呈高阻状态*/voidSPILED(data)详细语句与见发送程序/*显示子程序,显示 4位数*/voiddisplay(

7、)RA5=0;for(k=0 ; k<8; k+)data=recek ;/*准备锁存*/*data=tabledataSPILED(data)RA5=1;/*/*/*查得显示的段码*/发送显示段码*/最后给一个锁存信号,代表显示任务完成*/主程序*/main ()SPIINIT(); sciin t();di(); CREN=1 TXEN=1 for(k=0 ; k<8 ;while(1) if(RCIF=1) break recek=RCREG ; TXREG=recek; while(1)if(TXIF=1) break display() ; while(1)k+)/*/*

8、/*spi显示初始化*/ /*SCI部件初始化*/*中断禁止*/接收允许*/发送允许*/*等待接收数据*/*读取接收数据,同时清掉/*发送接收到的数据*/*等待写入完成*/*显示接收的数据*/RCIF*/8.6单片机双机同步通信1单片机PIC1编程(主控发送)#in clude<pic.h>/*该程序实现单片机双机同步通信功能,是主控发送部分。程序上电后显示*相应的字符,表示系统正常工作。发送完毕后显示发送的数据*/unsignedchartran8 ;/*定义一个数组存储发送数据*/unsignedchar k, data ;/* 定义通用寄存器 */con stchar tab

9、le20=0xc0, 0xf9, 0xa4,OxbO, 0x99, 0x92, 0x82,0XD8,0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0x7f, 0xbf, 0x89, 0xff;/*不带小数点的的显示段码表*/*spi显示初始化子程序*/void SPIINIT();详细程序语句请参考本章8.5节/*给发送数组赋初值子程序*/ void fuzhi()for(k=0 ; k<8 ; k+)tran k=k;/*发送07八个数据*/voidscii nt()SPBRG=200;TXSTA=0X90RCSTA=0X80TRISC

10、6=1;TRISC7=1;/*SCI部件初始化子程序*/*将传输的波特率设为约9600位/秒*/*选择主控方式*/*允许同步串行口工作 */*将RC6 RC7设置为输入方式,对外部呈高阻状态*/*SPI传送数据子程序*/ void SPILED(data);详细程序语句请参考本章8.5节 /*显示子程序,显示8位数*/void display()准备锁存*/RA5=0;/*for(k=0 ; k<8; k+)data=tra nk ; data=tabledata SPILED(data);RA5=1;/*查得显示的段码*/*发送显示段码*/*最后给一个锁存信号,代表显示任务完成*/*显

11、示子程序,显示 8位数*/void display1()RA5=0;/*准备锁存*/for(k=0 ; k<8; k+)data=0xf9 ;/*显示"1"表示系统正常工作*/SPILED(data);/*发送显示段码*/main ()SPIINIT0;fuzhi(); scii nt() ; di(); TXEN=1 display1();*/RA5=1 ;/*最后给一个锁存信号,代表显示任务完成/*主程序*/*spi显示初始化*/*给发送数组赋发送初值*/*SCI部件初始化*/*中断禁止*/*发送允许*/*显示相应的字符,表示系统正常*/while(1)for(k

12、=0 ; k<8 ; k+)TXREG=trank ; /* 发出一个字符 */ while(1)if(TXIF=1) break ;/*等待上一个数据写入完成*/display() ;/*显示发送的数据*/*循环发送*/2单片机PIC2编程(从动接收)0xa4, 0xb0, 0x99, 0x92, 0x82, 0XD8, 0x80,#in elude <pic.h>0x90, 0x88, 0x83, 0xc6,0xa1, 0x86,0x8e, 0x7f, 0xbf, 0x89, 0xff/*不带小数点的显示段码表 */ /*spi显示初始化子程序*/ void SPIINI

13、T();详细程序语句请参考本章/*SCI部件初始化子程序*/ voidscii nt()TXSTA=0X10 ;RCSTA=0X90TRISC6=1;TRISC7=1;8.5节/*选择同步从动方式*/*串行口工作使能*/*将RC6 RC7设置为输入方式对外部呈高阻状态*/*SPI传送数据子程序*/void SPILED(data);/*详细程序语句请参考本章8.5节*/*显示子程序,显示 4位数*/void display()RA5=0;/*准备锁存*/for(k=0 ; k<8 ; k+)data=recek ;*示在8个LED上*/un sig nedcharrece8;/*定义一个

14、数组存储接收数据*/un sig nedchark, data ;/*定义通用寄存器*/un sig nedinti ;/*该程序实现单片机双机同步通信功能,是从动接收部分,并把接收的数据显const char table20=0xc00xf9,data=tabledataSPILED(data);RA5=1;/*查得显示的段码*/*发送显示段码*/*最后给一个锁存信号,代表显示任务完成*/*主程序*/main ()SPIINITO ; scii nt() ; di(); CREN=1/*spi显示初始化*/*SCI部件初始化*/*中断禁止*/*接收允许*/for(k=0 ; k<8 ;

15、 k+) recek=0x03 ;display() ;/*显示表示系统正常运行的数据*/while(1)while(1)CREN=1 /*允许连续接收*/while(1)if(RCIF=1) break ;/*等待接收数据*/k=0;recek=RCREG ; /*读取接收数据*/if(OERR=1) /*如果有溢出错误,则处理*/CREN=0CREN=1if(recek=OxOO) break ; /* “ 0”为同步字符,只有接收到"0”时才进行下面的接收*/for(k=1 ; k<8; k+)while(1)if(RCIF=1) break ;/*等待接收数据*/rec

16、ek=RCREG ; /*读取接收数据*/if(OERR=1) /*如果有溢出错误,则处理*/CREN=0CREN=1recek=recek&OxOF ; /*屏蔽掉高位,防止干扰*/CREN=0display() ;/*显示接收的数据*/for(i=65535;-i ; continue ;for(i=65535;-i ; )continue ; /*给予一疋时间的延时,再进仃下一轮接收*/8.7单片机与PC机通信1 PC机编程PC采用Toubr C进行编写。程序如下:#in clude<stdio.h>#defi ne port 0x3f8 in t ch15;main

17、 ()int a;int i, j ;/*利用串口 1进行通信*/int b6=88,char c ;clrscr();15, 38, 26,20, 0;outportb(port+3,0x80);/*准备设置波特率*/outportb(port,0x0C);/*波特率设置为 9600bps*/outportb(port+1,0x00);outportb(port+3,0x03);/*8位数据,无奇偶检验,1位停止位*/outportb(port+1,0x00);/*关中断*/in portb(port+5)for(;);/*读一次线路状态寄存器,使其复位*/prin tf("tts

18、e nd data or receive data: (s or r?)nnn");c=getchar() ;switch(c) case 's':case 'S': while(!(inportb(port+5)&0x20); /* 发送保持器满则等待 */outportb(port, 0x01) ;/*否则发送数据01,通知单片机准备接收*/for(i=0; i<6 ; i+)/* 共发送 6 个数据 */a=bi;while(!(i nportb(port+5)&0 x20) delay(100)outportb(port, a);printf("%dn", a);/*/*;/*发送保持器满,等待*/发送a*/显示a*/while(!(i nport(port+5)&1)chi=i nport(port);delay(10);for(j=0 ; j<8 ; j+) printf("n%dn" getch();break ;/*接收单片机送回的数据 */*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论