




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5、6、7、8章习题一、问答题1说明51单片机读端口锁存器的必要性,为什么?答:mcs-51系列单片机有不少指令可以直接进行端口操作,例如:anl、orl、xrl、jbc、cpl、inc、dec、djnz、mov px.x,c、clr px.x、setb px.x。这些指令的执行过程分成“读-修改-写”三步,即先将端口的数据读入cpu,在alu中进行运算,运算结果再送回端口。执行“读-修改-写”类指令时,cpu实际上是通过三态门读回锁存器q端的数据。这种读锁存器的方式是为了避免可能出现的一种错误。例如,用一根口线直接去驱动端口外的一个npn晶体管基极,当向口线写“1”时,该晶体管导通,导通了
2、的三极管集极与发射极间只有0.7v,会把端口引脚的高电平拉低,这样直接读引脚就会把本来的“1”误读为“0”。但若从锁存器q端读,就能避免这样的错误,得到正确的数据。也就是说,如果某位输出为1时,有外接器件拉低电平, 读端口引脚与读锁存器就有区别了,读锁存器状态是1,读引脚状态是0,锁存器状态取决于单片机企图输出什么电平,引脚状态则是引脚的实际电平。因此,当作为读引脚方式使用时,应先对该口写“1”,使场效应管截止,再进行读操作,以防止场效应管处于导通状态,使引脚为“0”,而引起误读。2请说明为什么使用led需要接限流电阻,当高电平为+5v时,正常点亮一个led需要多大阻值的限流电阻(设led的正
3、常工作电流为8ma,导通压降为0.6v),为什么?答:因为led导通时,电压降是基本固定的(如0.6v)。为了使led既能正常工作(电流为820ma),又不至于被过大的电流损坏,所以必须加一个限流电阻,电阻值为100500。3简述在使用普通按键的时候,为什么要进行去抖动处理,如何处理。答:键抖动会引起一次按键被误读多次。为了确保cpu对键的一次闭合仅做一次处理,有必要去除键抖动。在键闭合稳定时,读取键的状态;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。4简述led数码管动态扫描的原理及其实现方式。答:动态扫描的原理是利用人的视觉暂留,让人觉得各位led同时点亮一样。逐位轮
4、流点亮各个led,每一位保持一定时间,在510ms之内再一次点亮,重复不止,就可以实现动态扫描。5为什么51单片机在读口的引脚状态时,许先向端口写“1”,请用图5-1 p1结构图加以说明。锁存器dcpqqp1.x读锁存器写锁存器内部总线读引脚内部上拉电阻图5-1 p1口结构图21v1vcc答:在单片机执行读引脚操作时,如果锁存器原来寄存的数据q=0,那么由于=1,将使v1导通,引脚被始终钳位在低电平上,不可能输入高电平。为此,使用读引脚指令前,必须先用输出指令置q=1,使v1截止。5简述89c51各io口的驱动能力。答:各io口单个引脚,允许灌入的最大电流为 10 ma; 每个 8 位的接口(
5、p1、p2 以及 p3),允许向引脚灌入的总电流最大为 15 ma; p0 的驱动能力最强,允许灌入的最大总电流为 26 ma; 全部的四个接口所允许的灌电流之和,最大为 71 ma。 但引脚“输出高电平”的时候,输出电流不到 1 ma。6什么是中断?中断与子程序最本质的区别?答:中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,自动转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序的过程。 中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使cpu暂停正在执行的程序,转而
6、去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。中断与子程序的最本质的区别:子程序是预先安排好的;中断是随机发生的。7编制中断服务程序时,为什么在主程序的初始化程序中,必须设置ea1 这条指令(或达到同样功能的对ie赋值的指令),以及在中断服务程序中为什么通常需要保护现场和恢复现场?答:中断允许寄存器ie中有1个总的开关中断控制位ea,当ea=0时,所有的中断请求被屏蔽,cpu不接受任何中断;只有当ea=1时,cpu才开放中断。所以主程序的初始化程序中,必须设置ea1(或者用ie1xxxxxxxb,x表示1或0) 这条指令。现场是指中断时刻单片机中某些寄存器和储存器单
7、元中的数据或状态,为了使中断服务程序的执行不破坏这些数据和状态,以免在中断返回后影响主程序的运行,因此要这些数据和状态送入堆栈保存,这就是现场保护。中断结束后,在返回主程序前,则需要把保存的现场数据和状态从堆栈中弹出,以恢复那些寄存器和存储器单元中的原有内容,这就是现场恢复。8单片机89c51有哪些中断源,cpu对其中断如何请求?答:89c51中断系统有5个中断源:int0:外部中断0请求,低电平有效。通过p3.2引脚输入。int1:外部中断1请求,低电平有效。通过p3.3引脚输入。t0:定时器/计数器0溢出中断请求。t1:定时器/计数器1溢出中断请求。txd/rxd:串行口中断请求。当串行口
8、完成一帧数据的发送或接收时,便可请求中断。9简述单片机89c51中断的自然优先级顺序,如何提高某一中断源的优先级别。答:中断源,其自然优先级的顺序如下:外部中断0(px0) 最 高定时器/计数器0溢出中断(pt0)外部中断1(px1)定时器/计数器1溢出中断(pt1)串行口中断(ps) 最 低sfr中的ip寄存器中有对应的控制位,若某几个控制位为1,则相应的中断源就规定为高优先级中断;反之,若某几个控制位为0,则相应
9、的中断源就规定为低优先级中断。当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部自然优先级的顺序。10简述51系列单片机中断响应的条件。答:有中断源发出中断请求;中断总允许位ea=1,即cpu开中断;申请中断的中断源的中断允许位为1,即中断没有屏蔽;无同级或更高级中断正在被服务;当前的指令周期已经结束;若现在指令为reti或者是访问ie或ip指令,则该指令以及紧接着的另一条指令已执行完。11用汇编语言编程时,在51系列单片机执行中断服务程序的指令较多时,为什么一般都要在入口地址(又称中断矢量地址)开始的地方放一条跳转指令?答:因为51系列单片机的两个相邻中断源中断服务程序入口地
10、址相距只有8个单元,当中断服务程序较长容纳不下的,一般都要在相应的中断服务程序入口地址中放一条跳转指令。12为什么一般都把主程序的起始地址放在0030h之后?答:因为0000h0030h中有中断的矢量地址,为了避免冲突,一般都把主程序的起始地址放在0030h之后。13中断服务子程序返回指令reti和普通子程序返回指令ret的区别?答:reti指令在返回的同时清除相应的优先级触发器,以便允许下次中断。14简述51单片机定时/计数器4种工作模式的特点。答:模式1:是16位的定时器/计数器;模式2:把tl0(或tl1)配置成一个可以自动重装载的8位定时器/计数器;模式3:对t0和t1大不相同。若将t
11、0设置为模式3,则tl0和th0被分为两个相互独立的8位计数器。定时器t1无工作模式3状态。模式0:与模式1几乎完全相同,唯一的差别是模式0中,寄存器tl0用5位,th0用8位。这种方式是为了与48系列兼容的,目前一般不使用。15定时/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关?答:定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供。定时时间与时钟频率和定时初值有关。16画出51单片机计数/定时器方式1的逻辑结构框图,说明它们的工作原理,如何使用门控和非门控启动计数的方法。答:方式1的逻辑结构振荡器÷12控制txtrxgate&1
12、intx中断tfxthx(8位)c/t=0c/t=1tlx(8位)如图所示,当gate = 0时,经非门后,或门输出1,这样trx将直接控制定时器的启动和关闭。这时如果trx=1,则接通控制开关,定时器从初值开始计数直至溢出。溢出时,16位加计数器为0,tfx置位,并申请中断。如要循环计数,则定时器需重置初值,且需用软件将tfx复位。trx = 0,则与门被封锁,控制开关被关断,停止计数。当gate = 1时,与门的输出由输入intx的电平和trx位的状态来确定。这时若trx=1,则引脚intx可直接开启或关断计数器:当intx为高电平时,允许计数;低电平时则停止计数。若trx=0,则与门被封
13、锁(即输出为0),控制开关被关断,不能计数。控制启动、停止计数方式如下: 非门控方式当gate0,控制权由 trx 决定,trx1计数启动,trx0计数停止。这种方式实际上是用软件控制启动、停止计数。 门控方式当gate1、trx1,控制权由intx 决定intx1计数启动,intx0计数停止。这种方式实际上是用外部硬件intx引脚控制启动、停止计数。17在使用8051的定时器/计数器前,应对它进行初始化,其步骤是什么?答: (1)确定t/c的工作方式编程tmod寄存器; (2)计算t/c中的计数初值,并装载到th和tl; (3)t/c在中断方式工作时,须开cpu中断和源中断编程ie寄存器;
14、(4)启动定时器/计数器编程tcon中tr1或tr0位。18在有串行通信时,定时器/计数器1的作用是什么,怎样确定串行口的波特率?答:在有串行通信时,定时器/计数器1的作用是串行口发生器。 串行口的波特率根据串行口的工作方式具有不同的计算方式: 方式0的波特率固定为晶体振荡器的十二分之一; 方式1的波特率=2smod.(定时器1的溢出率)/32; 方式2波特率=2smod.(fosc/64); 方式3波特率同方式1(定时器l作波特率发生器)。19简述89c51串口通信的四种方式及其特点。答:方式0:同步移位寄存器输入/输出方式,常用于扩展i/o口。波特率固定为振荡频率的1/12,并不受pcon
15、寄存器中smod位的影响。方式1:用于串行发送或接收,为10位通用异步接口。txd与rxd分别用于发送与接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位停止位,共10位。波特率由定时器t1的溢出率与smod值同时决定。方式2:用于串行发送或接收,为11位通用异步接口。txd与rxd分别用于发送与接收数据。收发一帧数据的格式为1位起始位、8位数据位(低位在前)、1位可编程的第9数据位和1位停止位,共11位。波特率取决于pcon中smod位的值:当smod0时,波特率为晶振的1/64;当smod1时,波特率为晶振的1/32。方式3:用于串行发送或接收,为11位通用异步接口。t
16、xd与rxd分别用于发送与接收数据。帧格式与方式2相同,波特率与方式1相同。20单片机的串口可以与pc的串口直接连接进行通讯吗?为什么?应如何连接?单片机与pc的串行接口图答:mcs-51系列单片机串行口与pc机的rs-232c接口不能直接对接,pc机rs232采用负逻辑电平,即逻辑“0”:+3v+15v;逻辑“1”:-3v-15v,单片机采用的是ttl电平,即电压小于0.4v 为低电平,大于2.4v为高电平;因此二者不能直接相连,使用时必须进行电平转换,否则将使ttl电路烧坏!必须进行电平转换。常用的转换芯片有max232等。连接图如上。21试叙述利用sm2控制位进行多级通讯的过程?答:见8
17、.7及8.7.1节。22rs485总线有何特点?答:rs-232c是利用传输信号线与公共地之间的电压差,rs-485是利用信号导线之间的信号电压差。它通过传输线驱动器,把逻辑电平变换成电位差,完成始端的信号传送;通过传输线接收器,把电位差转换成逻辑电平,完成终端的信息接收。rs-485比-232c传输距离长、速度快,传输速率最大可达10 mb/s,最大距离可达1200 m。rs-485是一点对多点的通讯接口,一般采用双绞线的结构。普通的pc机一般不带rs-485接口,因此要使用rs-232/rs-485转换器。在计算机和单片机组成的rs-485通信系统中,通常下位机由单片机系统组成,主要完成工
18、业现场信号的采集和控制。上位机为工业pc机,负责监视下位机的运行状态,并对其状态信息进行集中处理,以图文方式显示下位机的工作状态和工业现场被控设备的工作状态。系统中的各节点(包括上位机)的识别是通过设置不同的站地址来实现的。单片机可以通过max1487等来完成ttl/ rs-485的电平转换。23. 简述lcm1602的主要显示性能。答:lcm1602可显示192个5x7点阵字符,主要是数字和英文大小写字母(1602显示的数字和字母的码值,与ascii码表中的数字和字母的码值相同)。另外,它具有64b的自定义字符ram,可自行定义8个5x7点阵字符用于显示。24.如何用软件消除键盘的抖动?答:
19、由于按键是机械开关结构,所以当用手按下其中一个键时,往往会出现所按键在闭合位置和断开位置之间发生跳几下后才会稳定到闭合状态的情况。在释放一个键时,也会出现类似的情况,这就是键的抖动,抖动的持续时间不一,但通常不会大于10ms。 若抖动问题不解决,就会引起对闭合键的多次读入。对于键抖动最方便的解决方法就是当发现有键按下后,不是立即进行扫描,而是延时大约10ms后再进行。由于一个键按下的时间一般会持续上百毫秒,所以延迟10ms后再扫描处理并不迟。25如何确定led数码显示器的段码?答:根据所选用的led数码管的极性(共阳极还是共阴极)以及数码中每一个笔段的引脚与cpu(或其它控制芯片) io口的引
20、脚的连接来定(称自定的段码表)。一般资料上提供的段码表是标准接法的段码,即数码管的a、b、c、d、e、f、g、dp的引脚要依次接在cpu的px.0px.7上,这种接法有时会使在pcb布线的时候不大方便,不如自定的段码表灵活。26段码表数组变量一定要放在code存储区吗?放在其它存储区会减少程序的代码吗?答:最好放在code存储区,当然也可以放在内部ram或外部ram区,但这样作会占用本来就非常稀少的内部ram资源和不多的外部ram资源。由于放在其它区域仍然要采用程序中的段码表,所以不仅不能减少程序的代码量还会增加把段码表传送的程序指令,增加程序的代码数量。二、选择题1. 89c51单片机在晶振
21、12mhz时,计数器对外部脉冲最大计数频率为_c_。 a. 12mhz b. 1mhz c. 0.5mhz d. 6mhz2. 89c51外接晶振频率为6mhz,其计数器允许输入外部脉冲的最高频为 a 。 a. 0.25mhz b. 1mhz c. 6mhz d. 12mhz 3. 下列几种中断优先级的次序中, c 为可实现的次序。 a. ,t1, ,t0,串口 b. 串口,t0,,t1, c. ,t0,t1,串口 d. 串口,,t1,t04. 各中断源发出的中断请求信号,都会标记在mcs-51中的 b 中。 (a)tmod (b) tcon、scon (c) ie (d) ip6下面哪一种仅
22、适用于定时器t0(d)。a.方式0 b.方式1 c.方式2 d.方式37下列说法正确的是 c a、 各中断发出的中断请求信号,都会标记在mcs51系统的ie寄存器中。b、 各中断发出的中断请求信号,都会标记在mcs51系统的ip寄存器中。c、 各中断发出的中断请求信号,都会标记在mcs51系统的tcon与scon寄存器中。d、 各中断发出的中断请求信号,都会标记在mcs51系统的tmod寄存器中。8在mcs51中,需要外加电路实现中断撤除的是: a a、电平方式的外部中断 &
23、#160;b、定时中断 c、外部串行中断 d、跳变方式的外部中断9下列说法正确的是 a a、 特殊功能寄存器pcon,与定时器/计数器的控制无关。b、 特殊功能寄存器tmod,与定时器/计数器的控制无关。c、 特殊功能寄存器ie, 与定时器/计数器的控制无关。d、 特殊功能寄存器tcon,与定时器/计数器的控制无关。10下列说法中不正确的是 d a、 同一
24、级别的中断请求按时间的先后顺序响应。b、 同级中断不能嵌套。c、 低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求。d、 同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。三、填空题1. 89c51有 5 个中断源,可分为 2 个优先级。上电复位时 int0 中断源的优先级别最高。2当单片机接到外设的中断申请时,单片机响应中断,单片机将暂停主程序的执行,转去执行 中断服务 程序,执行完 中断服务 ,再执行 主 程序。389c51
25、单片机的中断源有:外部0中断,定时器t0中断,外部1中断,定时器t1中断,串行口通讯中断。4阅读以下程序后填空#include <reg51.h>unsigned char a;void main(void) tmod=0x02; tl0 =0xd8; th0 =0xd8; ea=1; et0=1; tr0=1; while(1); void timer0() interrupt 1 a+;1)本程序把定时器/计数器 t0 设置成方式 。2)本程序执行时,变量a的内容将 。3)程序在 语句处发生中断,执行完中断服务程序后,返回到 语句处。4)本程序中断服务程序的入口地址为 。5)是
26、否可将interrupt 1改为interrupt 3? 。答案:1)t0; 2;2)+1;3)while(1); while(1);4)000bh;5)不能。四、是非题1. mcs-51中的基本型89c51共有五个中断源,这五个中断请求源全部来自外部引脚。f2. 对mcs-51系列芯片中,当使用内部ram时,ea引线端应接高电平;而不使用内部ram时,ea引线端则应接低电平。f3. mcs-51中的89c51单片机p3口的各口线,必须作为第二功能使用。f五、编程题1. 在p3.2-p3.4三个引脚上分别接有三个发光二极管,用c51编程实现三个发光二极管依次闪亮,循环不止。电路原理图如图5-2
27、所示。图5-3 led循环闪烁程序框图图5-2 led循环闪烁原理图图解:程序框图如图5-3。其c51程序如下:#include <reg51.h>/led数码管位连接定义sbit led1=p32; /定义sfr中引脚的“位” sbit led2=p33;sbit led3=p34;/*- 功能:毫秒延时函数 参数:当晶振为11.0592mhz时,x为ms数,误差都为16us;x1000为1秒-*/void delayms(unsigned int x) unsigned char j;while(x-) for(j=0;j<113;j+); void main(void)
28、 /主程序 while(1) led1=0;led2=1;led3=1; delayms(1000);图5-5 两位数码管动态显示程序框图 led1=1;led2=0;led3=1; delayms(1000); led1=1;led2=1;led3=0; delayms(1000); 2电路原理图如图5-4。编写程序led显示00,每秒钟加1,至99,如此循环不止。图5-4 两位led数码管静态显示解:程序框图如图5-5,程序如下:#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar
29、 code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/*- 功能:毫秒延时函数 参数:当晶振为11.0592mhz时,x为ms数,误差都为17us;x1000为1秒-*/void delayms(unsigned int x) unsigned char j;while(x-) for(j=0;j<113;j+); void main(void) /主程序 uchar num=0; while(1) p1=dispcodenum/10; p3= dispcodenum%10;delayms(1000)
30、; num+; if (num>99) num=0; 3设计一动态显示4位8段led数码管的电路原理图,并编写程序显示“5678”。图5-6 4位led动态显示解:电路原理图如图5-6。程序如下:#include <reg51.h>#define uchar unsigned char#define uint unsigned int/*-led数码管位选线连接定义注:led数码管段码线连接在p0口 -*/sbit led1=p20;sbit led2=p21;sbit led3=p22;sbit led4=p23;uchar code dispcode= /led显示09、
31、黑的段码定义0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar ledbuf4; /4led显示缓冲区,ledbuf0为高位,ledbuf4为低位/*-功能:延时子程序参数:x需延时的毫秒数 当晶振为11.0592mhz时,延时为xms-*/void delayms(uint x) uchar j; while(x-) for(j=0;j<113;j+); /*-功能:显示4位led函数(ledbuf0为高位,ledbuf4为低位)说明:p00xff;在proteus仿真中才用,实际应用时可去掉-*/void dis_
32、4led(uchar *ledbuf) p0=dispcodeledbuf0;led1=1;led2=0;led3=0;led4=0; delayms(1); p0=dispcodeledbuf1;led1=0;led2=1;led3=0;led4=0; delayms(1); p0=dispcodeledbuf2;led1=0;led2=0;led3=1;led4=0; delayms(1); p0=dispcodeledbuf3;led1=0;led2=0;led3=0;led4=1; delayms(1); void main(void) ledbuf0=5; ledbuf1=6; le
33、dbuf2=7; ledbuf3=8; while(1) dis_4led(ledbuf); 7根据图5-7的电路原理,设计一个独立式键盘管理程序,在检测到键按下时,点亮对应的led。键闭合时,采用软件延时消抖的处理,键释放时不加消抖动处理。图5-7解: 45首先设计一个头文件(文件名key.h),内容如下:/*-文件名:key.h头文件功能:三独立键处理函数 -*/#ifndef _key_h_#define _key_h_#include <reg51.h>#define uchar unsigned char#define up 0x01 /定义键号#define down
34、0x02#define enter 0x03 sbit up_key =p10; /定义键与51单片机的引脚sbit down_key =p11;sbit enter_key=p12;/*- 功能:毫秒延时函数 参数:当晶振为11.0592mhz时,x为ms数;误差都为16us;x1000为1秒 引用举例:delayms(500); 表示延时500毫秒。-*/void delayms(unsigned int x) unsigned char j;while(x-) for(j=0;j<113;j+); /*- 功能: 获取键号 返回: key=键号1-3; key=0无键按下。引用举例
35、:如之前定义了一个uchar的变量 key_num,则可以 key_num=keycannum(); key_num将被赋予按键后的键号值。-*/ uchar keyscannum(void) uchar key=0; / 无键按下,key=0 up_key=1;down_key=1;enter_key=1; if (up_key=0 )delayms(10); if(up_key=0) key=up; else key=0; if (down_key=0 )delayms(10); if(down_key=0)key=down; else key=0; if (enter_key=0)del
36、ayms(10); if(enter_key=0)key=enter;else key=0; return key; #endif程序(文件名3keydemo.c)如下:/*-文件名:3keydemo.c功能:独立键处理演示程序-*/#include "key.h"sbit led_red = p32; /定义led引脚sbit led_yellow= p33;sbit led_green = p34;/*-键处理子函数功能:按up键红灯亮,按enter键黄灯亮,按down键绿灯亮,-*/void keyproc(uchar key) switch(key) case up
37、: led_red=0;led_yellow=1;led_green=1;break; case down: led_red=1;led_yellow=0;led_green=1;break; case enter:led_red=1;led_yellow=1;led_green=0;break; /*主程序void main (void) uchar key;while(1) key=keyscannum(); if(key=up | key=down | key=enter) keyproc(key); key=0; 8根据图5-8所示电路,(1)编写led(09)的段码;(2)设计一个程
38、序,开机后led显示0,以后每按一次键,显示的数字加1,显示9后,再回到0,并照此循环。图5-8解:#include <reg51.h>#define uchar unsigned charsbit key=p34; /键引脚uchar keycounter=0;uchar code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; / led(09)的段码void main(void) /主程序 p2=dispcode0; while(1) if(key=0) /如键按下 if(key=1) / 检测
39、键是否松开 keycounter+; if(keycounter>9)keycounter=0; p2=dispcodekeycounter; 9用proteus设计一个4x4的键盘,一位7段led数码管显示的电路,编写程序将按键的编码显示出来(0f)。图5-9解:电路原理图如图5-9。#include "4x4key.h" /4x4key.h见教材5.2.4, 但要把无键按下的返回值改为16#define uchar unsigned charuchar code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x
40、80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf; / led(0f,)的段码void main(void) uchar keynum=16; p2=dispcode16; /显示“” while(1) keynum=get_key();if(keynum !=16) /有键按下 p2=dispcodekeynum;/p2显示按键值 10利用51单片机的定时器和中断方式,在共阳极的两个led上显示0099(每次增加1秒)反复循环的秒钟。请设计电路原理图和程序。解:电路原理图如图5-10,程序如下:#include <reg51.h>#define
41、 uchar unsigned char#define uint unsigned intuchar code dispcode= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar num;uchar timecounter=100;sbit led1=p36;sbit led0=p37;void delayms(unsigned int x)图5-10 动态led显示原理图 两位led数码管动态显示 unsigned char j; while(x-) for(j=0;j<113;j+);void main(voi
42、d) /主程序 tmod=0x01; tl0=0xf0; th0=0xd8; ea=1; /开总允许中断 et0=1; tr0=1; while(1) p1=dispcodenum/10;led1=1;led0=0;delayms(5); p1=dispcodenum%10;led1=0;led0=1;delayms(5); void timer0(void) interrupt 1 tl0=0xf0; th0=0xd8; timecounter-; if(timecounter=0) timecounter=100; num+; if(num>99)num=0; 11如图5-11,编写
43、程序,每次按键使外部中断0产生中断,在中断服务程序中使外接发光二极管led改变一次亮灭状态。解:程序如下:#include <reg51.h> 5v int0 p1.05v图5.11 原理图sbit p1_0=p10;void main(void) /主程序 it0=1; /负跳变触发中断 ea=1; /开总允许中断 ex0=1; /开int0中断while(1); /无限循环,等待下一次中断void int0(void) interrupt 0 /中断服务程序,工作寄存器采用0组(省略了using 0) p1_0=p10; /p1.0取反,改变led亮灭的状态12如图5.12,已
44、知mcs-51单片机系统晶振频率为12mhz,试编写程序,用定时器t0,工作方式2,使p1.0引脚输出如下周期方波。0.1ms 0.1ms 图5.12 方波图解:每隔0.1ms改变一次p1.0的输出状态,即形成周期方波,用t0方式2,定时实现。计算初值:c=28-t/t=256(0.0001)/10-6=256-100=156=9ch程序如下:#include <reg51.h>sbit p1_0=p10;void main(void) /主程序 tmod=0x02; /置定时器t0为方式2tl0 =0x9c; /置定时器初值 th0 =0x9c; ea=1; /开总中断 et0=
45、1; /开t0中断 tr0=1; /启动定时while(1); /无限循环,等待下一次定时中断void timer0() interrupt 1 /t0中断服务程序 p1_0=p10; /p1.0取反,产生方波13如图5.13,用p1.0驱动led亮1秒、灭1秒地闪烁,设晶振频率为12mhz。解: mcs-51定时器最长的定时时间达不到1秒,这里采用了一种长定时方法:先做一个10ms即0.01秒的定时,增加一个软件计数器(如timecouter),记录0.01秒定时中断次数,计满100个中断为1秒。程序框图见图5.14。计数初值=65536 - 0.01/10-6=d8f0hs为timecou
46、nterp1.089c51+5v200图5.13 原理图图5.14 定时器例2程序框图#include <reg51.h>#define uchar unsigned charsbit led=p10;uchar timecouter100;void main(void) /主程序 tmod=0x10; /置定时器t1为方式1tl1 =0xf0; /置定时器初值 th1 =0xd8; ea=1; /开总中断 et1=1; /开t1中断 tr1=1; /启动定时 led=0;while(1); /无限循环,等待下一次定时中断 void timer1() interrupt 3 /t1
47、中断服务程序 tl1 =0xf0; /重置定时器初值 th1 =0xd8; timecounter-; if(timecounter=0) timecounter=100; led=led;15 引脚输入被检测信号,用门控方式测量正脉冲宽度(设脉宽小于65.5ms)。分析:采用t1的门控制方式,使t1的启动受的控制,当gata=1,tr1=1时,一旦引脚输入高电平时,t1才启动计时,直至出现低电平,停止计时。为了测量确保真正从高电平上升沿开始计时,t1的计数要先等到出现一个高电平后,下一个高电平到来才开始进行,见图5.15。程序主要部分如下:#include <reg51.h>#defined uint unsigned intsbit inputpulse=p33;void main(void) /主程序 uchar pulsewide; tmod=0x90; /置t1,门控方式、定时器,工作方式1tl1 =0x00; /置定时器初值 th1 =0x00; while(inputpulse=0) tr1=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业无人机租赁平台运营管理优化方案研究
- 电动雨棚工程承接方案(3篇)
- 安全教育岗前培训记录课件
- 农业供应链金融风险管理与创新模式研究报告
- 农业企业数字化种植人才需求与培养策略研究(2025年)
- 凉山彝族面试题库及答案
- 兰州事业编面试题库及答案
- 跨境保险面试题库及答案
- 安全教育培训费税收编码课件
- 康桥社工面试题库及答案
- 学校食堂食品定点采购制度
- 《楼梯的故事》话剧剧本
- 出口鸡肉采购合同模板
- 幼儿园大班数学《认识8》
- Starter知识点清单(含默写)2024-2025学年牛津上海版英语六年级上册
- 贵州人民版劳动五年级上册全册教案教学设计
- 《新媒体运营》全套教学课件
- 温室气体排放核算和核查实践理论考核试题
- 1安全生产关键节点清单及核查内容清单
- 2024-2029年中国金枪鱼行业市场发展分析及发展趋势与投资前景研究报告
- 燃气管道保护方案(雨污分流二标)
评论
0/150
提交评论