chap单片机串行通信系统解读.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
工作方式0应用 例:74LS165芯片的输入端接八个开关,利用单片机串行方式0将开关的状态串行输入单片机,并在LED上显示。 74LS165芯片资料 74LS165是8位并入串出移位寄存器。各引脚功能如下: 高电平表示移位, 低电平表示置位。 SH/LD(shift/load 移位/置位):移位与置位控制端。 在开始移位之前,需要先从并行输入端口读入数据,这时应将SH/LD置0,并行口的8位数据将被置入74LS165内部的8个触发器;在SH/LD为1时,并行输入被封锁,移位操作开始。 74LS165芯片资料 74LS165是8位并入串出移位寄存器。各引脚功能如下: INH(clock inhibit 时钟抑制):时钟禁止端。当INH为低电平时,充许时钟输入。 CLK(clock):时钟输入端 D0~D7:并行输入端 SI(serial input 串行输入):串行输入端,用于扩展多个74LS165的首尾连接端。 SO(serial output):串行输出端. QH:也是串行输出端,它与SO是反相的关系. VCC:接+5V电源端. GND:接地 编程思路: 让SH/LD引脚产生一个低电平,输入并锁存开关状态; 让SH/LD引脚产生一个高电平,以串行方式0将开关状态移位传送给单片机,通过P2口输出; C语言参考程序: #include reg51.h #define uint unsigned int #define uchar unsigned char sbit P3_2=P3^2; void delay(uint x) { uchar i; while(x--) { for(i=0;i120;i++); } } void main() { SCON=0x10; //串口方式0,允许接收数据 while(1) { P3_2=0; //并行输入数据 P3_2=1; //允许串行移位操作 while(RI==0) ; //循环等待接收完毕 RI=0; //清中断标志 P2=SBUF; //送P2口 delay(20); //延时 } } 工作方式1应用 【例】设甲乙两机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的1、2、3、4、5、6、7、8个数据存在内部RAM40H~4FH单元中,乙机接收后在数码管中显示。 设SMOD=0,PCON=0x00; T1工作在方式2,T1内启动,定时,故TMOD=0x20 T1用于波特率发生器,故禁止中断,ET1=0; TR1=1启动T1计数 寄存器初始化: T1计数初值设置: =232=E8H TL1=TH1=0xE8 串口设置 串口工作在方式1,SM1SM0=01 查询方式传送,禁止串口中断,ES=0。 甲机发送,不允许接收,REN=0;SCON=40H; 乙机接收,REN=1;SCON=50H 甲机发送程序 #include reg51.h #define uchar unsigned char uchar idata buf[8]={1,2,3,4,5,6,7,8};//定义要发送的数据 uchar i; void main() { TMOD=0x20;//设置T1工作方式2 TL1=0xe8; TH1=0xe8;//赋初值 PCON=0x00;//设置SMOD=0 SCON=0x40;//设置串口工作方式1,不允许接收 IE=0x00; TR1=1;//启动T1 for(i=0;i8;i++)//循环接收 { SBUF=buf[i]; while(TI==0); TI=0; } } #includereg51.h #define uchar unsigned char uchar i; const unsigned char LED_TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表 void delay(unsigned int x)//延时函数 { uchar j; while(x--) { for(j=0;j123;j++) { ; } } } 乙机接收程序 void display(void)//显示函数 { unsigned char k,*DATA;//定义字符变量k,指针变量DATA DATA=0x50;//地址赋初值 for(k=0;k8;k++)//循环显示8个数字 { P2=LED_TAB[*DATA];//间接寻址送显示字形到P2口 DATA++;//地址值加1 delay(300); } } vo

文档评论(0)

boss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档