17 串行接口与C51编程
第8章 串行总线接口技术与C51编程

值,并把它与存贮在DS18B20 内的CRC值进行比较,以决
定ROM 的数据是否已被主机正确地接收。计算CRC的等效 多项式函数为: CRC=X^8+X^5+X^4+1
单线总线
1. 单总线数字温度传感器DS18B20
(4) DS18B20的操作命令
DS18B20经单线接口协议进行存取操作的顺序是:
write_comd_18b20(0x4e);
write_comd_18b20(0x75); write_comd_18b20(0x18);
/*发送写高Βιβλιοθήκη 暂存器命令*//*发送写TH字节*/ /*发送写TL字节*/
write_comd_18b20(0x3f);
while(reset_pulse()); */write_comd_18b20(0xcc);
温度高于TH或低于TL中的数值,DS1820上电时报警条件被置位。
单片机C51编程规范

单片机C51编程规范1单片机C51编程规范-前言为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。
2 单片机C51编程规范-范围本标准规定了程序设计人员进行程序设计时必须遵循的规范。
本规范主要针对C51编程语言和keil编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。
3 单片机C51编程规范-总则l 格式清晰l 注释简明扼要l 命名规范易懂l 函数模块化l 程序易读易维护l 功能准确实现l 代码空间效率和时间效率高l 适度的可扩展性4 单片机C51编程规范-数据类型定义编程时统一采用下述新类型名的方式定义数据类型。
建立一个datatype.h文件,在该文件中进行如下定义:typedef bit BOOL; // 位变量//typedef unsigned char INT8U; // 无符号8位整型变量//typedef signed char INT8S; // 有符号8位整型变量//typedef unsigned int INT16U; // 无符号16位整型变量//typedef signed int INT16S; // 有符号16位整型变量//typedef unsigned long INT32U; // 无符号32位整型变量//typedef signed long INT32S; // 有符号32位整型变量//typedef float FP32; // 单精度浮点数(32位长度) //typedef double FP64; // 双精度浮点数(64位长度) //5 单片机C51编程规范-标识符命名5.1 命名基本原则l 命名要清晰明了,有明确含义,使用完整单词或约定俗成的缩写。
通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。
即"见名知意"。
l 命名风格要自始至终保持一致。
C51编写 串口通信程序

异步通信的数据格式 :
一个字符帧 空 闲 起 始 位 数据位 校 验 位 停 止 位 空 闲
下一字符 起始位
LSB
MSB
异步通信的特点:不要求收发双方时钟的 严格一致,实现容易,设备开销较小,但 每个字符要附加2~3位用于起止位,各帧 之间还有间隔,因此传输效率不高。
2、同步通信
同步通信时要建立发送方时钟对接收方时钟的直接控制, 使双方达到完全同步。此时,传输数据的位之间的距离均 为“位间隔”的整数倍,同时传送的字符间不留间隙,即 保持位同步关系,也保持字符同步关系。发送方对接收方 的同步可以通过两种方法实现。
串行通信是将数据字节分成一位一位的形 式在一条传输线上逐个地传送。
接 收 设 备
D0 D7
8位顺次传送
发 送 设 备
串行通信的特点:传输线少,长距离传送时 成本低,且可以利用电话网等现成的设备, 但数据的传送控制比并行通信复杂。
7.1.1 串行通信的基本概念
一、异步通信与同步通信
1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟 控制数据的发送和接收过程。为使双方的收发协调,要求 发送和接收设备的时钟尽可能一致。
面向位的同步格式 :
8位 01111110 8位 地址场 8位 控制场 ≥0位 信息场 16位 校验场 8位 01111110
此时,将数据块看作数据流,并用序列01111110作为开始 和结束标志。为了避免在数据流中出现序列01111110时引起 的混乱,发送方总是在其发送的数据流中每出现5个连续的1 就插入一个附加的0;接收方则每检测到5个连续的1并且其后 有一个0时,就删除该0。 典型的面向位的同步协议如ISO的高级数据链路控制规程 HDLC和IBM的同步数据链路控制规程SDLC。 同步通信的特点是以特定的位组合“01111110”作为帧的 开始和结束标志,所传输的一帧数据可以是任意位。所以传 输的效率较高,但实现的硬件设备比异步通信复杂。
常用串行总线数据操作的C51编程

