单片机原理编程题-.pdf

上传人:索**** 文档编号:76247845 上传时间:2023-03-08 格式:PDF 页数:29 大小:292.72KB
返回 下载 相关 举报
单片机原理编程题-.pdf_第1页
第1页 / 共29页
单片机原理编程题-.pdf_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《单片机原理编程题-.pdf》由会员分享,可在线阅读,更多相关《单片机原理编程题-.pdf(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 一编程题 (每小题 8 分,共 16 分)1.设在内 RAM 40H开始的存储区有若干个字符和数字,已知最后一个为字符“$“(并且只有一个,试统计这些字符数字的个数,结果存入30H单元中。参考程序:ORG 0000H START:MOV R1,#40H;R1 作为地址指针CLR A;A 作为计数器LOOP:CJNE R1,#24H,NEXT;与“$”号比较,不等转移SJMP NEXT1;找到“$“结束循环NEXT:INC A;计数器加 1 INC R1 ;指针加 1 SJMP LOOP;循环NEXT1:INC A;再加入”$”这个字符MOV 30H,A;存结果END 2.试编一程序,分别统

2、计在内部RAM 的 30H50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和 52H单元中。参考程序:ORG 0000H MOV 51H,#0H MOV 52#,#0H MOV R1,#30H MOV R0,#20H MOV A,R1 INC R1 ANL A,#01H JZ LOOP1 INC 51H SJMP LOOP2 LOOP1:INC 52H LOOP2:DJNZ R0,LOOP3 RET 3用 8XX51的 P1口接 8 个 LED发光二极管,由INT0 接一消抖按键开关,开始 P1.0 的 LED亮,以后由 INT0 按键每中断一次,下一个LED亮,顺序

3、下移,且每次只一个LED亮,周而复始。请编制程序。参考程序:ORG 0000H 2 AJMP MAIN ORG 0003H RL A;中断服务MOV P1,A RETI MAIN:MOV A,#0FFH MOV P1,A;第一灯亮SETB EA SETB EX0;允许 INT0 外部中断SETB IT0;中断触发方式为下降沿触发SJMP$;等待中断4.设有 100 个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV DPTR,#2000H MO

4、V R1,#100 L4:MOVX A,DPTR INC DPTR CJNE A,#0,L1 INC 32H SJMP L2 L2:JC L3 INC 30H SJMP L2 L3:INC 31H L2:DJNZ R1,L4 SJMP$5.编程将内部数据存储器20H24H单元压缩的 BCD码转换成 ASC 存放在于25H开始的单元。参考程序:注意压缩的BCD码为一个字节占两位BCD 码。ORG 0000H MOV R7,#05H;R7为转换字节数MOV R0,#20H;R0为源操作数地址MOV R1,#25H;R1为目的操作数地址NE:MOV A,R0 3 ANL A,#0FH;先取低位 BC

5、D 码ADD A,#30H;将 BCD码转换成 ASC 码MOV R1,A INC R1 MOV A,R0 ANL A,#0F0H;取高位 BCD码SWAP A;半字节交换ADD A,#30H;将高位 BCD 码转换成 ASC 码MOV R1,A INC R0 INC R1 DJNZ R7,NE SJMP$END 编程题,另外加上第4 章课件上的例子。三、程序解释(每小题5 分,共 10 分)1ORG 0200H MOV DPTR,#1000H MOV R0,#20H LOOP:MOVX A,DPTR MOV R0,A INC DPTR INC R0 CJNE R0,#71H,LOOP SJM

6、P$程序功能:把片外数据存储器1000H1050H 中的内容传送到片内数据存储器20H70H中。2ORG 0200H MOV A,R0 ANL A,#0FH MOV DPTR,#TAB MOVC A,A+DPTR MOV R0,A SJMP$4 TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;09的 ASC码DB 41H,42H,43H,44H,45H,46H;AF 的 ASC 码程序功能:利用查表的方法实现RO中的十六进制数转换为ASC 码对每小题程序中划线的指令含义(或指令作用)进行解释,并说明程序的作用。*1.程序解释ORG 100H MOV

7、 A,R0;R0的内容送A ANL A,#0FH MOV R1,A MOV A,R0 SWAP A;A 的内容高低4 位交换ANL A,#0FH MOV R2,A SJMP$;等待END 该程序的作用是:将原R0中数据按照高低4 位分成两个字节,低位字节保存在R1 中,高位字节保存到R2 中。2.程序解释ORG 30H MOV R0,#data1;data1 送 R0 MOV R1,#data2 MOV R2,#2 CLR C LOOP:MOV A,R0 SUBB A,R1;(A)-(C)-(R1)A MOV R0,A INC R0 INC R1 DJNZ R2,LOOP;(R2)-1 不等于

8、零,跳LOOP处SJMP$END 该程序的作用是:将data1 中的双字节数据减去data2 中的双字节数据,结果保存到 data1 中3.程序解释ORG 30H VARDATA 30H FUNC DATA 31H MOV A,VAR;30 单元的内容送A JZ DONE;A 为零转移5 JNB ACC.7,POSI;A 的最高位为0(正数)转移MOV A,#0FFH;提示:0FFH表示-1 SJMP DONE POSI:MOV A,#01H DONE:MOV FUNC,A SJMP$END 该程序的作用是:判断30H 单元中的内容,结果放在31H 单元中。大于0 放 1,小于 0 放-1,等

9、于零放0。4.程序解释ORG 100H MOV A,R3 RL A;A 左循环一位(即乘2)MOV DPTR,#BRTAB;绝对转移地址表起始地址送DPTR JMP A+DPTR;(PC)=(A)+(DPTR)BRTAB:AJMP ROUT000 AJMP ROUT001 AJMP ROUT002AJMP ROUT127 END 该程序的作用是:本程序完成128 分支转移操作,根据R3 中的数值转移到相应的 128 个分支程序中。5.程序解释ORG 0030H MOV R0,#22H;立即数 22H 送 R0 MOV R0,#00H INC R0;R0中的内容加1 MOV R0,#01H IN

10、C R0 MOV R0,#02H;02H 送 24H 单元SJMP$END 该程序的作用是:向单片机内部RAM 的 22H,23H,24H 单元分别送数据 00,01,02。6.程序解释ORG 0030H MOV A,20H MOV B,21H DIV AB;A 除以 B 6 MOV 31H,A;商送 30H 单元IMOV 31H,B;余数送 31H 单元SJMP$END 该程序的作用是:将20H 单元中有一个二进制数除以21H 单元中二进制数,商保存到30H单元,余数保存到31H。7.程序解释CHENGJI DATA 1000H GRADA DATA 20H GRADB DATA 21H M

11、OV GRADA,#00H MOV GRADB,#00H MOV R2,#100 MOV DPTR,#CHENGJI;1000H 送 DPTR LOOP:MOVX A,DPTR CJNE A,#60,LOOP1 LOOP1:JNC NEXT1 INC GRADB;21H 单元的内容加1 SJMP NEXT NEXT1:INC GRADA NEXT:INC DPTR DJNZ R2,LOOP;(R2)-1R2 不为零,转移SJMP$END 该程序的作用是本程序完成对100 个数(如100 个学生成绩)的过滤统计,成绩在60 以上的学生统计到GRADA,60 的学生统计到GRADB。8.程序解释L

12、EN DATA 20H SUM DATA 21H BLOCK DATA 22H CLRA;A 清 0 MOV R2,LEN MOV R1,#BLOCK LOOP:ADD A,R1;(A)+(R1)A INC R1 CHECK:DJNZ R2,LOOP;LEN个单元未加完,继续MOV SUM,A SJMP$END 该程序的作用是:完成BLOCK单元开始的LEN单元中数据个数的累加,累加结果保存到 SUM 单元中。9.程序解释XX DATA 40H 7 YY DATA 41H MOV A,XX JZ DONE MOV R0,#0FFH;提示:0FFH表示-1 JNB ACC.7,NEG;若 A 0

13、,则转向 NEG MOV R0,#01H;01 送 R0 NEG:MOV A,R0 DONE:MOV YY,A;(A)送 41H 单元SJMP$END 该程序的作用是:判断40H 单元中的内容,结果放在41H 单元中。大于0 放 1,小于 0 放-1,等于 0 放 0。10.程序解释ONE DATA 30H TWO DATA 31H;TWO 地址定义为31H MAX DATA 32H CLR C;C清零MOV A,ONE SUBB A,TWO;(A)-(31H)结果送A JNC XMAX YMAX:MOV A,TWO SJMP DONE XMAX:MOV A,ONE DONE:MOV MAX,

14、A 该程序的作用是:本程序完成ONE和 TWO 的两个单元中的数的比较,大数存入MAX 单元中。11.程序解释BLOCK1 DATA 20H BLOCK2 DATA 40H MOV R0,#BLOCK1 MOV R1,#BLOCK2 MOV R2,#03 CLR C LOOP:MOV A,R0;被加数送A ADDC A,R1;带进位加法MOV R0,A;和送(R0)INC R0 INC R1 DJNZ R2,LOOP1 SJMP$END 8 该程序的作用是:内部RAM 中 BLOCK1(20H)开始的三字节数与BLOCK2(40H)开始的两个三字节数相加,和数存放到BLOCK1开始的单元。12

15、.程序解释SHIFT:MOV DPTR,#TABJ MOV A,R2 RL A;A 乘 2 ADD A,R2 JMP A+DPTR;跳转到(A)+(DPTR)PC TABJ:LJMP PRG0;跳转到PRG0 LJMP PRG1 LJMP PRGN 该程序的作用是:根据内部RAM 中 R2数据转向不同的子程序,R2=0转 PRG0,R2=1转 PRG1,R2=N转 PRGN 13.程序解释START:CLR A MOV R2,#10 MOV R1,#21H;21H 送 R1 NEXT:ADD A,R1;(A)+(R1)A INC R1 DJNZ R2,NEXT;未加完,跳转MOV 22H,A

16、SJMP$END 该程序的作用是:完成21H 单元开始的10 个数据块的累加,结果保存到22H 单元。14.程序解释LEN DATA 20H MAX DATA 21H ADDR DATA 30H MOV MAX,#00H MOV R0,#ADDR LOOP:MOV A,R0 CJNE A,MAX,NEXT1;(A)与(MAX)比较,不等去NEXT NEXT1:JC NEXT;C=1 去 NEXT MOV MAX,A NEXT:INC R0;R0 内容加 1 DJNZ LEN,LOOP SJMP$END 该程序的作用是:内部 RAM 中 ADDR(30H)开始的 x 个数据的比较,将最大的数字送

17、MAX单元。x 由 LEN(20H)单元给出。15.程序解释9 MOV A,R0 ANL A,#0FH;0FH 与 A 相与,结果送A MOV DPTR,#ASCTAB MOVC A,A+DPTR;查表MOV R0,A;查表结果存入R0 SJMP$ASCTAB:DB 0,1,2,3,4DB 5,6,7,8,9DB A,B,C,D,E,FEND 该程序的作用是:将R0 中低 4 位的 0F 的十六进制数据转换成ASCTAB 中的编码存放到 R0中。16.程序解释ORG 100H MERG:MOVX A,R0;读片外 RAM 第一字节ANL A,#0FH SWAP A;高低 4 位相互交换MOV

18、B,A INC R0 MOVX A,R0 ANL A,#0FH ORL A,B;A 或 B,结果送 A DEC R0 MOVX R0,A SJMP$END 该程序的作用是:将R0 指向的两个字节的低4 位和并为一个字节,保存到原R0 指向的存储单元。17.程序解释START:MOV DPTR,#DTATAB MOV A,R4;(R4)A ADD A,DPL;(DPL)+(A)A MOV DPL,A CLR A;清 A ADDC A,DPH MOV DPH,A CLR A MOVC A,A+DPTR MOV R5,A RET DTATAB:DB;元素表格,高字节在前DB END 10 该程序的作

19、用是:根据R4 中的内容(元素序号)在DTATAB表格中查表,将查表得到的数据存入 R5中。18.程序解释START:MOV A,R0 ACALL SQR;调用子程SQR MOV R2,A MOV A,R1 ACALL SQR ADD A,R2;(R2)+(A)A MOV R2,A SJMP$SQR:ADD A,#01H MOVC A,A+PC;查平方表RET SQRTAB:DB 0,1,4,9,16;平方表DB 25,36,49,64,81 END 该程序的作用是:将 R0和 R1中的两个个位数进行平方元算,然后相加,和存入 R2中。19.程序解释MOV R2,#0AH MOV R0,#50

20、H CLR A LOOP:MOV R0,A;(A)(R0)INC R0 DJNZ R2,LOOP;(R2)-1不等于 0,跳转RET;子程序返回END 该程序的作用是:将 50H59H 单元置 0 20.程序解释CONT:MOV R0,#10;10 送 R0 MOV 31H,#00H MOV R1,#01H CLOP:MOV A,R1 CLR C RLC A;乘 2 ADD A,31H;(A)+(31H)结果送A MOV 31H,A INC R1 DJNZ R0,CLOP RET END 11 该程序的作用是:将 110 十个数乘2 后再累加,结果送31H 单元。21.程序解释DLAY:MOV

21、 R7,#02H;02H 送 R7 DL:MOV R6,#0FFH DL1:DJNZ R6,DL1;(R6)-1 不为零转移。DJNZ R7,DL RET END;程序结束伪指令该程序的作用是:利用R6,R7实现双循环延时子程序22.程序解释MATH DATA 1000H PASS DATA 20H NOPASS DATA 21H MOV PASS,#00H MOV NOPASS,#00H MOV R2,#0C8H MOV DPTR,#MATH LOOP:MOVX A,DPTR;片外单元(DPTR)A CJNE A,#60,LOOP1;(A)不等于60 转移LOOP1:JNC NEXT1 NE

22、XT:INC NOPASS SJMP NEXT2 NEXT1:INC PASS;PASS 单元内容加1 NEXT2:INC DPTR DJNZ R2,LOOP RET END 该程序的作用是:完成1000H 开始的200(C8H)个数的过滤统计,在60 及以上的统计到 PASS,60 的到 NOPASS。23.程序解释CLEAN:MOV DPTR,#1000H;设置数据区首地址MOV R2,#51H CLR A CLOOP:MOVX DPTR,A;0(DPTR)INC DPTR DJNZ R2,CLOOP;R2-1 不为零转移RET END 该程序的作用是:将外部RAM1000H1050H 单

23、元的内容清零。24.程序解释DMOV:MOV DPTR,#2000H 12 MOV R2,#00H DLOOP:MOVX A,DPTR;设置源数据区首地址MOV DPH,#30H;置目的数据区高8 位地址MOVX DPTR,A MOV DPH,#20H INC DPTR;指向下一个数据单元DJNZ R2,DLOOP END 该程序的作用是:将2000H20FFH的数据块传送到3000H30FFH单元25.程序解释LOK1:MOV 21H,0 MOV R2,#08H;置统计次数MOV A,20H LOOP:RLC A;A 的内容带进位作循环JNC LP1 INC 21H LP1:DJNZ R2,

24、LOOP;次数未完继续RET 该程序的作用是:求20H 单元数据中”1”的个数,并将统计结果存入21H。26.程序解释SUM DATA 31H BLOCK DATA 33H CLR A CLR C MOV SUM,A MOV SUM+1,A MOV R2,#10 MOV R1,#BLOCK;33H 送 R1 LOOP:MOV A,SUM ADD A,R1;(A)+(R1)A MOV SUM,A MOV A,SUM+1 ADDC A,0;加进位位到高字节MOV SUM+1,A INC R1 DJNZ R2,LOOP SJMP$END 该程序的作用是:完成BLOCK 开始的10 个字节数据的累加,

25、结果(双字节)保存到(SUM+1)(SUM)。13 27.程序解释ORG 0000H SJMP MAIN;跳转到MAIN ORG 0003H .ORG 0030H Main:;主程序SUBINT0:RETI;INT0 中断返回SUB_T0:SUB_INT1:SUB_T1:SUB_UART:该程序的作用是:8031/8051 系统程序框架,包括主程序及全部中断服务程序框架。28.程序解释TB:MOV A,R2 ADD A,R2 MOV R3,A ADD A,#6 MOVC A,A+PC;查第一字节XCH A,R3;交换 A,R3 内容,保存在R3 ADD A,#3 MOVC A,A+PC MOV

26、 R4,A RET TAB:DW 1520,3721,DW 该程序的作用是:根据 R2内容为索引,在 TAB检索数据,检索结果存放到R3R4中。(TAB中内容为双字节数据)29.程序解释DATLEN DATA 21H SEACH:MOV R0,#30H;30H 送 R0 MOV 20H,#0FFH SLOP:MOV A,R0 CJNE A,20H,NEXT;A 与 20H 单元内容比较NEXT:JNCSLP1;(A)大,跳转MOV 20H,A SLP1:INC R0 DJNZ DATLEN,SLOP RET END 该程序的作用是:将30H 开始的 DATLEN个数据中最小的数搜出,保存到20

27、H 单元。30.程序解释14 ORG 100H DATAX DATA 10H DATAY DATA 11H CLR C;清 C MOV A,DATAX RLC A;A 左循环JNC POSI CLR A SJMP DONE POSI:MOV A,#01H DONE:MOV DATAY,A;(A)送 DATAY SJMP$END 该程序的作用是:判断 10H 单元的内容,结果送11 单元,大于等于零时送1,小于零时送零。31.程序解释ORG 100H MOV A,R0 CJNE A,#3AH,NEXT1;(A)与 3AH 比较JNC ERR CJNE A,#30H JC ERR;有借位,跳转CL

28、R C SUBB A,#30H;转换 ASCII码为十进制数字SJMP DONE ERR:MOV A,#0FFH DONE:MOV R0,A SJMP$END 该程序的作用是:完成将R0 中十进制数字09 的 ASCII码值转换为十进制值,结果存放到 R0。32.程序解释CONP:MOVDPTR,#8000H;置外 RAM 数据区首地址MOV R0,#20H CLOP:MOV A,R0 JB ACC.0,LP1;判奇偶,奇数,转判下一个MOVX DPTR,A INC DPTR LP1:INC R0 CJNE R0,#30H,CLOP;判循环,未完继续RET 该程序的作用是:完成对 202FH单

29、元中的数据判断,如果数据为偶数,将被写入外部RAM中 8000H 开始的存储单元。15 五、综合设计题()1、设计一串行通信接收程序,将接收的16 个数据存入片内50H 5FH中,串行口为方式 1,波特率为 1200bps,SMOD=0,fosc 6MHz。参考答案T1 工作方式 2:120010225632225632260m odxTxs,x243f3h MOV TMOD,#00100000B MOV SCON,#01010000B MOV PCON,#00H MOV TH1,#0F3H MOV TL1,#0F3H CLR ES MOV R7,#16 MOV R0,#50H SETB TR

30、1 WAIT:JNB RI,WAIT CLR RI MOV R0,SBUF INC R0 DJNZ R7,WAIT 2.试编程要求用 T1定时器控制 P1.7 引脚输出周期为40ms、占空比为 50的矩形脉冲。要求主程序入口地址0050H 及中断服务子程序入口地址2000H。fosc=6MHz(15)方式 1:(216x)220000,xdbf0h ORG 000H LJMP MAIN ORG 001BH LJMP T1_INT ORG 0050H MAIN:MOV TMOD,#00010000B MOV TH1,#0D8H MOV TL1,#0F0H SETB EA SETB ET1 SET

31、B TR1 SJMP$16 ORG 2000H T1_INT:CPL P1.7 MOV TH1,#0D8H MOV TL1,#0F0H RETI 3、试编制程序,使 T0 每计满 500 个外部输入脉冲后,由T1定时,在 P1.0 输出一个脉宽 10ms的正脉冲(假设在10ms内外部输入脉冲少于500 个),fosc 12MHz。(15)计算过程如下:(216-x1)*1us=10000us x1=b8f0h 216-x0=500us x0=fe0ch ORG000HLJMPMAINORG00BHLJMPT0_INTORG01BHLJMPT1_INTORG100HMAIN:MOVSP,#60H

32、MOVTMOD,#00010101BMOVIE,#10001010BMOVTH0,0FEHMOVTL0,0CHCLRP1.0 SETBTR0 SJMP$T0_INT:MOVTH0,0FEHMOVTL0,0CHMOVTH1,#0B8HMOVTL1,#0F0HSETBP1.0 SETBTR1 RETIT1_INT:CLRP1.0 CLRTR1 RETI4.如下图示,甲乙两机进行通信,要求甲机能读取8 个按键的状态(0 或 1)并将读到的状态发送给乙机,乙机接收到后将数据通过8个发光二极管显示,要求17 编写甲乙两机的通信程序。(20)P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7

33、RXDTXDTXDRXD P1.2P1.4P1.5P1.6P1.7P1.1P1.0P1.389C5189C51K1K2K3K410KK5K6K7K8300T1 工作在方式 2:波特率Txs)256(322mod12)256(322modxfoscs1200 T1 初值:HFx3243甲机:MAIN:MOV TMOD,#00100000B MOV SCON,#01000000B MOV PCON,#00H MOV TH1,#0F3H MOV TL1,#0F3H CLR ES SETB TR1 MOV P1,#0FFH LOOP:MOV A,P1 MOV SBUF,A JNB TI,$CLR TI

34、 SJMP LOOP 乙机:ORG 000H LJMP MAIN ORG 0023H LJMP I_ES ORG 050H MAIN:MOV TMOD,#00100000B MOV SCON,#01010000B MOV PCON,#00H MOV TH1,#0F3H 18 MOV TL1,#0F3H CLR ES SETB TR1 SJMP$I_ES:MOV A,SBUF CLR RI MOV P1,A RETI 5.使用定时/计数器 0 以工作方式 2 实现定时,在 P1.0 输出周期为 200s 的连续方波。已知晶振频率fosc=6MH。求计数初值,方式控制字,编制相应程序.(中断方式)

35、TMOD 格式:解:(2 分)计数初值 X=256-50=206=CEH(2 分)TMOD=02H(6 分)主程序:MOV TMOD#02H MOV TH0,#0CEH MOV TL0,#0CEH SETB EASETB ET0LOOP:SETB TR0HERE:S JMP$中断服务程序:CPL P1.0RETI 6、试编写程序,查找在内部RAM 的 30H 60H单元中出现“0FFH”这一数据的次数。并将查找到的结果存入61H单元。答:START:MOV 61H,#0MOV R0,#30HMOV R2,#30HLOOP:MOV A,R0CJNE A,#0FFH,NEXTINC 61HNEXT

36、:INC R0DJNZ R2,LOOPRET7、编写程序,将外部数据存储器中的4000H 40FFH单元全部置“1”。ORG 0000H19 MAIN:MOV A,#0FFH;送预置数给 AMOV R0,#0FFH;设置循环次数MOV DPTR,#4000H;设置数据指针的初值LOOP:MOVX DPTR,A;当前单元清零INC DPTR;指向下一个单元DJNZ R0,LOOP;是否结束END8.、试编写程序,查找在内部 RAM 的 40H 60H单元中是否有 0FFH这一数据。若有,则将 51H单元置为“00H”;若未找到,则将 51H单元置为“01H”。(5分)START:MOV R0,#

37、40HMOV R2,#20HLOOP:MOV A,R0CJNE A,#0FFH,NEXTMOV 51H,#00HLJMP EXITNEXT:INC R0DJNZ R2,LOOPMOV 51H,#01HEXIT:RET9、编写一段程序,功能要求为:当P1.0 引脚的电平正跳变时,对P1.1 的输入脉冲进行计数;当P1.2 引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存 R1,低位存 R0)。(15 分)答:将 P1.1 的输入脉冲接入 T0,即使用 T0计数器完成对 P1.1 口的脉冲计数。编写程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMA

38、IN:JNB P1.0,MAINMOV TMOD,#05H;定时器/计数器 T0 为计数方式 1SETB TR0;启动 T0,开始计数SETB ET0;允许 T0 中断SETB EA;CPU 开中断WAIT:JB P1.2,WAITCLR EACLR TR0MOV R1,TH020 MOV R0,TL0AJMP$IT0P:INC R2;在电平负跳变前,如果计数器溢出,则进位存入R2RETI11.编程将片内 RAM20H 2FH 单元开始的 16 个数传送到片外 RAM 3000H 300FH 开始的单元中。(12 分)MOV R0,#20HMOV DPTR,#3000HMOV R7,#10H(

39、6 分)LOOP:MOV A,R0 MOVX DPTR,AINC R0INC DPTRDJNZ R7,LOOPNOPEND(6 分)12.将存放在单片机片内数据存储器30H,31H,32H三个单元中不同的数据按从小到大的顺序排序,并将结果存放在片内RAM 的 30H 32H中。(10分)MOV SP,#52HMOV A,30HCLR C SUBB A,31HJC LP1MOV A,31HXCH A,30HMOV 31H,A(3 分)LP1:MOV A,30HCLR CSUBB A,32HJC LP2MOV A,32HXCH A,30HXCH A,31HMOV 32H,ASJMP LP3(3 分

40、)LP2:MOV A,31HCLR CSUBB A,32H21 JC LP3MOV A,31HXCH A,32HMOV 31H,ASJMP LP3LP3:NOP(4分)SJMP$13、使用定时器中断方式编程实现从P1.0 引脚上输出一个周期为1s 的方波。(系统时钟为 6MHz)解:使用定时器 T0产生 50ms的定时,然后在计数 10次,从而 500ms的定时。(5分)ORG 0000HAJMP MAINORG 000BHLJMP TMR0_INTORG 0030HMAIN:MOV TMOD,#01HMOV TH0,#9EHMOV TL0,#58HMOV R7,#10SETB ET0SETB

