单片机原理及应用基于Proteus和KeilC

上传人:1666****666 文档编号:37348684 上传时间:2021-11-02 格式:DOC 页数:32 大小:743.50KB
返回 下载 相关 举报
单片机原理及应用基于Proteus和KeilC_第1页
第1页 / 共32页
单片机原理及应用基于Proteus和KeilC_第2页
第2页 / 共32页
单片机原理及应用基于Proteus和KeilC_第3页
第3页 / 共32页
点击查看更多>>
资源描述
第一章1. 什么是单片机?在一块集成电路芯片上集成了微处理器、存储器、输入接口、输出接口、定时器/计数器、中断等基本电路所构成的单片微型计算机,简称单片机(Single-Chip-Microcomputer)。单片机有较强的控制功能,主要取决于单片机在其结构上的设计,包括单片机硬件、指令系统及I/O处理功能等方面都有独到之处。虽然单片机只是一个芯片,但无论从组成还是从其逻辑功能上来看,都具有微机系统的含义。2单片机应用灵活性体现在哪些方面?单片机以其自身的特点,其应用领域已渗透入各个领域。单片机的主要特点是体积小、功耗低、价格低廉、使用方便,控制功能强、便于进行位运算且具有逻辑判断、定时计数等多种功能。单片机应用系统设计灵活,在系统硬件不变的情况下,可通过不同的程序可实现不同的功能,因此这从根本改变了传统控制系统的设计思想和设计方法。过去必须由模拟电路、数字电路及继电器控制电路实现的大部分功能,现在已能用单片机并通过软件方法实现。由于软件技术的飞速发展,各种软件系列产品的大量涌现,可以极大地简化硬件电路。“软件就是仪器”已成为单片机应用技术发展的主要特点。3简述单片机的发展历程。1976年,Inter公司推出了MCS-48系列8位单片机到目前为止,世界各地厂商已相继研制出大约50个系列300多个品种的单片机产品。代表产品有Intel公司的MCS-51系列(以下简称51系列)机(8位机)目前,市场上的主流产品是51系列兼容机:由STC公司推出的高性价比的STC89系列单片机和Atmel公司生产的AT89系列单片机。随着集成电路的发展,随之出现内核为32位的ARM处理器,在单片机家族的众多成员中,51系列单片机以其优越的性能、成熟的技术及高可靠性和高性能价格比,迅速占领了工业测控和自动化工程应用的主要市场,在8位单片机的基础上,又推出超8位单片机,其功能进一步加强,同时16位单片机也相继产生,代表产品有Intel公司的MCS-96系列以及ATMEL推出的AVR单片机。4计算机能够识别的数值是什么?为什么要引进十六进制数?在计算机中,由于所采用的电子逻辑器件仅能存储和识别两种状态的特点,计算机内部一切信息存储、处理和传送均采用二进制数的形式。可以说,二进制数是计算机硬件能直接识别并进行处理的惟一形式。十六进制数可以简化表示二进制数。5. 数值转换。(1)37=( 100101 )B=( 25 )H (2) 12.875=( 1100.111 )B=( 0CE )H(3) 10110011B=( 0B3 )H=( 179 )10(4) 10111.101B=(17.A )H=(23.625 )10(5) 56H=( 01010110 )B=(86 )10(6) 3DFH=( 0011 1101 1111 )B=(991 )10(7)1A.FH=(1 1010.1111 )B=( 26.9375 )10(8) 3C4DH=(11 1100 0100 1101 )B=( )106. 对于二进制数10001001B,若理解为无符号数,则该数对应十进制数为多少?若理解为有符号数,则该数对应十进制数为多少?若理解为BCD数,则该数对应十进制数为多少?137 -119 897. 列出下列数据的反码、原码和补码。(1) +123 (2) -127 (3) +45 (4) -278(1)01111011 01111011 01111011(2)10000000 11111111 10000001(3)101101 101101 101101(4)1111111011101001 1000000100010110 11111110111010108. 简述单片机的仿真过程和开发过程。可以使用protues仿真软件首先建立电路原理图,然后调入由keil编译连接的.hex 文件(参考本章项目实例);开发过程:(参考第8章)第2章1. 51单片机包括哪些主要逻辑功能部件?各功能部件的主要作用是什么?简单说明不同型号的差别。8051单片机内部由CPU、4KB的ROM、128B的RAM、4个8位的I/O并行端口、一个串行口、两个16位定时/计数器及中断系统等组成。2. 程序状态字寄存器PSW各位的定义是什么?PSW是一个8位寄存器,用于寄存当前指令执行后的某些状态,即反映指令执行结果的一些特征信息。Cy(PSW.7):即PSW的D7位,进位/借位标志。AC(PSW.6):即PSW的D6位,辅助进位标志。F0(PSW.5)及F1(PSE.1):即PSW的D5位、D1位,用户标志位。RS1及RS0(PSW.4及PSW.3):即PSW的D4位、D3位,寄存器组选择控制位。OV(PSW.2):即PSW的D2位,溢出标志。3. 51存储器结构的主要特点是什么?程序存储器和数据存储器各有何不同?MCS-51单片机的存储器结构与一般微机存储器的配置方法不同,一般微机把程序和数据共存同一存储空间,各存储单元对应惟一的地址。而MCS-51的存储器把程序和数据的存储空间严格区分开。数据存储器用于存放程序运算的中间结果、状态标志位等。程序存储器用于存放已编制好的程序及程序中用到的常数。4. 51单片机内部RAM可分为几个区?各区的主要作用是什么?内部数据存储器分为高、低128B两大部分。低128B为RAM区,地址空间为00H7FH,可分为:寄存器区、位寻址区、堆栈及数据存储区。存放程序运算的中间结果、状态标志位等。高128B为特殊功能寄存器(SFR)区,地址空间为80HFFH,其中仅有21个字节单元是有定义的。5. 51单片机的P0P3四个I/O端口在结构上有何异同?使用时应注意哪些事项?P0口是一个8位漏极开路型双向I/O端口。P1口是一个内部带上拉电阻的8位准双向I/O端口。P2口也是一个内部带上拉电阻的8位准双向I/O端口P3口是一个内部带上拉电阻的8位多功能双向I/O端口。在使用时应注意以下方面: P0P3都是准双向I/O口,即CPU在读取数据时,必须先向相应端口的锁存器写入“1”。各端口名称与锁存器名称在编程时相同,均可用P0P3表示。当系统复位时,P0P3端口锁存器全为“1”,故可直接对其进行读取数据。 P0口每一输出位可驱动8个LS型TTL负载,P0口可作通用输入、输出端口使用,此时,若要驱动NMOS或其他拉电流负载时,需外接上拉电阻,才能使该位高电平输出有效。在单片机进行外部存储器扩展时,P0口必须作为地址/数据复用线使用,此时,不必外接上拉电阻,P0也不能作通用I/O口使用。 P1、P2、P3口输出均接有内部上拉电阻,输入端无需外接上拉电阻,每一位输出可以驱动4个LS型TTL电路。 P0、P2口除可以作通用I/O端口、以实现与外部进行数据交换外,更主要的是,当CPU访问外部存储器时,CPU将自动地把外部存储器的地址线信号(16位)送P0、P2口,作为地址总线(P0口输出低8位地址,P2口输出高8位地址),向外部存储器输出16位存储单元地址。在控制信号作用下,该地址低8位被锁存后,P0口自动切换为数据总线,这时经P0口可向外部存储器进行读、写数据操作。此时,P2口不再作通用I/O端口,P0口为地址/数据复用口。6. 指出8051可进行位寻址的存储空间。007FH(即20H.02FH.7)及SFR地址能被8整除的寄存器中的各位。7. 在访问外部ROM或RAM时,P0和P2口各用来传送什么信号?P0口为什么要采用片外地址锁存器?P0口传送地址低八位后可复用数据线,所以,P0口要采用片外地址锁存器。P2口传送地址高八位。8. 什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz时,一个机器周期为多少微秒?时钟周期:也称振荡周期,即振荡器的振荡频率fosc的倒数,是时序中最小的时间单位。机器周期:执行一条指令的过程可分为若干个阶段,每一阶段完成一规定的操作,完成一个规定操作所需要的时间称为一个机器周期,一个机器周期包含12个时钟周期。当振荡频率为12MHz时,一个机器周期为12/(121000000)秒=1微秒指令周期:定义为执行一条指令所用的时间。9. 51单片机有几种复位方法?复位后,CPU从程序存储器的哪一个单元开始执行程序?MCS-51的复位电路包括上电复位电路和按键(外部)复位电路 0000H10. 8051单片机引脚ALE的作用是什么?当8051不外接RAM和ROM时,ALE上输出的脉冲频率是多少?其作用是什么? 地址锁存使能输出ALE:当单片机访问外部存储器时,外部存储器的16位地址信号由P0口输出低8位,P2口输出高8位,ALE可用作低8位地址锁存控制信号;当不用作外部存储器地址锁存控制信号时,该引脚仍以时钟振荡频率的1/6固定地输出正脉冲,可以驱动8个LS型TTL负载。 第3章1. MCS-51汇编指令格式是什么,如何通过汇编指令格式来判断指令字节数?MCS-51指令系统中的每一条指令都有两级指令格式:l CPU可直接识别并执行的机器语言指令。l 汇编语言指令(简称汇编指令)。MCS-51汇编语言指令格式由以下几个部分组成:标号: 操作码 目的操作数 ,源操作数 ; 注释其中, 中的项表示为可选项。指令寻址方式是判断指令字节数的依据之一。2. 有哪几种寻址方式?其特征对象分别是什么?做表说明。MCS-51指令系统的寻址方式有以下7种:立即寻址方式:操作数直接出现在指令中。直接寻址方式中:操作数的单元地址直接出现在指令中。寄存器寻址方式中:寄存器中的内容就是操作数。寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储单元的内容才是操作数。变址寻址方式是以程序指针PC或数据指针DPTR为基址寄存器,以累加器A作为变址寄存器,两者内容相加(即基地址+偏移量)形成16位的操作数地址,相对寻址是以程序计数器PC的当前值作为基地址,与指令中的第二字节给出的相对偏移量rel进行相加,所得和为程序的转移地址。位地址:内部RAM地址空间的可进行位寻址的128位和SFR地址空间的可位寻址的11个8位寄存器的88位。位寻址给出的是直接地址。3. 位寻址和字节寻址如何区分?在使用时有何不同?由寻址方式可以看出,不同的寻址方式所寻址的存储空间是不同的。正确地使用寻址方式不仅取决于寻址方式的形式,而且取决于寻址方式所对应的存储空间。字节寻址必须是对8位存储单元,位寻址的存储空间只能是片内RAM的20H2FH字节地址中的所有位(位地址为00H7FH)和部分SFR的位,决不能是该范围之外的任何单元的任何位。4. 要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?举例说明。访问专用寄存器:可采用直接寻址或寄存器寻址。访问片外数据寄存器:寄存器间接寻址5. 什么是堆栈?其主要作用是什么?如何使用?堆栈是后进先出的数据存储区一般用于中断处理过程中,若需要保护现场数据(如内部RAM单元的内容),可使用入栈指令,将数据压入堆栈,中断处理过程执行完后,再使用出栈指令恢复现场数据。6. 编程将片外数据存储器2000H20FFH单元内容清零。MOV DPTR,#2000HMOV A,#0MOV R3,#100HLOP :MOV DPTR,AINC DPTRDJNZ R3,LOP7. 已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行完后的A中的内容。ORL A, #17HANL 17H, AXRL A, R0CPL A(A)=11001011B=0CBH8. 已知单片机的fosc=6MHz,分别设计延时0.1s、1s、1min的子程序。这里取单片机常用的晶振频率为12MHz,一个机器周期为1s。(若fosc=6MHz,读者可参考下列程序修改)延时1ms的子程序:执行时间(机器周期)DELAY:MOV R7, #0FFH 1 LOOP:NOP 1NOP 1DJNZ R7, LOOP 2RET 2该程序段的总的执行时间为:(1+4255+2)ms=1023s1ms延时时间为100ms的子程序:DELAY:MOV R5,#64H 对延时1ms的子程序循环100次。LOP1:MOV R7, #0FFH LOOP:NOP NOP DJNZ R7, LOOPDJNZ R5,LOP1 RET 延时时间为1s的子程序:DELAY1: MOV R3, #0AH 对延时100ms的子程序循环10次DELAY:MOV R5,#64H 。LOP1:MOV R7, #0FFH LOOP:NOP NOP DJNZ R7, LOOPDJNZ R5,LOP1 DJNZ R3, DELAYRET延时时间为60s的子程序: 对延时1s的子程序循环60次9. MCS-51汇编语言中有哪些常用的伪指令?各起什么作用?BIT(地址符号命令)END(结束汇编)EQU(等值) DB(定义字节)DW(定义字)DS(定义存储单元)ORG(汇编起始地址)10. 比较下列各题中的两条指令是否相同,若不同,请指出其区别? MOV A, R1; MOV ACC, R1 指令功能相同,寻址方式表示不同 MOV A, P0; MOV A, 80H 指令功能相同,寻址方式表示不同 LOOP: SJMP LOOP;SJMP $ 指令功能相同 11. 下列程序段汇编后,从3000H开始各有关存储单元的内容是什么?ORG 3000HTAB1EQU 1234HTAB2EQU 5678HDB 65,13,ADW TAB1,TAB2,9ABCHORG 3000HTAB1:EQU 1234HTAB2:EQU 5678HDB65,13,abcABCDWTAB1,TAB2,9ABCH 3000H: 65 3001H: 13 3002H: A 3003H: 34H 3004H: 12H 3005H: 78H 3006H: 56H 3007H: BCH 3008H: 9AH12. 为了提高汇编语言程序的可读性和编译效率,在编写时应注意哪些问题?(1) 把要解决的问题化成一个个具有一定独立性的功能模块,各模块尽量采用子程序完成其功能。(2) 力求少用无条件转移指令,尽量采用循环结构。(3) 对主要的程序段要下功夫精心设计,这样会收到事半功倍的效果。(4) 能用8位数据解决问题的就不要使用16位数据。(5) 累加器是信息传递的枢纽,在调用子程序时应通过累加器传送子程序的参数,通过累加器向主程序传送返回参数。所以,在子程序中一般不把累加器推入堆栈。若需保护累加器的内容时,应先把累加器的内容存入其他寄存器单元,然后再调用子程序。(6)为了保证程序运行的安全可靠,应考虑使用软件抗干扰技术,如数字滤波技术、指令冗余技术、软件陷井技术,用汇编语言程序实现这些技术,不需要增加硬件成本,可靠性高,稳定性好,方便灵活。13. 有一输入设备,其端口地址为20H,要求在1秒钟时间内连续采样10次读取该端口数据,求其算术平均值,结果存放在内部RAM区20H单元。 MOV R0,#20H MOV R2,#0 MOV A,#0 MOV R4,#0LOP : MOV R3,#0AH IN : ACALL DELAY MOVX A, R0 MOV R2 , A MOV A, R4 ADD A, R2 MOV R4, A DJNZ R3, IN MOV B,#0AH DIV AB MOV 20H,A AJMP LOP DELAY: MOV R5,#64H 延时时间为0.1s的子程序:LOP1: MOV R7, #0FFH LOOP: NOP NOP DJNZ R7, LOOPDJNZ R5,LOP1 RET END 14. 现需对外部某2个信号进行异或操作,请使用单片机完成其要求。MOV DPTR,#2000HMOVX A,DPTRMOV 20H, AINC DPTRMOVX A, DPTRXRL A,20H15. 简单说明两条查表指令使用上的区别。查表是程序设计中使用的基本方法。只要适当地组织表格,就可以十分方便地利用表格进行多种代码转换和算术运算等。MOVC A,A+PC与MOVC A, A+DPTR两条指令的区别:前者查表的范围与存放该指令的地址有关,由于PC的值已经确定及8位累加器A的限制,数据表格只能存放在该指令后面的256个字节单元之内。而后者查表范围通过改变DPTR的值可达整个程序存储器64KB的任何地址空间(即DPTR的值为表格的首地址),其数据表格可以为各个程序模块共享。将要查表的数据字作为偏移量送累加器A中,通过改变变址寄存器A的内容即可改变表格中的位置,执行该指令即可获得所需的内容(即将该位置单元的内容传送给A)。因此,可以根据需要设计表格的内容,将A的内容实现换码。第4章1. C51扩展了哪些数据类型?sbit sfr sfr16 bit2. 简述C51存储器类型关键字与8051存储空间的对应关系。程序存储器(code)内部数据存储器:data 内部RAM直接寻址128B(0x000x7F)idata 内部RAM间接寻址256B(0x000xFF)bdata 内部RAM 16B(0x200x2F)的128位进行位寻址外部数据存储器:xdata 外部存储器64KB的任何单元pdata 访问外部存储器(一页)低256B3. 在定义int a=1,b=1后,分别指出表达式b=a、b=a+和b=+a执行后变量a和b的值。b=a;b=a+; a=2 b=1b=+a; a=2 b=24. 用C51编程实现当P1.0输入为高电平时,P1.2输出控制信号灯点亮。#includesbit key1=P10;sbit led=P12;void main() bit a; for( ; ; ) key1=1; a=key1;if(a) led=1; else led=0; while(1);5. 使用选择结构编写程序,当输入的数字为“1”、“2”、“3”、“4”时,输出显示“A”、“B”、“C”、“D”,当输入数字“0”时,程序结束。#includevoid main( ) char ch; SCON=0x52; /*对串口实现初始化,以便调试时调用scanf()和printf()*/ TMOD=0x20; /*在keil c串行窗口#0中输入或显示数据*/ TH1=0Xf3; /*若不使用scanf()和printf()函数,则程序中不需要蓝色语句*/TR1=1;printf(请输入:) ; while(1) scanf(%c , &ch) ; switch(ch) case 1 : printf(A); break ; case 2 : printf(B); break ;case 3 : printf(C); break ;case 4 : printf(D); break ;case 0 : break ;default : printf(输入错误n) ; if(ch=0) break;while();6. 编一个函数sum,求数组a中各元素的数据和。要求在main函数中输入数组元素的数据,通过调用sum函数并输出返回的数据和。#includeint sum(int b , int n) int i ,s =0; for (i=0 ; in ; i+)s+=bi; return s; void main( ) int a10=10,20,30,40,50,90,80,70,60 ,0 i ,total; SCON=0x52; /*对串口实现初始化,以便调试时调用scanf()和printf()*/ TMOD=0x20; /*在keil c串行窗口#0中可以输入或显示数据*/ TH1=0Xf3; /*若不使用scanf()和printf()函数,则程序中不需要蓝色语句*/TR1=1;total= sum(a , 10) ; printf(%d ,total) ;while(1);7. 编一个函数len,求一个字符串s的长度。要求在main函数中输入字符串,通过调用len函数并输出返回的字符串长度。#include “string.h”#includeint len(char *s)int n ;n=strlen(s) ;return n;void main( ) char *ch=”china”; int a; a= len(ch ) ;while(1);8. C51中断函数如何定义,在使用时应注意哪些问题?C51中,中断服务程序是以中断函数的形式出现的。单片机中断源以对应中断号的形式出现在C51中断函数定义中中断函数定义语法格式如下:void 函数名(void) interrupt n using n 函数体关键字interrupt定义该函数为中断服务函数,n为中断号。使用时应注意:1)在中断函数中不能使用参数。2)在中断函数中不能存在返回值。3)中断函数的执行是由中断源的中断请求后系统调用的。4)中断函数的中断号在不同的单片机中其数量也不相同,具体情况察看具体的处理器手册。9. 用C51编写流水灯控制程序,要求由8051的P1口控制8个发光二极管(采用共阳极连接)依次轮流点亮,循环不止。#include #include #define uchar unsigned char#define led P1 void delay(uchar m);/声明延时函数void main() uchar s_data = 0xFE ; while(1) led = s_data;s_data = _crol_(s_data , 1); delay(200); void delay(uchar m) /延时函数(形式参数m,调用时,m=200) unsigned char a,b,c; for(c=m;c0;c-) for(b=142;b0;b-) for(a=20;a0;a-);10.用c51编写外部中断“0”的中断函数,该中断函数的功能实现从P1口读入8位数据存放在一数组中,如果数据全为0,则置P2.1输出1,否则P2.1输出0。#include sbit out P21;void main(void)IT0=1; /*设置中断触发方式为边沿出发,setb ie0*/EA=1; /* 打开全局中断,setb ea*/EX0=1; /* 打开外部中断0, setb ex0*/while(1); /*等待中断*/void external0(void) interrupt 0 /*定义外部中断0中断函数处理程序*/ int a;EX0=0; /*关闭外部中断0, clr ex0*/P1=0xff;a=P1;if(a) out=1;else out=0; EX0=1; 第5章(注:题后附有本章补充习题)1. MCS-51系列单片机能提供几个中断源、几个中断优先级?各个中断源的优先级怎样确定?在同一优先级中,各个中断源的优先顺序怎样确定?答:MCS-51系列单片机能提供5个中断源,2个中断优先级。各个中断源的优先级是由特殊功能寄存器IP来确定,IP中和各个中断源对应位为1时,此中断源为高优先级,否则为低优先级。在同一优先级中,各个中断源的优先顺序是由自然优先级来确定的。2. 简述MCS-51系列单片机的中断响应过程。答:MCS-51系列单片机的中断响应过程是按照以下顺序执行的:开中断-中断请求-中断判断-中断响应-中断返回。3. MCS-51系列单片机的外部中断有哪两种触发方式?如何设置?对外部中断源的中断请求信号有何要求?答:MCS-51系列单片机的外部中断有电平触发和边沿触发两种方式。是由特殊功能寄存器TCON中IT0,IT1的状态确定的,如:IT0为1时外部中断0为边沿触发方式,当INT0外部引脚出现下降沿时向CPU提出中断请求, 否则为电平触发方式,当INT0外部引脚出现低电平时向CPU提出中断请求。4. MCS-51单片机中断响应时间是否固定?为什么?答:MCS-51单片机中断响应时间不固定,因为当中断源向CPU提出中断请求时,CPU正在执行的指令的指令周期是不一样的。5. MCS-51单片机如果扩展6个中断源,可采用哪些方法?如何确定它们的优先级?答:一般可采取中断加查询方式,软件先查询到的为高优先级,最后查询到的为低优先级。6. 试用中断技术设计一发光二极管LED闪烁电路,闪烁周期为2s,要求亮1s再暗1s。提示:在外部中断0的控制下,使用定时器实现延时。7. 当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?答:当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,当新中断源中断级别比正在执行中断源的中断级别高时可响应新的中断请求,否则不能响应新的中断请求。8. 异步通信和同步通信的主要区别是什么?MCS-51串行口有没有同步通信功能?答案:异步通信因为每帧数据都有起始位和停止位,所以传送数据的速率受到限制。但异步通信不需要传送同步脉冲,字符帧的长度不受限制,对硬件要求较低,因而在数据传送量不很大。同步通信一次可以连续传送几个数据,每个数据不需起始位和停止位,数据之间不留间隙,因而数据传输速率高于异步通信。但同步通信要求用准确的时钟来实现发送端与接收端之间的严格同步。MCS-51串行口有同步通信功能。9. 解释下列概念:1) 并行通信、串行通信。2) 波特率。3) 单工、半双工、全双工。4) 奇偶校验。答案:(1)并行通信:数据的各位同时进行传送。其特点是传送速度快、效率高,数据有多少位,就需要有多少根传输线。当数据位数较多和传送距离较远时,就会导致通信线路成本提高, 因此它适合于短距离传输。串行通信:数据一位一位地按顺序进行传送。其特点是只需一对传输线就可实现通信,当传输的数据较多、距离较远时,它可以显著减少传输线,降低通信成本,但是串行传送的速度慢。(2)波特率:每秒钟传送的二进制数码的位数称为波特率(也称比特数),单位是bps(bit per second),即位/秒。(3)单工:只允许数据向一个方向传送,即一方只能发送,另一方只能接收。半双工:允许数据双向传送,但由于只有一根传输线,在同一时刻只能一方发送,另一方接收。全双工:允许数据同时双向传送,由于有两根传输线,在A站将数据发送到B站的同时,也允许B站将数据发送到A站。(4)奇偶校验:为保证通信质量,需要对传送的数据进行校验。对于异步通信,常用的校验方法是奇偶校验法。采用奇偶校验法,发送时在每个字符(或字节)之后附加一位校验位,这个校验位可以是“0”或“1”,以便使校验位和所发送的字符(或字节)中“1”的个数为奇数称为奇校验,或为偶数称为偶校验。接收时,检查所接收的字符(或字节)连同奇偶校验位中“1”的个数是否符合规定。若不符合,就证明传送数据受到干扰发生了变化,CPU可进行相应处理。10. MCS-51串行口控制寄存器SCON中SM2、TB8、RB8有何作用?主要在哪几种方式下使用?答案:SM2:多机通信控制位,主要在方式1、2、3下使用;TB8:存放发送数据的第9位,主要在方式2、3下使用;RB8:存放接收数据的第9位或停止位,主要在方式1、2、3下使用。11. 试分析比较MCS-51串行口在四种工作方式下发送和接收数据的基本条件和波特率的产生方法。答案:发送数据的基本条件:方式0、1、2、3:CPU执行一条将数据写入发送缓冲器SBUF的指令;接收数据的基本条件:方式0:用软件使REN=1(同时RI=0);方式1:用软件使REN=1,一帧数据接收完毕后,必须同时满足以下两个条件:RI=0;SM2=0或接收到的停止位为1,这次接收才真正有效,将8位数据送入SBUF,停止位送RB8,置位RI。否则,这次接收到的数据将因不能装入SBUF而丢失。方式2、3:软件使REN=1,同时满足以下两个条件: RI=0; SM2=0或接收到的第9位数据为1(SM2=1),则这次接收有效,8位数据装入SBUF,第9位数据装入RB8,并由硬件置位RI。否则,接收的这一帧数据将丢失。波特率的产生方法:在方式0下,串行口的波特率是固定的,即波特率=fosc /12;在方式1、3下,串行口波特率由定时器T1的溢出率和SMOD值同时决定。相应公式为:波特率=2SMODT1溢出率/32;在方式2下,串行口的波特率可由PCON中的SMOD位控制:若使SMOD=0,则所选波特率为fosc/64;若使SMOD=1,则波特率为fosc/32。即2SMOD64fosc波特率=12. 为何T1用作串行口波特率发生器时常用模式2?若fosc=6MHz,试求出T1在模式2下可能产生的波特率的变化范围。答案:定时器T1作为波特率发生器可工作于模式0、模式1和模式2。其中模式2在T1溢出后可自动装入时间常数,避免了重装参数,因而在实际应用中除非波特率很低,一般都采用模式2。若fosc=6MHz,T1在模式2下可能产生的波特率的变化范围为:61.04 bps 15625 bps。13. 简述多机通信原理。答案:当主机选中与其通信的从机后,只有该从机能够与主机通信,其他从机不能与主机进行数据交换, 而只能准备接收主机发来的地址帧。上述要求是通过SCON寄存器中的SM2和TB8来实现的。当主机发送地址帧时使TB8=1,发送数据帧时使TB8=0,TB8是发送的一帧数据的第9位,从机接收后将第9位数据作为RB8,这样就知道主机发来的这一帧数据是地址还是数据。另外,当一台从机的SM2=0时,可以接收地址帧或数据帧,而当SM2=1时只能接收地址帧,这就能实现主机与所选从机之间的单独通信。14. 试用8051串行口扩展I/O口,控制16个发光二极管自右向左以一定速度轮流发光,画出电路并编写程序。程序如下:#include#define uchar unsigned char#define uint unsigned intsbit high8 = P11;sbit low8 = P10;uchar a = 0x80;uchar count = 0x08;void init()SCON = 0x00; /串口工作方式0ES = 1; /开串口中断EA = 1; /开总中断low8 = 1; /打开低8位并行输出high8 = 0; /关闭高8位并行输出void delay(void) /M ms 延时程序 误差 0us (6M) unsigned char a,b,c; for(c=23;c0;c-) for(b=152;b0;b-) for(a=70;a0;a-);int main() init(); SBUF = 0x00; /串行口发送数据 while(1); /等待中断void recv() interrupt 4 TI = 0; /清除发送标志位 SBUF = a; delay(); a = a 1; /数据向右移位一次 if(a = 0) /判断a是否为0 a= 0x80; count -; if(count = 0) /判断是否显示够8次 count = 0x08; /置数软件计数器high8 = high8;low8 = low8; /切换高低8位并行输出15. 试设计一个8051单片机的双机通信系统,串行口工作在方式1,波特率为2400bps,编程将甲机片内RAM中40H4FH的数据块通过串行口传送到乙机片内RAM的40H4FH单元中。答案:双方约定的通信协议如下:甲机先发送请求乙机接收信号“0AAH”,乙机收到该信号后,若为准备好状态,一个则发送数据“0BBH”作为应答信号,表示同意接收。当甲机发送完16个字节后,再向乙机发送一个累加校验和。校验和是针对数据块进行的,即在数据发送时,发送方对块中的数据简单求和,产生一个单字节校验字符(校验和),附加到数据块结尾。在数据接收时,接收方每接收一个数据也计算一次校验和;接收完数据块后,再接收甲机发送的校验和,并将接收到的校验和与乙机求出的校验和进行比较,向甲机发送一个状态字,表示正确(00H)或出错(0FFH),出错则要求甲机重发。甲机收到收到乙机发送的接收正确应答信号(00H)后,即结束发送,否则,就重发一次数据。甲机采用查询方式进行数据发送,乙机采用中断方式进行数据接收。双方约定传输波特率为2400bps,两机主频均为11.059MHz,双机串行口都工作于方式1,查表6-2可知SMOD=0,定时器T1采用工作模式2,初值为F4H。甲机发送子程序:#include#include#define uchar unsigned char#define uint unsigned intuint i;char data *p; /定义一个指向片内RAM地址的指针void init()TMOD = 0x20; /定时器T1工作在方式2 TH1 = 0xF4; / 波特率为2400bit/s TL1 = 0xF4; ES = 1; /开串口中断EA = 1; /开总中断 SCON = 0x50; /串口工作在方式1PCON = 0x00; /SMOD = 0;TR1=1; /打开定时器T1void send(uchar data1)/发送子程序SBUF = data1;while(TI = 0);TI = 0;void main() uchar i,ack,checksum = 0;init();p=0x40;/片内RAM地址为0x40for(i = 0;i 16; i+) /初始化要发送的数据pi = i+1; while(1)send(0xaa);while(!RI);RI = 0;ack = SBUF;if(ack = 0xbb)for(i = 0 ;i 16 ;i +)send(pi);/发送数据checksum = checksum + pi; /求校验和send(checksum); checksum = 0;/清校验和while(!RI);RI = 0;ack = SBUF;if(ack = 0x00)/判断数据是否为0while(1);/停止发送乙机接收子程序:#include#include#define uchar unsigned char#define uint unsigned intuchar checksum = 0,i = 0,checksum_r;char data *p; /定义一个指向片内RAM地址的指针bit rec_flag = 0;void init()TMOD = 0x20; /定时器T1工作在方式2 TH1 = 0xF4; / 波特率为2400bit/s TL1 = 0xF4; ES = 1; /开串口中断EA = 1; /开总中断 SCON = 0x50; /串口工作在方式1PCON = 0x00; /SMOD = 0;TR1=1; /打开定时器T1void send(uchar data1) /串口发送子程序SBUF = data1;while(TI = 0);TI = 0;void main() init();p=0x40;/片内RAM地址为0x20while(1) /等待中断void recv() interrupt 4uchar ack = 0;if(RI)RI = 0; /清除接收标志位ack = SBUF;if(ack = 0xaa) /判断是否为请求发送数据帧 /发送应答信号 send(0xbb); rec_flag = 1; /数据接收标志位置1 else if(!rec_flag) /接收的不是数据 checksum_r = SBUF; if(checksum = checksum_r)/发送数据的校验和与接收数据校验和比较 send(0x00); /相等发送00 else send(0xff); /不等发送0xff checksum = 0; if(rec_flag) pi = SBUF;checksum = checksum + pi;/求校验和i +; if(i = 16)i = 0;rec_flag = 0; 16. 8051以方式2进行串行通信,假定波特率为1200bps,第9位作奇偶校验位,以中断方式发送。请编写程序。答案:主程序:#include#define uchar unsigned charuchar i = 0;uchar a10;void main()SCON = 0x80;PCON = 0;ES = 1;EA = 1;while(1);void uart() interrupt 4TI = 0;if( i 10 )ACC = ai;TB8 = P;SBUF = ai;i+;17. 8051以方式3进行串行通信,假定波特率为1200bps,第9位作奇偶验位,以查询方式接收。请编写程序。答案:#include#define uchar unsigned charuchar i,flag;uchar a10;void main()TMOD = 0x20;TL1 = 0xe8;TH1 = 0xe8;TR1 = 1;SCON = 0xd0;PCON = 0;while(1)if(RI)RI = 0;ACC = SBUF;if( P = 0 )if( RB8 = 1 )flag = 1;elseif( RB8 = 1 )flag = 0;if( i 10 )ai= SBUF;i+;elseflag = 1;18. RS-232C总线标准是如何定义其逻辑电平的?实际应用中可以将MCS-51单片机串行口和PC机的串行口直接相连吗?为什么?答案:RS-232C采用负逻辑,即逻辑1用5V15V表示,逻辑0用5V15V表示。PC机配置的是RS-232C标准接口,与MCS-51单片机输入、输出电平不兼容。因此实际应用中不能将MCS-51单片机串行口和PC机的串行口直接相连。19. 为什么RS-485总线比RS-232C总线具有更高的通信距离和更远的通信距离?答案:RS-232C由于发送器和接收器之间具有公共信号地,不可能使用双端信号,因此共模噪声会耦合到信号系统中,从而限制了RS-232C的信号传输速率和通信距离。而RS-485总线无论发送还是接收数据,均用两条线传送双端(差分)信号,因而大大提高了通信速率和通信距离。定时器补充练习题:18051定时器/计数器有哪几种工作模式?各有什么特点?答:8051定时器/计数器有0,1,2,3四种工作模式。模式0为13位1定时器/计数器,模式1为16位1定时器/计数器,模式2为自动赋初值的8位定时器/计数器,模式3可以增加一个8位定时器(T1没有模式3)。28051定时器作定时和计数时,其计数脉冲分别由谁提供?答:8051定时器作定时器时,输入的记数脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器可看作是对单片机机器周期的计数器。8051定时器作计数器时,则对外部事件进行计数。38051定时器的门控信号GATE为1时,定时器如何启动?答:8051定时器的门控信号GATE为1时,只有(或)引脚为高电平且TR0(或TR1)置1时,相应的T0或T1才能选通工作。4定时器/计数器0已预置为156,且选定用于模式2的计数方式,现在T0引脚上输入周期为1ms的脉冲,问:(1) 此时定时器/计数器0的实际用途是什么?(2) 在什么情况下,定时器/计数器0溢出?答:(1)此时定时器/计数器0的实际用途是0。1S脉冲信号发生器。 (2)当T0每记数100次后定时器/计数器0溢出。5设fosc=12MHz,定时器0的初始化程序和中断服务程序如下:MAIN:MOV TH0, #9DHMOV TL0, #0D0HMOV TMOD, #01HSETB TR0中断服务程序:MOV TH0, #9DHMOV TL0, #0D0H
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 其他分类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!