总 线 。传 统 的 平 行 总 线 因 为 采 用 平 行 的 结 构 , 所 以 !" 之 间接线较多, 且需要译码电路, 显 得 非 常 复 杂 。而 具 备 ! #" 总线功 能 的 组 件 , 其地 址 已 经 内 置 在 组 件 中 , 只 需 要 且可靠性和安全性会 更 好 , $67 、 $"8 # 条线就能传送数据, 每 个 具 有 ! #" 总线的 !" 均 可 以 视 为 独 立 的 模 块 。
6789 :A8<MQR<M=>?@;A 9;<C >?@;A AM;9QR<M=6789C
3 3 写字节 3 3 读字节
!
小
结
’&2 程 序 如 下 :
3 ! 012-+.) 晶 振 4#%5 ! 3 6789 :;8<=>?@;A ?7>B<C D >?@;< E ; F7A=EG) ; EH?7>B< ; EIIC ; J 6789 8B8<=6789C D 0KG2 ; 0KG) ; L;8<=&)C ; 0KG2 ; L;8<=.C ; L;8<=,)C ; J 6789 :A8<M)=6789C D 0KG2 ; 0KG) ; L;8<=4C ; 0KG2 ; L;8<=2C ; J $ 2 . 3 3 写 ) 信号 3 3 初始化 3 3 延时子程序
!"& ’()*+, 总 线 接 口 芯 片 编 程
单片机C51语言及程序设计

贰
壹
叁
C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。 用一条预处理命令#include <REG51.H>把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。
应用举例:
片内数据存储器,片外数据存储器和程序存储器。
通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。
关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSI C标准一共规定了32个关键字,见表
变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。
【存储类别】 数据类型 【存储器类型】 变量名
变量名不得使用标准C语言和C51语言的关键字。
unsigned char data system_status = 0;
//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。
sfr或sfr16型 51MCU中有21个SFR,如何定义与这些单元相关的变量?
例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87H sfr16 DPTR=0x82; //定义DPTR的低端地址82H
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句
串行通信接口的C51编程实验报告.doc

int i;
for(i=500;i>0;i--); } void display() {
SegPort=0xff; SegPort=~tab[displaybuf[0]]; bit0=0;bit1=1; delay(); SegPort=0xff; SegPort=~tab[displaybuf[1]]; bit0=1;bit1=0; delay(); SegPort=0xff; }
实 验 #include<reg51.h> 原 始 #define uchar unsigned char 数据 #define uint unsigned int
#define SegPort P0 sbit bit0=P2^0; sbit bit1=P2^1; uchar code tab[16]=
Key(); if(Commflag) {
Commflag=0; DataChange(ReceiveData); } display(); }
}
实验 数据 整理 与分 析
实 验 1.左数码管显示且纪录右按键按动次数 结论 2.右数码管显示且纪录左按键按动次数
佛山职业技术学院
电子信息工程技术专业
《 串行通信接口的 C51 编程实验
》课程实验报告
班别
姓
学号 01 实验室 5—209
日期 2011.3.22 名
组号
同组人员
实验
串行通信接口的 C51 编程实验
成绩评定
名称
教师签名
主 要 计算机
仪器
设备
实验 目的
1、 掌握单片机的串行通信接口软件编程方法 2、 掌握单片机的串行通信接口调试技术。
c51程序课程设计