41、 EASETB TR0SJMP$TMR0_INT:CLR TR0DJNZ R7,LOOPMOV R7,#10 CPL P1.0LOOP:MOV TH0,#9EHMOV TL0,#58HSETB TR0RETI(10 分)14.已知一 MCS 51 单片机系统的片内RAM 20H单元存放了一个8 位无符号数7AH,片外扩展 RAM 的 8000H存放了一个 8 位无符号数 86H,试编程完成以上两个单元中的无符号数相加,并将和值送往片外RAM 的 01H、00H单元中,同时将所编写程序运行完成后的数据和状态添入下表中给出的PSW的有关位以及寄存器 A、DPTR 和 RAM 单元中。22 CY A

42、 DPTR 片外 01H 片外 00H 片外 8000H 参考答案CY A DPTR 片外 01H 片外 00H 片外 8000H 0 01H 8000H 0lH 00H 86H MOV DPTR,#8000H;加数单元地址送DPTR MOVX A,DPTR;取加数之一ADD A,20H;两数相加MOV R0,#00H;和值的低位送片外00H单元MOVx R0,A INC R0 CLR A;计算和值的高位ADDC A,#00H MOVXR0,A;高位送片外 01H单元RET 编程要考虑将进位位的值作为结果的一部分取出来。采用其他编程方式也可以,但结果是不会改变的,和值100H 六、简答题1请将

