单片机试题库(编程题)_第1页
单片机试题库(编程题)_第2页
单片机试题库(编程题)_第3页
单片机试题库(编程题)_第4页
单片机试题库(编程题)_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编程题2编一个子程序,将寄存器R0中的内容10(积256)3编程将片内RAM30H单元开始的15B的数据送到片外RAM3000H开始的单元中去4用查表法编一子程序,将40H单元中的BCD码转换成ASCII码4片内RAM50H、51H单元中有一个10B的二进制数,高位在前,低位在后,请编程将其求补,存回原单元中去。5片内RAM30H开始的单元中有10B的二进制数,请编程求它们的和。6R1中存有一BCD码,请编程将它转换成ASKII码,存入外RAM1000H单元中去。7编一个程序,将累加器中的一个字符从串行接口发送出去。8片外RAM2000H开始的单元中有5B的数据,编程将它们传送到片内RAM20H开始的单元中去。9用查表法编一子程序,将R3中的BCD码转换成ASKII码。10片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。11编程将片外RAM3000H开始的20B的数据传送到片内RAM30H开始的单元中。12编程将R1、R2中的16位二进制数增1后送回原单元。13编程将片内RAM40H开始的单元存放的10B的二进制数传送到片外RAM4000H开始的单元中去。14编一子程序,从串行接口接受一个数据。15编写将30H和31H单元中2B二进制数乘2的子程序。16片外RAM2000H单元中有一BCD码,编程将其转换成ASKII码。17试编制单字节BCD码数的减法程序。18利用调子程序的方法,进行两个4B无符号数相加。请编主程序及子程序。19若图112中数据为无符号数,求数据中最大值送A。编程并注释。图112片外RAM中的数据块片外RAM0000H0001H20若图112中数据块是有符号数,求正数个数。编程并注释。数据块长度D1D2D321若图112中数据块为无符号数,求其累加和。编程并注释。22已知20H单元有一位十进制数,通过查表找出与其对应的共阴极七段码,并存于30H单元。若20H的数大于或等于0AH,将FF装入30H单元。在ROM中存储的共阴极七段码表如下表格地址七段码表格地址七段码20003F20010620025B20034F20046620056D20067D20070720087F20096F23将片外RAM空间2000H200AH中的数据的高四位变零,低四位不变,原址存放。24将累加器A和状态寄存器内容压入堆栈保护,然后再恢复A和状态寄存器内容。25求片外RAM3000H、3001H单元数据的平均值,并传送给3002H单元。26分别写出实现如下功能的程序段。(1)将片外RAM30H的中间4位,31H的低2位,32H得高2位按序拼成一个新字节,存入33H单元。(2)将DPTR中间8位取反,其余位不变。27写出达到下列要求的指令(不能改变各未涉及位的内容)。(1)使A的最低位置1。(2)清除A得高4位。(3)使ACC2和ACC3置1。(4)清除A的中间4位。28有一段程序如下地址码机器码标号汇编助记符200AHE8CHARMOVA,R02010H80RELSJMPCHAR(1)计算指令“SJMPCHAR”的相对便移量REL的值(十六进制机器码形式)。(2)支出相对偏移量值REL所在的地址单元。29编写程序将片内RAM30H中的2位十进制数转换为ASCII码,并存入31H和32H中。30编写程序段,用三种方法实现累加器A与寄存器B的内容转交换。31将如图113所示片外RAM中两个无符号数按从小到大顺序排列,编程并注释。0000HD10001HD2图113片外RAM数据32编程将一个按高低字节存放在21H、20H中的双字节数乘2后,在按高低次序将结果存放到22H、21H、20H单元。33编程将存放在片外RAM1000H、1001H中的两个数,按大小次序存放到片内RAM的30H、31H单元。34多字节减法编程,一直有两个多字节数,从高到低依次存放如下X113H12H11H10HX223H22H21H20H计算X1X2,差存放在13H、12H、11H、10H中。35计算下面逻辑值(用X表示逻辑乘,表示逻辑加)。P10P11XP12ACC7XC/PSW036在ROM空间建立一个10以内的平方值表,根据R0中的数查出平方值,若平方值超出表的范围则将FF装入A。37三字节无符号数相加,被加数在片外RAM的200H2002H(低位在前),加数在片内RAM的20H22H(低位在前),要求把相加之和存放在20H22H之中,请编程。38将片内RAM30H3FH中的数据按顺序传送到片外RAM2000H200FH,请编程。39列举4条能使累加器A清0的指令。40已知A7AH,R030H,片内RAM30H单元的内容为A5H,请问下列程序段执行后,AANLA,17HORL30H,AXRLA,R0CPLA41编程将片外RAM10001010H内容传入片内RAM30H开始的单元。428255A控制字地址为300FH,请按A口方式0输入,B口方式1输出,C口高位输出、C口低位输入,确定8255A控制字并编程初始化程序。43复位后,跳过中断区,重新设置堆栈,并将工作寄存器切换至3区。44在片外RAM空间有一个数据块如图114所示。(1)若该数据块为无符号数,求该数据块1000H数据块长度中数据最小值,并存放于片内RAM20H单元。1001HX1(2)若该数据块是有符号数,求正数、负1002HX2数和0的个数,并将它们的个数分别存到12H、1003HX311H、10H单元中。图114数据块45编写一个软件延时1S和1MIN的子程序。设FOSC6MHZ,则1个机器周期2US。46试用DAC0832芯片设计单脉冲方式的D/A转换接口电路,并编写两个程序,分别使DAC0832输出负向锯齿波和15个正向阶梯波。47试设计DAC0809对1路模拟信号进行转换的电路,并编制采集100个数据存入89C51的程序。48请编制串行通信的数据发送程序,发送片内RAM50H5FH的16B数据,串行接口设定为方式2,采用偶校验方式。设晶振频率为6MHZ。49请编制串行通信数据接收程序,将接收的16B数据送入片内RAM58H5FH单元中,串行接口设定为工作方式3,波特率为1200波特,FOSC6MHZ。50在89C51片内RAM20H3FH单元中有32B数据,若采用方式1进行串行通信,波特率为1200波特,FOSC12MHZ,用查询和中断两种方式编写发送/接收程序对。51已知当前PC值为2000H,请用两种方法将程序存储器20F0H中的常数送入累加器A中。52请用两种方法实现累加器A与寄存器B的内容交换。53请用位操作指令编写下面逻辑表达值的程序。P17ACC0XB0P21P3254编程将片内20H单元开始的30个数据送到片外RAM3000H开始的单元中。55在片外2000H开始的单元中有100个有符号数,试编程统计其中正数、负数和0的个数的程序。56在2000H2004H单元中,存有5个压缩BCD码,编程将他们转换成ASCII码,存入2005H开始的连续单元中。57编程将累加器A的低4位数据送P1口的高4位,P1口的低4位保持不变。58编程将片内RAM40H单元的中间4位取反,其余位不变。59如果R0的内容0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。60编程将片内数据存储器20H24H单元压缩的BCD码转换成ASCII存放在25H开始的单元。61片内存储单元40H中有一个ASCII字符,试编一程序给该数的最高位加上奇校验。62编写一段程序,将存放在自DATA单元开始的一个4B数(高位在高地址),取补后送回原单元。63将片内RAM的20H单元中的十六进制数变换成ASCII存入22H、21H单元,高位存入22H单元,要求用调子程序编写。64编写一段程序,以实现图115种硬件的逻辑运算功能。图115逻辑运算图65用位操作指令实现下面的逻辑方程。P12ACC3XP14X/ACC5/B4X/P1566利用89C51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意)。画出电路,编出汇编语言程序。67利用89C51的P1口控制8个发光二极管LED。相邻的4个LED位一组,使2组每隔05S交替发亮一次,周而复始。画出电路,编写程序(设延时05S子程序为D05,已存在)。68设计一个4位数码显示电路,并用汇编语言编程使“8”从右到左显示1遍。69编制一个循环闪烁灯的程序。有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。画出电路图。70设计89C51和ADC0809的接口,采集2通道10个数据,存入内部RAM的50H59H单元,画出电路图,编出(1)延时方式;(2)查询方式;(3)中断方式中的一种程序。五、编程题答案1程序如下STRATMOVA,R0MOVB,10MULABMOVR0,ARETSTRATMOVR0,30H2程序如下STARTMOVR7,0FHMOVDPTR,3000HLOOPMOVA,R0MOVXDPTR,AINCR0INCDPTRDJNZR7,LOOPRET3程序如下STARTMOVA,40HMOVDPTR,TABMOVCA,ADPTRMOV40H,ARETTABDB30H,31H,32H,33H,34H,DB35H,36H,37H,38H,39H4STARTCLRCMOVA,51HCPLAADDA,01HMOV51H,AMOVA,50HCPLAADDCA,00HMOV50H,ARET5ADDIOMOVR0,30HMOVR7,9HMOVA,R0LOOPINCR0ADDA,R0DJNZR7,LOOPMOV30H,ARET6RIBAIMOVA,R1ORLA,30HMOVDPTR,1000HMOVXDPTR,ARET7SOUTMOVSCON,40HMOVTMOD,20HMOVTL1,OE8HMOVTH1,0E8HSETBTR1MOVSBUF,AJNBT1,CLRRET8CARYMOVDPTR,2000HMOVR0,20HMOVR3,05HNEXTMOVXA,DPTRMOVR0,AINCDPTRINCR0DJNZR3,NEXTRET9程序如下MAINMOVA,R3MOVDPTR,TABMOVCA,ADPTRMOVR3,ARETTABDB30H,31H,32H,33H,34H,DB35H,36H,37H,38H,39H10STARTMOVR0,40HMOVR7,09HMOVA,R0LOOPINCR0MOV30H,R0CJNEA,30H,NEXTNEXTJNCBIE1MOVA,30HBIE1DJNZR7,LOOPMOV50H,ARET11STARTMOVDPTR,3000HMOVR7,20HMOVR0,30HLOOPMOVXA,DPTRMOVR0,AINCR0INCDPTRDJNZR7,LOOPRET12STARTMOVA,R2ADDA,01HMOVR2,AMOVA,R1ADDCA,00HMOVR1,ARET13STARTMOVR0,40HMOVR7,0AHMOVDPTR,4000HLOOPMOVA,R0MOVXDPTR,AINCR0INCDPTRDJNZR7,LOOPRET14STARTMOVTMOD,20HMOVTL1,0E8HMOVTH1,0E8HSETBTR1MOVSCON,50HL1JNBR1,L1CLRR1MOVA,SBUFRET15STARTCLRCMOVA,31HRLCAMOV31H,AMOVA,30HRLCAMOV30H,ARET16STARTMOVDPTR,2000HMOVXA,DPTRADDA,30HMOVXDPTR,ARET17解要实现单字节BCD数的减法,应当设法将减法变为加法后,再用DAA指令调整。具体操作是先用模(991)H即9AH减去减数,再与被减数进行加法操作,然后用DAA调整。假定被减数放在片内RAM的60H单元,减数放在61H单元,差值放入62H单元。程序如下CLRCMOVA,9AHSUBBA,61HADDA,60HDAAMOV62H,ARET18解用R0和R1作数据指针,R0指向第一个加数,并兼做“和”的指针,R1指向另一个加数,字节数存放到R2中作记初值。主程序JAFAMOVR0,20HMOVR1,29HMOVR2,04HACALLJASUBAJMPRET多字节加法子程序JASUBCLRCJASUB1MOVA,R0ADDCA,R1MOVR0,AINCR0INCR1DJNZR2,JASUB1RET19解STARTMOVDPTR,0000HMOVXA,DPTRMOV10H,AMOVB,00HMOVDPTR,0001HTHREEMOVXA,DPTRCJNEA,B,ONEONEJCTWOXCHA,BTWOINCDPTRDJNZ10H,THREEMOVA,BRET20解ORG0030HSTARTMOV20H,00HMOVDPTR,0000HMOVXA,DPTRMOV10H,AMOVDPTR,0001HTWOMOVXA,DPTRJBACC7,ONEONEINCDPTRDJNZ10H,TWORET21解ORG0030HSTARTMOVDPTR,0000HMOVXA,DPTRMOV10H,AINCDPTRMOVA,00HONEPUSHAMOVXA,DPTRMOV20H,APOPAADDA,20HINCDPTRDJNZ10H,ONERET22解TABLEMOVA,20HCJNEA,0AH,NEXTNEXTJCLEDMOV30H,0FFHSJMPENDDLEDMOVDPTR,2000HMOVCA,ADPTRMOV30H,AENDDSJMPENDD23解ORG1000HSTARTMOVDPTR,2000HMOV10H,0BHLOOPMOVXA,DPTRANLA,0FHMOVXDPTR,AINCDPTRDJNZ10H,LOOPRET24解ORG1000HSTARTPUSHAPUSHPSWPOPPSWPOPARET25解MOVDPTR,3000HMOVXA,DPTRMOVR0,AINCDPTRMOVXA,DPTRADDA,R0RRCAINCDPTRMOVXDPTR,ARET26解MOVA,30HANLA,3CHRLARLAMOV33H,AANL31H,3ANL32H,0C0HMOVA,31HORLA,32HRLARLAORL33H,AXRLDPH,0FHXRLDPL,0F0H27解SETBACC0或ORLA,1ANLA,0FHORLA,0CHANLA,0C3H28解相对偏移量的计算方法有两种,一种是偏移量转移地址(相对转移指令地址相对转移指令字节数),则本题中的偏移量200AH2010H2FFF8。另一种是根据转移指令的硬件动作直接计算,既偏移量目标地址下条指令的地址,则本题中的偏移量H200AH2012HFFF8H。取低8位偏移值,RELF8H。29解程序如下MOVR0,30HMOVA,R0SWAPAANLA,0FHORLA,30HMOV31H,AXCHDA,R0MOV32H,ARET30解方法1用1条指令实现XCHA,B方法2用3条指令实现MOVR0MOVB,AMOVA,R0方法3用4条指令实现PUSHACCPUSHBPOPACCPOPB31解ORG0300HSTARTMOVDPTR,0000HMOVXA,DPTRMOVB,AINCDPTRMOVXA,DPTRCJNEA,B,ONEONEJNCTWOMOVDPTR,0000HMOVXDPTR,AXCHA,BINCDPTRMOVXDPTR,ATWOSJMPTWO32解ORG0030HMOVA,20HCLRCRLCAMOV20H,AMOVA,21HRLCAMOV21H,AJNCNEXTMOV22H,01NEXTSJMP33解ORG0030HMOVDPTR,1000HMOVXA,DPTRMOVB,AINCDPTRMOVXA,DPTRCJNEA,B,00HJNCNEXT1MOV30H,BMOV31H,ASJMPNEXT2NEXT1MOV30H,AMOV31H,BNEXT2SJMPNEXT234解ORG0030HMOVR0,10HMOVR1,20HMOVR7,04HCLRCLOOPMOVA,R0SUBBA,R1MOVR0,ADJNZR7,LOOPRET35解ORG0030HMOVC,P11ANLC,P12MOV7EH,CANLC,ACC7ORLC,7FHORLC,/PSW0MOVP10,CRET36解ORG0030HMOVDPTR,TABMOVA,R0CJNEA,10H,NEXTNEXTJNCNEXT1MOVCA,ADPTRSJMPNEXT2NEXT1MOVA,0FFHNEXT2SJMPNEXT237解CLRCMOVDPTR,2000HMOVR0,20HMOVR1,03HLOOPMOVXA,DPTRADDCA,R0MOVR0,AINCR0INCDPTRDJNZR1,LOOPRET38解MOVR0,30HMOVDPTR,2000HMOVR1,10HLOOPMOVA,2R0MOVXDPTR,AINCR0INCDPTRDJNZR1,LOOPRET39解MOVA,00HXRLA,ACCANLA,00HCLRA40解因7AH17H01111010B00010111B00010010B12H故A12H因A5H12H10100101B00010010B10110111BB7H故30B7H因12HB7H00010010B10110111B10100101BA5H故AA5H41解ORL0800HMOVDPTR,1000HMOVR0,30HMOVR7,11HLOOPMOVXA,DPTRMOVR0,AINCR0INCDPTRDJNZR7,LOOPRET42解控制字为1001010195H初始化程序MOVDPTR,300FHMOVA,95HMOVXDPTR,A43解ORG0000HLJMP0030HORG0030HMOVSP,60HSETBRS1SETBRS0RET44解ORG0030HMOVDPTR,1000HMOVXA,DPTRMOVR7,AINCDPTRCLRCMOV20H,00HLOOPMOVXA,DPTRCJNEA,20H,00HJNCNEXTMOV20H,ANEXTINCDPTRDJNZR7,LOOPRETORG0030HMOVDPTR,1000HMOVXA,DPTRMOVR7,AMOV12H,00HMOV11H,00HMOV10H,00HL2INCDPTRMOVXA,DPTRJZNEXT1JBACC7,NEXT2INC12HSJMPL1NEXT1INC10HSJMPL1NEXT2INC11HL1DJNZR7,L2RET45解1S2US51055105500000250200025020010所以要编写三重循环。ORL1000HTIMEMOVR7,10HT3MOVR6,200T2MOVR5,250T1DJNZR5,T1DJNZR6,T2DJNZR7,T3RET1MIN60S,调用上面1S子程序60次。ORG0030HMOVR0,60LOOPLCALLTIMEDJNZR0,LOOPRET46解输出负向锯齿波的程序MOVR0,FEHMOVA,0FFHLOOPMOVXR0,ADECALCALLDELAYSJMPLOOPDELAYRET输出15个正向阶梯波程序15个正向阶梯波,即将00HFFH分为16个等级,以形成15个台阶。此时数字递增幅度要加大为每次增16(或10H),对应程序为MOVR0,FEHCLRAUPMOVXR0,AADDA,10HLCALLDELAYSJMPUPDELAYRET47解采用无条件传送方法,即启动转换后等待100US(这是1DC0809的最保守转换时间)再读转换结果。模拟信号接至IN0引脚,但要保证模拟量在一次A/D转换过程中不发生变化。如果变化速度快,在输入前应该增加采样保持电路。100个数据的采集程序如下MOVR0,1CHMOVR7,100HSETBP10LOOPICMOVXR0,AACALLDELAYMOVXA,R0MOVR0,AINCR0DJNZR7,LOOPOSJMPDELAYMOVR1,310HDLOOPMULABMULABDJNZR1,DLOOPRET48解查询方式发送程序如下MOVSCON,80HMOVPCON,80HMOVR0,50HMOVR7,16LOOPMOVA,R0MOVC,PMOVTB8,CMOVSBUF,AJNBTI,CLRR0DJNZR7,LOOPRET49解查询接受程序如下MOVTMOD,20HMOVTH1,0F3HMOVTL1,0F3HSETBTR1MOVSCON,0D0HMOVR0,50HMOVR7,16HCONTJBCRI,PRISJMPCONTPRIMOVA,SBUFJNBP,PNPJNBRB8,PERAJMPRIGHTPNPJBRB8,PERRIGHTMOVR0,AINCR0DJNZR7,CONTCLRF1SJMPPERSETBF1SJMP50解T1工作于方式2作为波特率发生器,取SCOM0,T1的计数初值计算如下查询方式程序发送程序ORG0000HAJMPSTARTORG0030HSTARTMOVTMOD,20HMOVTH1,0E6HMOVTL1,0E6HSETBTR1MOVSCON,40HMOVR0,20HMOVR7,32LOOPMOVSUBF,R0JNBTI,CLRTIINCR0DJNZR7,LOOPSJMP接受程序ORG0000HAJMPSTARTORG0030HSTARTMOVTMOD,20HMOVTH1,0E6HMOVTL1,0E6HSETBTR1MOVSCON,50HMOVR0,20HMOVR7,32HLOOPJNBRI,CLRRIMOVR0,SUBFINCR0SJMP中断方式程序中断方式的初始化部分同查询方式,以下仅写不同部分。中断发送程序SETBEASETBESMOVSUBF,R0LOOPSJMPAGADJNZR7,LOOPCLREASJMPORG0023HIOIPCLRTIPOPDPHPOPDPLMOVDPTR,AGAPUSHDPLPUSHDPHINCR0MOVSUBF,R0RETI中断接受程序SETBEASETBESLOOPSJMPAGADJNZR7,LOOPCLREASJMPORG0023HIOIPCLRRIMOVR0,SBUFPOPDPHPOPDPLMOVDPTR,AGAPUSHDPLPUSHDPHINCR0RETI51解方法一以PC作为基址寄存器。MOVA,0F0HMOVCA,APC方法二以DPTR作为基址寄存器。MOVDPTR,20F0HMOVA,00HMOVCA,ADPTR52解方法一利用交换指令。XCHA,B方法二利用堆栈交换指令。PUSHAPUSHBPOPAPOPB53解在位操作中,与操作即乘,或操作即加。MOVC,B0ORLCP21ANLCACC0ORLCP32MOVP17,C54解将片内数据传送到片外RAM可用MOVXDPTR,A或MOVXRI,A指令MOVR7,30MOVR0,20HMOVDPTR,3000HLOOPMOVA,R0MOVXDPTR,AINCR0INCDPTRDJNZR7,LOOP55解判断一个数是否等于0,可用JZREL或CJNEA,00H,REL指令;判断其正负,可直接判断该数的D7(符号位),当D71时,为负,当D70时,为整数。设R2为负数个数的计数;R3为0的个数的计数;R4为正数个数的计数。MOVR2,00HMOVR3,00HMOVR4,00HMOVR7,100MOVDPTR,2000HLOOPMOVXA,DPTRJZRR3JBCC7,RR2INCR4SJMPTTRR3INCR3SJMPTTRR2INCR2TTINCDPTRDJNZR7,LOOP56解压缩BCD码用4位二进制数表示一位十进制数,即一个字节存放二位十进制数。十进制数转换成ASCII码,只需要加上30H。程序如下MOVP2,20HMOVR1,00HMOVDPTR,2005HMOVR7,05LOOPMOVXA,R1PUSHACCANLA,0FHADDA,30HMOVXDPTR,AINCDPTRPOPACCANLA,0F0HSWAPAADDA,30HMOVXDPTR,AINCR1INCDPTRDJNZR7,LOOP57解SWPAANLP1,0FHORLP1,A58解方法一XRL40H,3CH方法二MOVA,40HCPLAANLA,3CHANL40H,0C3HORL40H,A59解MOVA,R0JZZEMOVR1,0FFHSJMPZEMOVR1,0RET60解ORG0100HMOVR7,05HMOVR0,20H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论