c51程序课程设计一、课程目标知识目标:1. 掌握C51编程语言的基本语法和结构;2. 理解并掌握C51的寄存器、内存管理及位操作等特性;3. 学会使用C51编写简单的嵌入式程序,实现基础功能;4. 了解C51程序与硬件之间的交互及接口技术。
技能目标:1. 能够运用C51编程语言设计简单的嵌入式系统程序;2. 培养学生分析问题、解决问题的能力,能够针对实际问题进行程序设计和调试;3. 学会使用C51的开发工具和调试方法,提高实际操作能力。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,激发创新意识;2. 培养学生严谨、细致的编程习惯,增强团队协作意识;3. 引导学生认识到编程对于国家科技发展的重要性,树立社会责任感。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合。
课程目标旨在使学生掌握C51程序设计的基本知识和技能,培养学生解决实际问题的能力,同时提高学生的情感态度价值观,为我国嵌入式领域培养优秀人才。
通过对课程目标的分解,教师可进行针对性的教学设计和评估,确保学生达到预期学习成果。
二、教学内容1. C51编程语言基础:- 数据类型、变量、常量- 运算符、表达式和语句- 控制结构(顺序、选择、循环)- 函数的定义和调用2. C51特殊功能及寄存器:- SFR寄存器及其操作- 位操作及位带操作- 中断处理与定时器3. C51内存管理:- 内部RAM和外部RAM的使用- 程序存储器操作- 数据存储器操作4. C51程序设计与实践:- 简单I/O口编程- 系统时钟与串行通信- ADC和DAC编程- 综合项目设计实例5. 课程实践与调试:- 使用开发工具(如Keil uVision)- 程序编译、下载和调试- 常见错误分析和解决方法教学内容按照教学大纲安排,结合教材相关章节,循序渐进地展开。
确保学生在掌握基础知识的同时,能够逐步深入到实际应用。
通过理论与实践相结合的教学内容,使学生在完成本课程学习后,具备基本的C51程序设计能力。
第6章串行口的C51编程