43、片外 RAM 20H 25H单元清零MoV R0,#20H MOV R7,#06H CLR A LOOP:MOVX R0,A INC R0 DJNZ R7,LOOP 2请将 ROM 3000H 单元内容送 R7 MOV DPTR,#3000H CLR A MOVC A,A+DPTR MOV R7,A 1、编制中断初始化程序,外部中断0(边沿触发)、定时器0 开中断(中断允许);外部中断 1、定时器 1 关中断(不允许中断)。(5 分)解:SETB EX023 SETB IT0SETB ET0CLR ET1CLR EX1SETB EA 2、编写出外部中断1 为跳沿触发的中断初始化程序。(5 分)

44、2、答:SETB IT1SETB EX1SETB EA3、编程将片内 RAM 40H 单元开始的 16 个数传送到片外 RAM 2000H 开始的单元中。(5 分)解:MOV R0,#40HMOV R7,#16MOV DPTR,#2000HLOOP:MOV A,R0MOVX DPTR,AINC R0INC DPTRDJNZ R7,LOOPNOPEND4、下列列出几个程序段,请分别求出执行后的结果。(15,每小题 5 分)(1)、执行下列程序:MOV 21H,#0A7H MOV 22H,#10H MOV R0,#22H MOV 31H,21H ANL 31H,#2FH MOV A,R0 SWAP

