LOOP0: MOV TL0,#90H ; MOV TH0,#0E8H SETB TR1 ;
LOOP1:JNB TF1,LOOP1 ; CLR TF1;
SETB P1.0
MOV TL0,#60H ; MOV TH0,#0F0H SETB TR1
LOOP2:JNB TF1,LOOP2 ; CLR TF1; CLR P1.0;
SJMP LOOP0; RET
6.5 设MCS-51单片机的晶振频率为6MHz,以计数器T1进行外部事件计数,每计数100个外部事件输入脉冲后,计数器T1转为定时工作方式,定时5ms后,又转为计数方式。如此周而复始地工作,试编程实现。
答:依据题意,设T1工作在计数模式时,工作在方式0, 设T1工作在定时模式时,工作在方式1 。
设定TMOD
TMOD的高4位控制T1,设定T1计数模式,即=1;工作在方式1,即 M1M0=10H;软件启动定时器,即GAME=0。TMOD的低4位与T0无关,一般取0,所以TMOD控制字为40H。
设定T1定时模式,即=0;工作在方式1,即 M1M0=01H;软件启动定时器,即GAME=0。TMOD的低4位与T0无关,一般取0,所以TMOD控制字为10H。 计算计数初值
计数初值=8192-100 =8092=1F9CH=0001111110011100B
因TL0的高3位未用,对计算出的初值要进行修正,即低5位前插入3个0构成低8位初值,从低6位向前取8位构成高8位初值,则计数初值为FC1CH 计算定时初值
晶振频率为6MHz,机器周期=2us =65536-2500=63036=F63CH ORG 100H;
START: MOV TMOD,#40H ; MOV TL0,#1CH; MOV TH0,#0FCH ; SETB TR1;
LOOP1:JNB TF1,LOOP1; CLR TF1;
MOV TMOD, #10H; MOV TL0,#3CH; MOV TH0,#0F6H;
SETB TR1;
LOOP2:JNB TF1,LOOP2;
CLR TF1;
SJMP START;
6.6 设MCS-51单片机的晶振频率为12 MHz,要求用定时器/计数器TO产生1 ms的定时,试确定计数初值以及TMOD寄存器的内容。
答:设T0工作定时模式,晶振频率为12MHz,机器周期=1us 方式1: 初值: =65536-1000=64536=FC18H
TMOD:00H
6.7 设MCS-51单片机的晶振频率为6MHz,要求用定时器/计数器产生100 ms 的定时,试确定计数初值以及TMOD寄存器的内容。
答:此题晶振频率改为6MHz,否则定时时间超出最大定时时间。 设定TMOD
TMOD的低4位控制T0,设定T0定时模式,即=0;若工作在方式1,即 M1M0=01H;软件启动定时器,即GAME=0。TMOD的高4位与T0无关,一般取0,所以TMOD控制字为01H。
计算定时初值
晶振频率为6MHz,机器周期=2us
初值: =65536-50000=15536=3CB0H
6.8 设晶振频率为12 MHz。编程实现以下功能:利用定时/计数器TO通过P1.7引脚输出一个50 Hz的方波。
答:依据题意,只要使P1.7引脚每隔10ms取反一次即可得到20ms的方波,因此定是时间T=10ms, T0工作在定时模式的方式1,以中断方式工作。
1,设定TMOD
TMOD的低4位控制T0,设定T0定时模式,即=0;若工作在方式1,即 M1M0=01H;软件启动定时器,即GAME=0。TMOD的高4位与T0无关,一般取0,所以TMOD控制字为01H。
2,计算定时初值
晶振频率为12MHz,机器周期=1us 初值: =65536-10000=55536=D8F0H ORG 0000H
AJMP MAIN ;转主程序 ORG 000BH ;T0中断矢量地址 AJMP ISER ;转中断服务程序
ORG 100H
MAIN: MOV SP,#60H ;设堆栈指针 MOV TMOD,#01H ;写控制字 MOV TL0,#0F0H ;置T0 初值 MOV TH0,#0D8H SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP $ ;等待中断
ISER: MOV TL0,#0F0H ;T0中断服务子程序,重置T0 初值 MOV TH0,#0D8H ; CPL P1.7 ;P1.7取反
RETI
END
6.9 每隔1s读一次P1.O,如果所读的状态为“1’,则将片内RAM 10H单元内
容加1;如果所读的状态为“O”,则将片内RAM llH单元内容加1。设单片机的晶振频率为12 MHz,试编制程序。
答:依据题意,每隔1s读一次P1.0引脚,再根据读出的状态分别计数。因此定是时间T=1s, 设T0工作在定时模式的方式1,以中断方式工作。
1,设定TMOD
TMOD的低4位控制T0,设定T0定时模式,即=0;若工作在方式1,即 M1M0=01H;软件启动定时器,即GAME=0。TMOD的高4位与T0无关,一般取0,所以TMOD控制字为01H。 2,计算定时初值
晶振频率为12MHz,机器周期=1us
因定时时间1s已超出定时器的定时能力,可将定时时间设为50ms,在中断服务程序中对定时器溢出进行计数20次时,读一次P1.0引脚,根据读出的状态分别计数。 =65536-50000=15536=3CB0H ORG 100H
MOV 11H, #00H ; 清计数器 MOV 10H, #00H ; 清计数器
MOV TMOD,#01H ;写控制字,T1工作方式1 MOV TL0,#0B0H ;置T0初值 MOV TH0,#3CH
START: MOV A, #20 ;置溢出次数 LOOP: SETB TR1 ;启动T1 LOOP1: JNB TF1,LOOP1 ; MOV TL0,#0B0H ;重置T1 初值 MOV TH0,#3CH ; CLR TF1 ;
DJNZ A, LOOP ; JNB P1.0, LOOP2 ; INC 11H ; SJMP STRAT ;
LOOP2: INC 10H ; SJMP STRAT ;
6.10 简要说明若要扩展定时器/计数器的最大定时时间,可采用哪些方法? 答:1,降低晶体振荡器主频, 2,采用多次累计计数等方法,见例6-4. 习题 7
7.1 什么是串行异步通信,它有哪些特点?
答:串行异步通信的数据通常是以字符(或字节)为单位组成字符帧按顺序传送的。字符帧通过传输线由发送端一帧一帧地发送到接收端,接收端一帧一帧地接收。
特点:优点是不需要传送同步脉冲,字符帧长度也不受限制,故所需设备简单。缺点是因字符帧中包含有起始位和停止位而降低了有效数据的传输速率。
7.2 串行异步通信的字符格式由哪几个部分组成?某异步通信接口,其帧格式由1个起始位
(O),7个数据位,1个偶校验和1个停止位组成。用图示方法画出发送字符“5”(ASCII码为0110101B)时的帧结构示意图。
答:1,串行异步通信的字符格式由一个起始位表示字符的开始,一个停止位表示字符的结束。数据位在起始位之后,停止位之前,这样构成一帧数据。奇偶校验位位与数据位之后,停止位之前,用于表示串行通信中采用奇校验位还是偶校验位,由用户根据需要决定。 2,发送字符“5”(ASCII码为0110101B)时的帧结构示意图:
7.3 MCS-51单片机的串行口由哪些功能模块组成?各有什么作用?
答:MCS-51单片机的串行口主要由两个数据缓冲寄存器SBUF,一个输入移位寄存器以及两个控制寄存器SCON和PCON组成。其中,缓冲寄存器SBUF是两个在物理上独立的专用寄存器,一个作发送缓冲器,另一个作接收缓冲器。两个缓冲器共用一个地址99H,可通过指令对SBUF的读写来区别,CPU写SBUF就是修改发送缓冲器的内容;读SBUF就是读接收缓冲器的内容。
控制寄存器SCON和PCON用来设定串行口的工作方式并对接收和发送进行控制。串行口对外有两条独立的收发信号线RXD(P3.0)、TXD(P3.1),因此可以同时发送、接收数据,实现全双工通信。
7.4 MCS-51单片机的串行口有哪几种工作方式?有几种帧格式?各工作方式的波特率如何确定?
答:有4种工作方式。
工作方式0为同步移位寄存器方式,该方式以8位数据为一帧,没有起始位和停止位,先发送或接收最低位。
工作方式1为8位异步通信方式,适合于点对点的异步通信。这种方式规定发送或接收一帧信息为10位,即1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。数据传输率可以改变。
工作方式2和3为9位异步通信方式。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位。 1. 方式0的波特率
串行口工作在方式0时,波特率由振荡器的频率fosc所确定:
波特率=
2. 方式2的波特率
串行口工作在方式2时,波特率由振荡器的频率fosc和SMOD所确定: 波特率= fosc
若SMOD=0,则所选波特率为fosc/64;若SMOD=1,则波特率为fosc/32。 3. 方式1或3的波特率
串行口工作在方式1或方式3时,波特率由定时器T1的溢出率和SMOD所确定: 波特率= 定时器T1的溢出率
7.5 MCS-51单片机的串行口控制寄存器SCON的SM2,TB8,RB8有何作用?
答:1,SM2主要用于方式2和方式3,因为多机通信是在方式2和方式3下进行的。 在方式2和方式3下,若SM2=1接收到第9位数据(RB8)为0时,则接收中断不被激活,将接收到的前8位数据丢弃。只有在接收到第9位数据(RB8)为1时才将接收到的前8位数据送入SBUF,并置位RI产生中断请求。当SM2=0时,则不论接收到第9位数据是0还是1,都将接收到的前8位数据送入SBUF中,并产生中断请求。在方式1中,若SM2=1,只有接收到有效的停止位RI才被激活。在方式0中,SM2必须是0。 2,TB8发送数据的第9位
在方式2、方式3中,TB8作为第9位数据发送出去,根据需要用软件置位或清0。TB8可