单片机_at89s52串行接口

上传人:wt****50 文档编号:49283439 上传时间:2018-07-26 格式:PPT 页数:82 大小:1.60MB
返回 下载 相关 举报
单片机_at89s52串行接口_第1页
第1页 / 共82页
单片机_at89s52串行接口_第2页
第2页 / 共82页
单片机_at89s52串行接口_第3页
第3页 / 共82页
单片机_at89s52串行接口_第4页
第4页 / 共82页
单片机_at89s52串行接口_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《单片机_at89s52串行接口》由会员分享,可在线阅读,更多相关《单片机_at89s52串行接口(82页珍藏版)》请在金锄头文库上搜索。

1、第9章 串行通信口 第一节 概述 第二节 模式0及其应用 第三节 模式1及其应用 第四节 模式2、3及其应用1MCU中常用的几种串行接口标准串行接口:数据一位接一位顺序传送,可只用一 根数据线传送多位信息。 UART:通用异步接收器/发送器 I2C:二线,芯片有地址,有总线争用机制2典型的I2C总线系统3用口线模拟串行总线4#include /要用到sfr #define uchar unsigned char sbit NCS=P10; sbit SCK=P11; sbit SI =P12; void shiftbyte(uchar byte); main() uchar data *p=0

2、x30;NCS=0;shiftbyte(0xa);/由图中读出第一字节为0xa0shiftbyte(0x23);/低8位地址shiftbyte(*p);NCS=1;while(1); 5void shiftbyte(uchar byte)/将1字节数据由并变串由口线移出 uchar i;for(i=0; i sbit STB=P10; void out16 (unsigned int dat16) STB=0; /* 4094进入串行移位状态 */SBUF=dat16 while( !TI ); TI=0; /*先送低8位, 等移完 */SBUF=dat168; while( !TI ); T

3、I=0; /*再送高8位, 等移完 */STB=1;/* 同时并行输出 */ main() SCON=0x0; /* 串口模式: 移位寄存器方式 */ out16(0x1234);/* 由扩展口送出0x1234 */while(1); /* main循环结束 */编程实现25例2 扩展1个16位并行输入口,把由扩展口读入的16位数 存入一个整型变量中。26#include sbit P_S=P10; unsigned int in16 (void) ; /*声明函数 */ main() unsigned int dat16;SCON=0x0; REN=1; /* 串口模式, 允许接收 */ d

4、at16=in16();/* 由扩展口读入的数存入变量中*/while(1); /* main循环结束 */编程实现27unsigned int in16 (void) unsigned int tmp;P_S=1; P_S=0;/* 4014并行输入后立即进入串行移位状态 */while( !RI ); RI=0; /*查询等高8位移完*/tmp=SBUF; tmp sbit parity=ACC7;/* 定义ACC.7 作奇校验位 */ unsigned char tx_string14=“Hello World!n” ;/*定义待发送字符串,也可以加 code存储类型,如:unsigne

5、d char code tx_string14=“Hello World!n” */ 编程实现50main() unsigned char i;/* 定义1个循环变量 */* 首先定义T1模式2 作波特率发生器,波特率为1200并启动运行 */TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; SCON=0x40; /* 串口模式1, 未允许接收 */ for (i =0; i sbit RED_LED=P11;/* 红灯 */ sbit GREEN_LED=P10;/* 绿灯 */ unsigned char rx_string14; /* 接收缓冲区 */ bit

6、receive_string(void); /* 声明接收14字节字符串函数 */ flash_RED_LED_3();/* 声明红灯闪烁3次函数 */ flash_GREEN_LED_3();/* 声明绿灯闪烁3次函数 */编程实现54main() /* 首先定义T1模式2 作波特率发生器,波特率为1200并启动运行 */TMOD=0x21; TH1=0xE8; TL1=0xE8; TR1=1; SCON=0x50; /* 串口模式1, 允许接收 */ for(;)if(receive_string() /函数返回bit GREEN_LED=1; /有错绿灯灭flash_RED_LED_3(

7、); /红灯闪烁3次RED_LED=0; /以后一直亮else RED_LED=1; flash_GREEN_LED_3(); GREEN_LED=0;/ end of for(;)/end of main编程实现55bit receive_string(void) bit error_bit=0;/ 1: 有错, 0: 没错unsigned char i;for (i=0; i main() unsigned char data *p, i;TMOD=0x20; TH1=0xFD; TL1=0xFD; PCON=0x80; TR1=1; / T1模式2 作波特率发生器,SMOD=1, 波特率

8、为19200并启动运行SCON=0x50; /* 串口模式1, 允许接收 */ for (; ;) while( !RI ); RI=0; if (SBUF != 0x55) continue;p=0x30;for (i=0; imain() unsigned char data *p, i;TMOD=0x20; TH1=0xFD; TL1=0xFD; PCON=0x80; TR1=1; / T1模式2 作波特率发生器,SMOD=1, 波特率为19200并启动运行SCON=0x50; /* 串口模式1, 允许接收 */ ES=1; EA=1; /* 允许串口中断 */for (; ;);/*

9、循环结束,等中断 */编程实现(中断进入、查询收发)62void serial(void) interrupt 4 unsigned char data *p, i;if (TI)TI=0; return;/一般要判断是TI或RI为1,此时多余RI=0; if (SBUF != 0x55) return; /不是55H返回p=0x30;for (i=0; i void send16(void) unsigned char data *p, i; /* 定义指针及循环变量 */p=0x50;/* 指向内部RAM 50H单元 */for (i =0; i unsigned char rx_stri

10、ng16; /* 接收缓冲区 */ bit receive_string(void); /* 声明接收16字节字节函数 */编程实现75#include unsigned char rx_string16; /* 接收缓冲区 */ bit receive_string(void); /* 声明接收16字节字节函数 */ main() SCON=0x90; /* 串口模式2, 允许接收 */PCON=0x80;/* BR=Fosc/32 */ for(;)if(receive16() error();/返回1,错,函数省略else right(); /返回0,对,函数省略 编程实现76bit r

11、eceive16(void) bit error_bit=0;/ 1: 有错, 0: 没错unsigned char i;for (i=0; i unsigned char xdata *px=0x2000; /* 定义指针指向2000H */ unsigned int err_cnt=0, ok_cnt=0; /*定义2个变量,初值为0,记录 正确接收的字节数和出错次数 */ main() SCON=0xD0; /* 串口模式3, 允许接收 */ TMOD=0x20; TH1=0xF4; TL1=0xF4; TR1=1; / 波特率为2400 ES=1; EA=1;/* 允许串口中断 */w

12、hile(1); /* 等待中断 */ /end of main 编程实现80编程实现(续)void receive(void) interrupt 4/中断服务程序 RI=0;ACC=SBUF;if (P) if (RB8) err_cnt+; return;/P=1, RB8=1 奇校验错else if (!RB8) err_cnt+; return; /P=0, RB8=0 奇校验错 *px+=ACC;/正确存起来ok_cnt+;/字节数加1 81作业P202203: 3、6、91、设串口每次收到上位机发来的16字节数据后,存入一个接收缓冲区,然后将内部 RAM中40H开始的16字节数据由串口发送出去,用串口模式1,波特率为9600,无校验,已知Fosc=11.0592MHz。82

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 机械理论及资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号