45、 A 结果:(31H)_ ,A=_。*参考答案1、27h,01h*24 2、执行下列程序:MOV R0,#60H MOV A,#0AH RR A MOV R0,A ADD A,#0FH DEC R0 MOV R0,A 结果:(60H)_,(5FH)_。*参考答案2、05h,14h 3、执行下列程序:MOV A,#83H MOV R0,#47H MOV 47H,#34H ANL A,#47H ORL 47H,A XRL A,R0 结果:R0 _,A_。*参考答案3、47h,34h*5、参数计算题(15 分)已知一单片机系统的外接晶体振荡器的振荡频率为11059MHz,请计算该单片机系统的拍节 P

46、、状态 S、机器周期所对应的时间是多少?指令周期中的单字节双周期指令的执行时间是多少?P1f(1 11059106)00910-6s 90ns(4 分)S2P290ns180ns(4 分)机器周期 12P1290ns108s(4 分)双指令周期 2机器周期 216s(3 分)6、阅读程序,指出程序功能,并给循环体内指令加上注释。(10 分)MOV R0,#44H 25 MOV R3,#04H MOV R1,#00H MOV R2,#00H LOOP:MOVX A,R0 ;ADDC A,R2;MOV R2,A;JNC LOOP1;INC R1;LOOP1:DEC R0;DJNZ R3,LOOP;

