下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 8 章 通用同步 / 异步通信的应用8.5 单片机双机异步通信1 单片机 PIC1 编程(发送部分)#include <pic.h>/* 该程序实现单片机双机异步通信功能,该程序是发送部分 */unsigned char t ran8 ; /* 定义一个数组存储发送数据 */ unsigned char k,data ;/* 定义通用寄存器 */const char table20=0xc0,0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0XD8, 0x80 , 0x90 , 0x88 ,0x83 ,0xc6 , 0xa1, 0x86,0x
2、8e, 0x7f ,0xbf , 0x89 ,0xff ;/* 不带小数点的显示段码表 */*spi 显示初始化子程序 */void SPIINIT()PIR1=0;SSPCON=0x3;0SSPSTAT=0xC;0/*设置SPI的控制方式,允许 SSP方式,并且时钟下降沿发送,与"74HC595,当其*SCLK从低到高跳变时,串行输入寄存器”的特点相对应*/TRISC=0xD7;TRISA5=0;/*SDO引脚为输出,SCK引脚为输出*/*RA5 引脚设置为输出,以输出显示锁存信号*/* 给数组赋初值子程序 */void fuzhi()for(k=0 ; k<8;k+) tr
3、ank=k+3 ;void sciint()SPBRG=0X1;9TXSTA=0X04;RCSTA=0X8;0TRISC6=1;TRISC7=1;/*SCI 部件初始化子程序 */* 将传输的波特率设为约 9 600 位/ 秒*/* 选择异步高速方式传输 8 位数据 */*将RC6 RC7设置为输入方式,对外部呈高阻状态*/* 允许同步串行口工作 */*SPI 传输数据子程序 */ void SPILED(data)do while(SSPIF=0) ;SSPIF=0;/* 显示子程序,显示 8 位数 */ void display()RA5=0;for(k=0 ; k<8;k+) da
4、ta=trank ; data=tabledata SPILED(data)RA5=1;/*准备锁存 */*/*/*主程序 */main()SPIINIT() ; fuzhi() ; sciint() ; di() ; TXEN=1; CREN=;1 for(k=0 ; k<8;k+)/* 查得显示的段码 */ 发送显示段码 */最后给一个锁存信号,代表显示任务完成/* 给数组赋初值 */*SCI 部件初始化 */ 中断禁止 */* 发送允许 */*/* 接收数据允许 */TXREG=trank ; while(1)if(TXIF=1) break while(1)if(RCIF=1)
5、break /* 发出一个字符 */* 等待写入完成 */; /* 若收到响应字节,则终止等待RCREG=RCR;EG /* 读响应字节,清 RCIF*/ display() ; while(1)/* 显示发送的数据 */*/*/2 单片机 PIC2 编程(接收部分)#include <pic.h>*个led上*/unsignedcharrece8 ; /* 定义一个数组存储接收数据*/unsignedchark , data ; /* 定义通用寄存器 */constchartable20=0xc0, 0xf9 , 0xa4, 0xb0,0x99, 0x92, 0x82, 0XD8
6、, 0x80, 0x90,0x88 ,0x83 , 0xc6 , 0xa1,0x86, 0x8e, 0x7f ,0xbf ,0x89 , 0xff ; /* 不带小数点的显示段码表 */*spi 显示初始化子程序 */ void SPIINIT();详细语句见发送程序/*SCI 部件初始化子程序 */void sciint()SPBRG=0X1;9TXSTA=0X04;RCSTA=0X8;0TRISC6=1;TRISC7=1;/*波特率设置与 PIC1相同,为约9 600位/秒*/* 异步高速传输 */* 串行口工作使能 */*将RC6 RC7设置为输入方式,对外部呈高阻状态*/*SPI 传送
7、数据子程序 */void SPILED(data);详细语句与见发送程序/* 显示子程序,显示 4 位数 */void display()RA5=0;for(k=0 ; k<8;k+) data=recek ; data=tabledata SPILED(data) ;RA5=1;/* 主程序 */* 准备锁存 */* 查得显示的段码 */* 发送显示段码 */* 最后给一个锁存信号,代表显示任务完成*/main()SPIINIT() ; sciint() ; di() ;/*spi 显示初始化 */*SCI 部件初始化 */* 中断禁止 */CREN=;1TXEN=1;for(k=0
8、; k<8;k+)while(1) if(RCIF=1) break recek=RCREG; TXREG=recek ; while(1)if(TXIF=1) break display() ;while(1)/* 接收允许 */ /* 发送允许 */* 等待接收数据 */* 读取接收数据,同时清掉 RCIF*/* 发送接收到的数据 */* 等待写入完成 */* 显示接收的数据 */8.6 单片机双机同步通信1 单片机 PIC1 编程(主控发送)#include <pic.h>/* 该程序实现单片机双机同步通信功能,是主控发送部分。程序上电后显示* 相应的字符,表示系统正常
9、工作。发送完毕后显示发送的数据 */unsigned char tran8 ; /* 定义一个数组存储发送数据 */ unsigned chark, data ; /* 定义通用寄存器 */const char table20=0xc0,0xf9 ,0xa4,0xb0,0x99,0x92,0x82 ,0XD8,0x80,0x90,0x88 ,0x83 , 0xc6 , 0xa1,0x86, 0x8e, 0x7f ,0xbf ,0x89 , 0xff ;/* 不带小数点的的显示段码表 */*spi 显示初始化子程序 */void SPIINIT();详细程序语句请参考本章 8.5 节/* 给发送
10、数组赋初值子程序 */void fuzhi()for(k=0 ; k<8;k+)trank=k ;/*发送07八个数据*/*SCI 部件初始化子程序 */void sciint()SPBRG=200;TXSTA=0X90;RCSTA=0X8;0TRISC6=1;TRISC7=1;/*/*/*将传输的波特率设为约 9600 位/ 秒*/选择主控方式 */允许同步串行口工作 */*将RC6 RC7设置为输入方式,对外部呈高阻状态*/*SPI 传送数据子程序 */void SPILED(data);详细程序语句请参考本章 8.5 节/* 显示子程序,显示 8 位数 */void display
11、()RA5=0;/* 准备锁存 */for(k=0 ; k<8;k+)data=trank ;data=tabledataSPILED(data) ; RA5=1; /* 查得显示的段码 */* 发送显示段码 */* 最后给一个锁存信号,代表显示任务完成*/* 显示子程序,显示 8 位数 */void display1()RA5=0;/* 准备锁存 */for(k=0 ; k<8;k+) data=0xf9 ; SPILED(data) ;RA5=1;/* 主程序 */* 显示 "1" 表示系统正常工作 */* 发送显示段码 */* 最后给一个锁存信号,代表显示
12、任务完成*/main()SPIINIT() ; fuzhi() ; sciint() ; di() ; TXEN=1; display1() ;/*spi 显示初始化 */* 给发送数组赋发送初值 */*SCI 部件初始化 */* 中断禁止 */* 发送允许 */* 显示相应的字符,表示系统正常 */while(1)for(k=0 ; k<8;k+)TXREG=trank ; /* 发出一个字符 */ while(1)if(TXIF=1) break;/*等待上一个数据写入完成 */ display();/*显示发送的数据*/*循环发送 */2 单片机 PIC2 编程(从动接收)#inc
13、lude <pic.h>/* 该程序实现单片机双机 同步通信功能,是从动接收部分,并把接收的数据显unsignedcharrece8 ;/* 定义一个数组存储接收数据 */unsignedchark, data ;/* 定义通用寄存器 */unsignedinti;*示在8个LED上*/const char table20=0xc0,0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0X D 8, 0x80 , 0x90 , 0x8 8 ,0x83 ,0xc6 , 0xa1, 0x86,0x8e,0x7f ,0xbf ,0x89 ,0xff/* 不
14、带小数点的显示段码表 */*spi 显示初始化子程序 */ void SPIINIT();详细程序语句请参考本章/*SCI 部件初始化子程序 */ void sciint()TXSTA=0X10 ; RCSTA=0X9;0TRISC6=1;TRISC7=1;8.5 节/* 选择同步从动方式 */* 串行口工作使能 */*将RC6 RC7设置为输入方式对外部呈高阻状态*/*SPI 传送数据子程序 */void SPILED(data); /* 详细程序语句请参考本章8.5 节*/* 显示子程序,显示 4 位数 */void display()RA5=0;/* 准备锁存 */* 查得显示的段码 *
15、/* 发送显示段码 */* 最后给一个锁存信号,代表显示任务完成*/for(k=0 ; k<8;k+) data=recek ; data=tabledata SPILED(data) ;RA5=1;main()SPIINIT() ; sciint() ; di() ; CREN=;1/* 主程序 */*spi 显示初始化 */*SCI 部件初始化 */* 中断禁止 */* 接收允许 */for(k=0 ; k<8;k+) recek=0x03 ;display() ; /* 显示表示系统正常运行的数据 */ while(1) while(1)CREN=;1/* 允许连续接收 */
16、while(1) if(RCIF=1) break ; /* 等待接收数据 */k=0;recek=RCREG ; /* 读取接收数据 */ if(OERR=1) /* 如果有溢出错误 ,则处理 */CREN=;0CREN=;1 if(recek=0x00) break;/* “0”为同步字符 , 只有接收到“ 0”时才进行下面的接收 */for(k=1 ; k<8;k+)while(1)if(RCIF=1) break ;/* 等待接收数据 */recek=RCREG ;/* 读取接收数据 */ if(OERR=1) /* 如果有溢出错误 ,则处理 */CREN=;0CREN=;1 r
17、ecek=recek&0x0F ;/* 屏蔽掉高位 , 防止干扰 */CREN=;0display() ; /* 显示接收的数据 */for(i=65535 ; -i ; )continue ;for(i=65535 ;-i ; )continue ; /* 给予一定时间的延时,再进行下一轮接收 */ 8.7 单片机与PC机通信1 PC 机编程PC采用Toubr C 进行编写。程序如下:#include<stdio.h>#define port 0x3f8/* 利用串口 1 进行通信 */int ch15 ;main ()int a ;int i , j ;int b6=8
18、8,15,38,26,20,0;char c ;clrscr();outportb(port+3, 0x80) ;/* 准备设置波特率 */outportb(port, 0x0C) ;/* 波特率设置为 9600bps*/outportb(port+1, 0x00) ;outportb(port+3, 0x03) ;/*8 位数据,无奇偶检验, 1 位停止位 */outportb(port+1, 0x00) ;/* 关中断 */inportb(port+5);/* 读一次线路状态寄存器,使其复位 */for(;)printf("ttsend data or receive data: (s or r?)nnn") c=getchar() ; switch(c) case 'S': while(!(inportb(port+5)&0x20)outportb(port,0x01) ;for(i=0;i<6 ;i+)a=bi ;case 's':; /* 发送
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泰和县水利局面向社会公开招聘门卫岗考试笔试备考题库及答案解析
- 2025云南玉溪市元江县民政局招聘城镇公益性岗位人员2人考试笔试模拟试题及答案解析
- 赣州市人力资源有限公司公开招聘劳务外派工作人员笔试考试备考题库及答案解析
- 2025年十堰郧西县公开招聘社区工作者19人笔试考试备考题库及答案解析
- 2026贵州普定县“优师计划”毕业生招聘教师10人笔试考试备考题库及答案解析
- 2025广东中山市南朗街道招聘公办中小学临聘教师3人笔试考试参考题库及答案解析
- 2025中国邮政民乐公司招聘5人考试笔试备考试题及答案解析
- 2025吉林通化市梅河口市校企合作助理项目招聘136人笔试考试参考试题及答案解析
- 2026秋季北京南航地服校园招聘考试笔试备考题库及答案解析
- 2025安徽六安市图书馆运营单位外包服务人员招聘2人考试笔试备考题库及答案解析
- 车库进出口坡道施工方案
- 货架安全知识培训资料课件
- 文化创意产业园区工业厂房租赁与设计服务协议
- 制造业2025年质量审核指标评估方案
- (2025秋新修订)人教版二年级数学上册全册教案(教学设计)
- 2025年北京客运考试应用能力试题及答案详解大全
- 《无人机飞行控制技术》全套教学课件
- 适岗评价管理办法
- 二年级上册数学应用题100道含完整答案【名师系列】
- 东台辅警招聘考试真题2025含答案
- 中国茶马古道课件
评论
0/150
提交评论