《单片机原理与应用及C51程序设计--杨加国主编-完整版答案(共34页).doc》由会员分享,可在线阅读,更多相关《单片机原理与应用及C51程序设计--杨加国主编-完整版答案(共34页).doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上单片机原理与应用及C51程序设计第一章第二章第三章1在MCS-51单片机中,寻址方式有几种?其中对片内RAM可以用哪几种寻址方式?对片外RAM可以用哪几种寻址方式?答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。2在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?答:片外数据存储器寻址中,用R
2、i间接寻址只能访问低端的256字节单元,而用DPTR作指针间接访问可访问整个64K字节。3在位处理中,位地址的表示方式有哪几种?答:1直接位地址(00H0FFH)。例如:20H2字节地址带位号。例如:20H.3表示20H单元的3位。3特殊功能寄存器名带位号。例如:P0.1表示P0口的1位。4位符号地址。例如:TR0是定时/计数器T0的启动位。4写出完成下列操作的指令。(1)R0的内容送到R1中。MOV A,R0MOV R1,A(2)片内RAM的20H单元内容送到片内RAM的40H单元中。MOV 40H,20H(3)片内RAM的30H单元内容送到片外RAM的50H单元中。MOV A,30HMOV
3、 R0,#50HMOVX R0,A(4)片内RAM的50H单元内容送到片外RAM的3000H单元中。MOV A,50HMOV DPTR,#3000HMOVX DPTR,A(5)片外RAM的2000H单元内容送到片内RAM的20H单元中。MOV DPTR,#2000HMOVX A,DPTRMOV 20H,A(6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。MOV DPTR,#1000HMOVX A,DPTRMOV DPTR,#4000HMOV DPTR,A(7)ROM的1000H单元内容送到片内RAM的50H单元中。MOV A,#0MOV DPTR,#1000HMOVC A,
4、A+DPTRMOV 50H,A(8)ROM的1000H单元内容送到片外RAM的1000H单元中。MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOVX DPTR,A5区分下列指令有什么不同?(1)MOV A,20H和MOV A,#20H答:前者源操作数是直接寻址,后者源操作数立即寻址。(2)MOV A,R1和MOVX A,R1答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。(3)MOV A,R1和MOV A,R1答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。(4)MOVX A,R1和MOVX A,DPTR答:前者源操作数是
5、访问片外数据存储器低256字节,后者源操作数访问片外数据存储器整个64K字节。(5)MOVX A,DPTR和MOVC A,A+DPTR答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。6设片内RAM的(20H)=40H,(40H)=10H,(10H)=50H,(P1)=0CAH。分析下列指令执行后片内RAM的20H、40H、10H单元以及P1、P2中的内容。MOV R0,#20H;R0=20HMOV A,R0 ;A=40HMOV R1,A ;R1=40HMOV A,R1 ;A=10HMOV R0,P1 ;(40H)=0CAHMOV P2,P1 ;P2=0CAHMOV 10H
6、,A ;(10H)=10HMOV 20H,10H ;(20H)=10H结果:(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH7已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。(1)MOV A,R1结果:累加器A等于70H(2)MOVX DPTR,A结果:片外RAM(2FFCH)单元等于02H(3)MOVC A,A+DPTR结果: 累加器A等于64H(4)XCHD A,R1结果:累加器A等于00H,片
7、内RAM(7FH)单元等于72H8已知:(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。(1)ADD A,R1;累加器A等于55H,CY等于1(2)SUBB A,#77H;累加器A等于00H,CY等于0(3)MUL AB;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等于0(4)DIV AB;累加器A等于1EH,B寄存器等于00H,CY、OV等于0(5)ANL 78H,#78H;片内RAM(78H)单元等于58H(6)ORL A,#0FH;累加器A等于7FH(7)X
8、RL 80H,A;片内RAM(80H)等于14H9设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。ANL A,#17H;A=03HORL 17H,A;(17H)=37HXRL A,R0;A=34HCPL A;A=CBH结果:A=CBH,(R0)=17H,(17H)=37H10写出完成下列要求的指令。(1)累加器A的低2位清零,其余位不变。ANL A,#B(2)累加器A的高2位置“1”,其余位不变。ORL A,#B(3)累加器的高4位取反,其余位不变。XRL A,#B(4)累加器第0位、2位、4位、6位取反,其余位不变。XRL A
9、,#B11说明LJMP指令与AJMP指令的区别?答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。12设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢?答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1
10、001H。13用位处理指令实现P1.4=P1.0(P1.1P1.2)/P1.3的逻辑功能。程序:MOVC,P1.1ORLC,P1.2ANLC,P1.0ORLC,/P1.3MOVP1.4,C14下列程序段汇编后,从1000H单元开始的单元内容是什么?ORG 1000HTAB: DB 12H,34HDS 3DW 5567H,87H答:(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H15试编一段程序,将片内RAM的20H、21H、22H单元
11、的内容依次存入片外RAM的20H、21H、22H中。程序:MOVR0,#20HMOVR2,#03HLOOP:MOV A,R0MOVXR0,AINCR0DJNZR2,LOOPSJMP$16编程实现将片外RAM的2000H2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。程序:MOVR0,#20HMOVDPTR,#2000HMOVR2,#31HLOOP:MOVXA,DPTRMOV R0,AMOVA,#00MOVXDPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$17编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。程序:M
12、OVDPTR,#1000HMOVR2,#100MOVR7,#00MOVR6,#00LOOP:MOVXA,DPTRADDA,R6MOVR6,AMOVA,R7ADDCA,#0MOVR7,AINCDPTRDJNZR2,LOOPSJMP$18编程实现R4R3R2,结果放于R7R6R5中。程序:ORG0100HMUL1:MOV A,R2MOV B,R3MUL AB ;R2R3,结果的低字节直接存入积的R5MOV R5,A ;结果的高字节存入R6中暂存起来MOV R6,BMUL2:MOV A,R2MOV B,R4MUL AB ;R2R4,结果的低字节与R6相加后,再存入R6中ADD A,R6MOV R6,
13、AMOV A,B ;结果的高字节加上进位位后存入R7中ADDC A,#00MOV R7,ASJMP$19编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。程序:MOVC,20H.0MOVA.0,CMOVC,20H.1MOVA.1,CMOVC,21H.2MOVA.2,CMOVC,21H.3MOVA.3,CMOVC,22H.4MOVA.4,CMOVC,22H.5MOVA.5,CMOVC,23H.6MOVA.6,CMOVC,23H.7MOVA.7,CMOVR2,A20用查表的方法实现一位十六进制数转
14、换成ASCII。程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中)C16STASC:MOVDPTR,#TABMOVA,R2MOVCA,A+DPTRMOVR2,ARETTAB:DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,391H,41H,42H,43H,44H,45H,46H21编程统计从片外RAM2000H开始的100个单元中“0”的个数放于R2中。程序:MOVDPTR,#2000HMOVR3,#100MOVR2,#00LOOP:MOVXA,DPTRJNZNEXTINCR2NEXT:INCDPTRDJNZR3,LOOPSJMP$第四章4-2
15、有哪里些数据类型是MCS-51系列单片机直接支持的?答:见P89,基本类型:字符型,整型,长整型,浮点型,特殊功能寄存器; 构造类型:数组类型,结构体类型,共用体,枚举 指针类型 空类型4-3 C51特有的数据结构类型有哪些? 答:特殊功能寄存器,位类型4-4 C51的存储类型有几种?它们分别表示的存储器区域是什么?答:见P94页:存储器类型有:data, bdata,idata,pdata,xdata4-5 C51中bit位与sbit位有什么区别? 答:bit是定义一个一般的位变量;而使用sbit定义可位寻址字节或是特殊功能寄存器的的位,定义时必指定其位地址,其存储空间为内部RAM中的位寻址
16、区20H-2FH(位地址为:00H7FH),4-6 在C51通过绝对地址来访问的存储器有几种方式?答:使用C51运行库中预定义宏,通过指针访问,使用C51扩展关键字_at_4-7 在C51中,中断函数与一般函数有什么不同? 答:见P112页:7点4-8 按指定存储器类型和数据类型,写出下列变量的说明形式答:(1)在data定义字符变量var11: char data var11 (2)在idata定义整型变量var12: char idata var12 (3)在xdata定义无符号字符数组var114: unsigned char xdata var134 (4) 在 xdata定义一个指向
17、无符号字符的指针px: unsigned char xdata* px (5)定义可寻址位变量flag: bit flag;(6)定义特殊功能寄存器变量p3: sfr p3=0xb0(7) 定义特殊功能寄存器变量SCON:sfr SCON = 0x98(8)定义16位特殊功能寄存器变量T0:sfr16 T0=0x8a (无法真正与实际相匹配)4-9 设a=3,b=4,c=5,写出下列关系表达式或逻辑表达式的结果答: (1) a+bc & b=c (False) (2) a|b+c&b-c (True) (3)!(ab) & !c| 1 (True)(4)!(a+b)+c-1&b+c/2 (Tr
18、ue)4-10 break与continue语句的区别是什么?答:见P110; 使用break语句可以跳出switch和循环体,提前结束循环而接着执行循环结构下面的语句continue语句使用在循环体结构中,用于结束本次循环,跳过该语句下面尚未执行的语句,直接进行下一否执行循环的判断。4-11用分支结构编程实现,输入”1”时显示“A”,输入”2”时显示“B”,输入”3”时显示“C”,输入”4”时显示“D”,输入”5”时结束。 答:#include #include #define uchar unsigned char#define uint unsigned intuchar I;void
19、main()scanf(“%d”,&i);swtch (i)case 1: printf(“A”),break;case 2: printf(“B”),break;case 3: printf(“C”),break;case 4: printf(“D”),break;case 5: break; default: printf(“Error!”);While(1); 4-12 输入3无符号数据,要求按由大到小的顺序输出。解:#include #include #define uchar unsigned char#define uint unsigned intuint a,b,c;void
20、main() uint max, min, med; scanf(%d%d%d, &a , &b, &c); if (ab & bc) max=a; med=b; min=c; else if (ab & bc) max=a; med=c; min=b; else if (ab & bc & aa & ba & bc & ac) max=b; med=a; min=c; else max=b; med=c; min=a; printf(%d%d%dn, max, med, min);4-13 用3种循环结构编写程序实现输出1-10的平方和解:#include #include #define
21、uchar unsigned char#define uint unsigned intuint sum=0;void main uchar i,Square; for (i=1;i=10;i+) sum = sum +i*i;printf(”sum=%d,”sum);i=1;while (i10)printf(”sum=%d,”sum);4-14 对一个5个元素的无符号字符数组按由大到小的顺序输出解:#include #include #define uchar unsigned char#define uint unsigned intuint i, n=5, j, m;uint a=21
22、0,108,65,49,72;void main()for (i=1; in; i+)for (j=0; jn-i; j+)if (ajaj+1)m=aj;aj=aj+1;aj+1=m;printf(nThe sorted integers:nn);for (i=0; in; i+)printf(%6d,ai); 4-15 用指针实现输入设备个无符号字符数据按由大到小的顺序输出。#include #include #define uchar unsigned char#define uint unsigned int uint i, n=5, j, m; uint a=210,108,65,4
23、9,72; uint *p;void main() p=a; for (i=1;in;i+) for (j=0;jn-i;j+) if (*(p+j)*(p+j+1) m=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=m; printf(nThe sorted integers:nn); for (i=0; in; i+) printf(%6d,ai); 第六章1.何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、
24、P3是准双向I/O接口。2.80C51单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数功能?答:80C51单片机内部有两个16位的可编程定时/计数器,由TH0,TL0,TH1,TL1,TMOD和TCON功能寄存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。3.定时/计数器T0有几种工作方式?各自的特点是什么?答:有四种工作方式,特点见下表:M1M0工作方式方式说明00013位定时/计数器01116位定时/计数器1028位自动重置定时/计数器113两个8位定时/计数器(只有T0有)4.定时/计数器的四种工作方式各自的
25、计数范围是多少?如果要计10个单位,不同的方式初值应为多少?答:有四种方式。方式0计数范围:18192;方式1计数范围:165536;方式2计数范围:1256;方式3计数范围:1256。如果计10个单位,方式0初值为:8192-10=8182;方式1初值为:65536-10=65526;方式2初值为:256-10=246;方式2初值为:256-10=246。5.设振荡频率为12MHz,如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方式,其初值分别设为多少?答:只能选择方式1,初值为65536-50000=15536。6.何为同步通信?何为异步通信?各自的特点是什么?答:异步通
26、信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。7.单工、半双工和全双工有什么区别?答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。8.设某异步
27、通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少?答:10000波特9.串行口数据寄存器SBUF有什么特点?答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOV SBUF,A发送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。10.MCS-51单片机串行口有几种工作方式?各自特点是什么?答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。方式1,称为8位的异步通信方式,通常用于双机通信。方式2和方式3,称为9位的
28、异步通信方式,通常用于多机通信。11.说明SM2在方式2和方式3对数据接收有何影响。答:通过SM2对方式2和方式3数据接收进行控制, SM2=1,那么只有接收的第9位为“1”才接收有效。如SM2=0,接收的第9位无论为1还是0都接收有效。12.怎样来实现利用串行口扩展并行输入/输出口?答:利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。13.什么是中断、中断允许和中断屏蔽?答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因所对应的
29、服务程序。执行完服务程序后,再返回被暂停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中断允许是允许中断请求送CPU产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。14.8051有几个中断源?中断请求如何提出?答:MCS-51单片机提供5个硬件中断源:两个外部中断源(P3.2)和(P3.3),两个定时/计数器T0和T1中断;1个串行口中断。外部中断源和的中断请求信号从外部引脚P3.2和P3.3输入;两个定时/计数器T0和T1的溢出中断TF0和TF1定时/计数器T0(或T1)溢出时提出;串行口中断由发送中断标志T1和接收中断标志R1产生。15.805
30、1的中断源中,哪些中断请求信号在中断响应时可以自动清除?哪些不能自动清除?应如何处理?答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可以自动清除,工作在电平触发方式下的两个外部中断源和串行口中断不能自动清除。工作在电平触发方式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志R1完全由软件清除。16.8051的中断优先级有几级?在形成中断嵌套时各级有何规定?答:8051的中断优先级有两级;形成中断嵌套时规定(1)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主
31、程序中的一条指令后,CPU才响应新的中断请求。(2)正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。(3)CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。17.设8051的P1中各位接发光二极管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。18.8051系统中,已知振荡频率为12MHz,用定时/计数器T0,实现从P1.0产生周期为2ms的方波。要求分别用汇编语言和C语言进行编程。解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1ms取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式1时,最大的定时时间为65.5
32、36ms,满足1ms的定时要求,方式控制字应设定为B(01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则TH0=FCH,TL0=18H。采用中断处理方式:程序如下:ORG 0000HLJMP MAINORG 000BH ;中断处理程序MOV TH0,#0FCHMOV TL0,#18HCPL P1.0RETIORG 0100H ;主程序MAIN:MOV TMOD,#01HMOV TH0,#0FCHMOV TL0,#18HSETB EASETB ET0SETB TR0SJMP $END19.8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1
33、.1产生周期为2s的方波。要求分别用汇编语言和C语言进行编程。解:从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为B(10H),初值X:X=65536-10000=55536=10000B则TH1=B=D8H,TL1=B=F0H。定时/计数器T1采用中断处理方式。汇编程序:ORG 0000HLJMP MAIN
34、ORG 001BHLJMP INTT1ORG 0100HMAIN:MOV TMOD,#10HMOV TH1,#0D8HMOV TL1,#0F0HMOV R2,#00HSETB EASETB ET1SETB TR1SJMP $INTT1:MOV TH1,#0D8HMOV TL1,#0F0HINC R2CJNE R2,#64H,NEXTCPL P1.1MOV R2,#00HNEXT:RETIEND20.8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为10ms,低电平宽度为20ms的矩形波。要求分别用汇编语言和C语言进行编程。解:本题处理方式有多种,这里采
35、用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时见上题。程序如下:ORG 0000HLJMP MAINORG 001BHLJMP INTT1ORG 0100HMAIN:MOV TMOD,#10HMOV TH1,#0D8HMOV TL1,#0F0HMOV R2,#00HSETB EASETB ET1SETB TR1SJMP $INTT1:MOV TH1,#0D8HMOV TL1,#0F0HINC R2CJNE R2,#01H,NEXTSETB P1.1SJMP EXITNEXT
36、:CJNE R2,#02H,NEXT1CLR P1.1SJMP EXITNEXT1:CJNE R2,#03H,NEXTSETB P1.1MOV R2,#00EXIT:RETIEND21.用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。解:采用在串口连接两个CD4094来实现,电路图如下: 8051 RXD TXD P1.0 DATA CLK STB DATA CLK STB程序如下;ORG 0000HLJMP MAINORG 0100HMAIN:MOV SCON,#00HMOV R4,#10HMOV R3,#00HMO
37、V R2,#01HCLR P1.0START:MOV A,R3MOV SBUF,ALOOP:JNB TI,LOOPMOV A,R2LOOP1:JNB TI,LOOP1SETB P1.0ACALL DELAYCLR TICLR CMOV A,R2RLC AMOV R2,AMOV A,R3RLC AMOV R3,ACLR P1.0DJNZ R4,START1SJMP MAINDELAY:MOV R7,#05HLOOP2:MOV R6,#0FFHLOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP2RETEND22.用汇编语言编程设计一个8051双机通信系统,将A机的片内RAM中30H3F
38、H的数据块通过串行口传送到B机的片内RAM的40H4FH中,并画出电路图。解:线路连接如图所示。分析:甲、乙两机都选择方式1即8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时/计数器T1初始化。设SMOD=0,甲、乙两机的振荡频率为12MHz,由于波特率为1200bps。定时/计数器T1选择为方式2,则初值如下。初值=256 - fosc2SMOD /(12波特率32)=256-/(12120032)
39、230=E6H根据要求,定时/计数器T1的方式控制字为20H。甲机的发送程序:TSTART:MOV TMOD,#2H MOV TL1,#0E6HMOV TH1,#0E6HMOV PCON,#00HMOV SCON,#40HMOV R0,#30HMOV R7,#10HSETB TR1LOOP:MOV A,R0MOV C,PMOV ACC.7,C MOV SBUF,AWAIT:JNB TI,WAIT CLR TI INC R0 DJNZ R7,LOOP RET乙机的接收程序:RSTART:MOV TMOD,#2H MOV TL1,#0E6H MOV TH1,#0E6HMOV PCON,#00HMOV R0,#40H MOV R7,#10HSETB TR1WAIT:JNB RI,WAITMOV A,SBUFMOV C,PJC ERROR ANL A,#7FH MOV R0,AINC R0DJNZ R7,LOOPRET专心-专注-专业