47、参考答案:LOOP:MOVX A,R0;取一个加数ADDC A,R2;单字节数相加MOV R2,A;和低位送 R2 JNC LOOP1;无进位转移INC R1;有进位高位加 1 LOOP1:DEC R0;地址减量DJNZ R3,LOOP;次数减 1,不为 0转移功能:4 个字节数相加,结果低字节送R2,高字节送 R1。7.执行下列程序段后,(P1)=()。(2 分)MOV P1,#5DHCPL P1.1CLR P1.6SETB P1.7*参考答案(P1)=(9FH)。(2 分)8已知程序执行前有(A)=02H,SP=52H,(51H)=80H,(52H)=00H。下述程序执行后:POP DPL

48、POP DPHRL AMOV B,AMOVC A,A+DPTRPUSH A26 MOV A,BINC AMOVC A,A+DPTRPUSH ARETORG 8000HDB 10H,80H,30H,50H,30H,50H请问:A=(),SP=(),(51H)=(),(52H)=(),PC=()。*参考答案答:A=(50H),SP=(50H),(51H)=(30H),(52H)=(50H),PC=(5030H)。9、如果采用晶振的频率为6MHz,定时器/计数器工作方式0、1、2 下,其最大的定时时间为多少?答:因为机器周期)(210612126sfTOSCcy,所以定时器/计数器工作方式 0 下,

49、其最大定时时间为)(690.41022261313msTTCMAX;同样可以求得方式1 下的最大定时时间为)(131.0721022266161msTTCMAX;方式 2 下的最大定时时间为512s。PPT 程序1.试编写程序,查找在内部RAM 的 20H40H 单元中出现“00H”这一数据的次数,并将查找到的结果存入 41H 单元ORG 0000H LJMP START ORG 0040H START:MOV 41H,#0 MOV R1,#20H MOV R2,#33 LOOP0:MOV A,R1 CJNE A,#0,LOOP1 INC 41H LOOP1:INC R1 DJNZ R2,LO

50、OP0 END 27 3.在数据块大于20 的数据块长度中,求出数据块中大于64H 的数的个数。P1 口做输出口,接八只发光二极管,用发光二极管显示大于64H的个数设计出程序流程图,并编写程序。发挥部分:发光二极管闪烁显示大于64H 的个数。开设置取计 数 个是否大于N Y 延时数据块长度是否等计 数 个 数 送Y 熄 灭 发 光延N ORG0000H LJMPMAIN ORG0030H MAIN:MOVSP,#60H CLRA MOVR2,A;计数寄存器清0 MOVP1,#0FFH MOVR3,#20;计数块长度为20 START:MOV DPTR,#DATA1;设置数据块起始地址指针LOO

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