TMOD=0x02; TL0=131; TH0=131; TR0=1;
ET0=1; EA =1; cou=0; While(1);
}
void serve() interrupt 1 {
unsigned char temp; P3=0xff;
temp=P3&0xfc; if(temp!=sta) {
sta=temp; cou=0; }
if(sta=0x00) mag=7;
else if(sta=0x01) mag=3;
else if(sta=0x10) mag=1;
else if(sta=0x11) mag=0; if(cou==mag)
{
P1_0=~P1_0; cou=0;
}
else cou++; }
14.MCS-51单片机P1端口上,经驱动器连接有8只发光二极管,若fosc=6MHz,试编写程序,使这8只发光二极管每隔2s循环发光一次(要求T0定时)。 #include
void main()
25
{
TMOD=0x02; TL0=16; TH0=16; TR0=1;
ET0=1; EA =1; P1=0; cou=0; tim=1; While(1);
}
void serve() interrupt 1 {
tim++;
if(tim==500) {
P1=0x01< if(cou==8) cou=0; } } 15.设fosc=12MHz。试编写一段程序,对定时器T1初始化,使之工作在模式2,产生200μs定时,并用查询T1溢出标志的方法,控制P1.1输出周期为2ms的方波。 #include void main() { unsigned char i; TMOD=0x20; TL1=56; TH1=56; TR1=1; while(1) { while(TF1=1) { TF1=0; i++; if(i==5) 26 } } { P1_1=~P1_1; i=0; } } 16.使用一个定时器,如何通过软、硬件结合的方法,实现较长时间的定时? 答:先使用硬件实现单位时间的定时,通过软件设置计数来实现较长时间的定时。 27 第7章 习题答案 1.什么是串行异步通信,它有哪些作用? 答:单位信息的各位数据被分时一位一位依次顺序传送的通信方式称为串行通信,通过起始位和停止位来进行同步的串行通信称为串行异步通信。适用于速度较慢的数据传输。 2.89C52单片机的串行口由哪些功能部件组成?各有什么作用? 答:89C52通过引脚RXD(P3.0,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界进行通信,单片机内部的全双工串行接口部分,包含有串行发送器和接收器,有两个物理上独立的缓冲器,即发送缓冲器和接收缓冲器SBUF。发送缓冲器只能写入发送的数据,但不能读出;接收缓冲器只能读出接收的数据,但不能写入。控制状态寄存器SCON ,用于定义串行通信口的工作方式和反映串行口状态。 3.简述串行口接收和发送数据的过程。 答:在发送过程中,当执行一条将数据写入发送缓冲器SBUF(99H)的指令时,串行口把SBUF中8位数据以fosc/l2的波特率从RXD(P3.0)端输出,发送完毕置中断标志TI=1。写SBUF指令在S6P1处产生一个正脉冲,在下一个机器周期的S6P2处,数据的最低位输出到RXD(P3.0)脚上;再在下一个机器周期的S3、S4和S5输出移位时钟为低电平时,在S6及下一个机器周期的Sl和S2为高电平,就这样将8位数据由低位至高位一位一位顺序通过RXD线输出。并在TXD脚上输出fosc/12的移位时钟。在“写SBUF”有效后的第10个机器周期的SlPl将发送中断标志TI置位。 接收时,用软件置REN=1(同时,RI=0),即开始接收。当使SCON中的REN=1(RI=0)时,产生一个正的脉冲,在下一个机器周期的S3P1~S5P2,从TXD(P3.1)脚上输出低电平的移位时钟,在此机器周期的S5P2对P3.0脚采样.并在本机器周期的S6P2通过串行口内的输入移位寄存器将采样值移位接收。在同一个机器周期的S6P1到下一个机器周期的S2P2,输出移位时钟为高电平。于是,将数据字节从低位至高位接收下来并装入SBUF。在启动接收过程(即写SCON,清RI位),将SCON中的RI清0之后的第l0个机器周期的SlPl将RI置位。这一帧数据接收完毕,可进行下一帧接收。 4.89C52串行口有几种工作方式?有几种帧格式?各工作方式的波特率如何确定? 答:89C52串行口有4 种工作方式,有2种帧格式。 方式0的波特率=fosc/12 2SMOD方式2的波特率=×fosc 642SMOD串行口方式1、方式3的波特率=×(T1溢出速率) 32 5.若异步通信接口按方式3传送,已知每分钟传送3 600个字符,其波特率是多少? 答:波特率是3600*9/60=5400bit/s。 28