6.1.2
串行口控制寄存器
• 串行控制寄存器SCON • 电源控制寄存器PCON
• 1、串行控制寄存器SCON(P170)
SM0、SM1:
•
串行口工作方式选择位,这两位的 组合决定了串行口的4种工作方式。
• SM2是多机通信控制位: • REN是允许接收位: • 当REN = 1时,允许接收数据;当REN = 0时,禁止接收数据 。 • 该位由软件置位或复位。 • TB8是发送数据的第9位。 • RB8是接收数据的第9位。 • TI是发送中断标志位。 • RI 是接收中断标志位。
6.3.2
编程步骤:
• (1)定好波特率 (2)填写控制字 • (3)串行通信可采用两种方式,即查询方式 和中断方式 • ① 先发后查 ② 先查后收 • ③ 中断方式发送数据:发送一个数据、等 待中断,在中断中再发送下一个数据。 • ④ 中断方式接收数据:等待中断、在中断 中接收一个数据。
【例6-9】波特率计算及初始化编程
• 实验2 串行口控制的8段LED显示器
• ④ 当RI=0,并且接收到的停止位为1,或者 SM2=0的时候,8位数据送人接收缓冲器SBUF 中,停止位送人RB8中,同时置RI=1;否则, 8位数据不装人SBUF,放弃当前接收到的数据。 • ⑤ 此时可以采用查询或者中断两种方式来获 知RI是否置位。当数据送人接收缓冲器之后, 便可以执行读SBUF语句来读取数据,示例如 下。ch=SBUF; • ⑥ 最后,软件中清标志位RI,以便于接收下 一次串行数据。
串口方式1初始化及波特率初始化的程序 示例如下: • • • • • • TMOD=0X20; TH1=0XF4; TL1=0XF4; TR1=1; PCON=0X00; SCON=0X50;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17.3.3 串行口控制寄存器SCON SCON用来控制串行口的工作方式和状态,可以位寻址,字 节地址为98H。 其格式如图17.9所示。
SCON 9FH 9EH 9DH
图17.9
9CH
9BH
9AH 99H
RB8 TI
98H
RI
SCON的各位定义
SM0 SM1 SM2 REN TB8
SM0、SM1:串行工作方式选择位。定义如下表17.1所示
7
17.1.2 串行通信的制式
在串行通信中数据是在两个站之间进行传送的,按照数据 传送方向,串行通信可分为单工(simplex)、半双工(half duplex)和全双工(full duplex)三种制式。图17.4为三种 制式的示意图。 单工:只允许单方向传送,只需一条数据线。 半双工 :接收和发送分时双向进行,只需一条数据线(如对讲 机)。 全双工 :甲、乙两机之间数据的发送和接收可以同时进行,通 信必须使用二根数据线(如固定电话) 。
10
17.2.1 RS-232C接口 RS-232C是使用最早、应用最多的一种异步串行通信总线 标准。它是美国电子工业协会(EIA)1962年公布、1969年最 后修订而成的。其中RS表示Recommended Standard,232是该 标准的标识号,C表示最后一次修订。 RS-232C主要用来定义计算机系统的一些数据终端设备 (DTE)和数据电路终接设备(DCE)之间的电气性能。例如 CRT、打印机与CPU的通信大都采用RS-232C接口,MCS-51单片 机与PC机的通信也是采用该种类型的接口。由于MCS-51系列单 片机本身有一个全双工的串行接口,因此该系列单片机用RS232C串行接口总线非常方便。 RS-232C串行接口总线适用于:设备之间的通信距离不大于 15米,传输速率最大为20kB/s。
SM0 SM1 工作方式
功
能
波特率
0
0 1
0
1 0
方式0
方式1 方式2
8位同步移位寄存器
10位UART 11位UART
fosc/12
可变 fosc/64或fosc/32
1
1
方式3
11位UART
可变
20
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM2:多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收时,若SM2=1, 且接收到的第9位数据RB8为0时,不激活RI;若SM2=1,且RB8=1时,则置RI=1。 在方式2、3处于接收或发送方式,若SM2=0,不论接收到第9位RB8为0还是为1, TI,RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有收到有效的停止 位后,RI置1。在方式0中,SM2应为0。 REN:允许串行接收位。由软件置位或清零。REN=1时,允许接收,REN=0时,禁止接 收。 TB8:发送数据的第9位。在方式2和方式3中,由软件置位或复位,可做奇偶校验位。 在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时TB8为1,数 据帧时TB8为0。 RB8:接收数据的第9位。功能同TB8。 TI:发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其他方式中, 在发送停止位之初由硬件置位。因此TI是发送完一帧数据的标志,可以用指令来查询 是否发送结束。TI=1时,也可向CPU申请中断,响应中断后都必须由软件清除TI。 RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其他方式中, 在接收停止位的中间由硬件置位。同TI一样,也可以通过指令来查询是否接收完一帧 数据。RI=1时,也可申请中断,响应中断后都必须由软件清除RI。 SCON中的低2位与中断有关,在中断的有关章节中有论述。
4
17.1.1.3 80C51的帧格式 80C51串行口通过编程可设置4种工作方式,三种帧格式。 方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。 方式1以10位为一帧传输,设有一个起始位“0”,8个数据位和一个停 止位“1”。 方式2和3以11位为一帧传输,设有1个起始位“0”,8个数据位,1个可 编程位(第九数据位)D8和1个停止位“1”。 17.1.1.4 波特率(baud rate) 异步通信的另一个重要指标为波特率。 波特率为每秒钟传送二进制数码的位数,也叫比特数,单位为bit/s, 即位/秒。波特率用于表征数据传输的速度,波特率越高,数据传输速度越 快。但波特率和字符的实际传输速率不同,字符的实际传输速率是每秒内 所传字符帧的帧数,和字符帧格式有关。 异步通信的优点: 通常,异步通信的波特率为50~9600bit/s。 异步通信的优点是不需要传送同步时钟,字符帧长度不受限制,故设备简 单。缺点是字符帧中因包含起始位和停止位而降低了有效数据的传输速率。
17
17.3.1 MCS-51单片机的串行口结构 MCS-51单片机内部有两个独立的接收、发送缓冲器SBUF, SBUF 属于特殊功能寄存器。发送缓冲器只能写入不能读 出,接收缓冲器只能读出不能写入,二者共用一个字节地址 (99H)。串行口的结构如图17.8所示。
18
特殊功能寄存器
与MCS-51串行口有关的特殊功能寄存器有SBUF,SCON, PCON,下面对它们分别详细介绍。 17.3.2 串行口数据缓冲器SBUF SBUF是两个在物理上独立的接收、发送寄存器,一个用 于存放接收到的数据,另一个用于存放欲发送的数据,可同时 发送和接收数据。两个缓冲器共用一个地址99H,通过对 SBUF的读、写指令来区别是对接收缓冲器还是发送缓冲器进 行操作。CPU在写SBUF时,就是修改发送缓冲器;读SBUF, 就是读接收缓冲器的内容。 接收或发送数据,是通过串行口对外的两条独立收发信号 线RXD(P3.0)、TXD(P3.1)来实现的,因此可以同时发送、 接收数据,为全双工制式。
13
17.2.4 RS-232C总线规定 RS-232C标准总线为25根,采用标准的D型25芯插头座。各 引脚的排列如图17.7所示。 此外,与RS-232C相匹配的连接器还有DB-15和DB-9,其引 脚的定义也各不相同。
14
在RS-232的通讯标准中是以一个25针的接口来定义的,并 在早期的计算机如PC或XT机型上广泛使用,但在AT机以后的机 型上,实际均采用了9针的简化版本应用,现在所说的232通讯 均默认为9针的接口。图一显示了9针通讯的接口管脚名称,以 下是各管脚的说明: 1 载波检测(CD) 2 接受数据(RXD) 3 发出数据(TXD) 4 数据终端准备好(DTR) 5 信号地线(SG) 6 数据准备好(DSR) 7 请求发送(RTS) 8 清除发送(CTS) 15 9 振铃指示(RI)
第17章 串行通信及实验
17.1 串行通信基础 计算机与外部的信息交换称为“通信”。 在单片机系统中,CPU和外部通信有两种通信方式:并行 通信和串行通信。并行通信,即数据的各位同时传送,如图 17.1(a)所示;串行通信,即数据一位一位顺序传送,如图 17.1(b)所示。
1
串行通信的优点与缺点
两种基本通信方式比较起来,串行通信方式能够节省传输 线,特别是数据位数很多和远距离数据传送时,这一优点更为 突出;串行通信方式的主要缺点是传送速度比并行通信要慢。 17.1.1 串行通信的分类 按照串行数据的时钟控制方式,串行通信可分为同步通信 和异步通信两类。 在异步通信中,接收端是依靠字符帧格式来判断发送端是 何时开始发送,何时结束发送的。字符帧格式是异步通信的一 个重要指标。
实际应用中,电子工程师在设计计算机与外围设备的通信 时,通常在9针的基础再进行简化,只用其中的2、3、5三个管 脚进行通信。这三个管脚分别是接收线、发送线和地线,在一 般情况下即可满足通讯的要求,计算机和外部通讯的接线方法 如图:
值得注意的是,图中2、3两脚是交叉互联的,这很容易理 解,因为一个设备的发送线必须联接到另外一台设备的接收线 上,反之亦然。
2
17.1.1.1 异步通信
异步通信(Asynchronous Communication) 在异步通信中,数据通常是以字符为单位组成字符帧传送 的。字符帧由发送端一帧一帧地发送,每一帧数据是低位在 前,高位在后,通过传输线被接收端一帧一帧地接收。发送端 和接收端由各自独立的时钟来控制数据的发送和接收,这两个 时钟彼此独立,互不同步。 17.1.1.2 字符帧(Character Frame) 字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停 止位等四部分组成,如图17.2所示。
9
17.2 串行通信总线标准及其接口
在单片机应用系统中,数据通信主要采用异步串行通信。 在设计通信接口时,必须根据需要选择标准接口,并考虑传输 介质、电平转换等问题。采用标准接口后,能够方便地把单片 机和外设、测量仪器等有机地连接起来,从而构成一个测控系 统。例如当需要单片机和PC机通信时,通常采用RS-232接口进 行电平转换。 异步串行通信接口主要有三类: RS-232接口;RS-449、 RS-422和RS-485接口以及20mA电流环。下面介绍较常用的RS232接口标准。
16
简单的全双工系统 在最简单的全双工系统中,仅用发送数据、接收数据和 信号地三根线即可,对于MCS-51单片机,利用其RXD(串行数 据接收端)线、TXD(串行数据发送端)线和一根地线,就可 以构成符合RS-232C接口标准的全双工通信口。 17.3 MCS-51单片机的串行接口 MCS-51单片机的内部有一个可编程全双工串行通信接口, 它具有UART的全部功能,该接口不仅可以同时进行数据的接收 和发送,也可做同步移位寄存器使用。该串行口有4种工作方 式,帧格式有8位、10位和11位,并能设置各种波特率。本节 将对其结构、工作方信息格式标准 RS-232C采用串行格式,如图17.5所示。该标准规定:信息 的开始为起始位,信息的结束为停止位;信息本身可以是5、6、 7、8位再加一位奇偶位。如果两个信息之间无信息,则写 “1”,表示空。