《单片机程序题库.doc》由会员分享,可在线阅读,更多相关《单片机程序题库.doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.实现片外数据存储器数据传送(2000H)-(2100H)MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A2.查表法求Y=X2。设X(0X15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM 21H单元。1) ORG 1000H SQU: MOV DPTR,#3000H;确定表首地址(基地址) MOV A,20H;取 X(变量:偏移量) MOVC A,A+DPTR;查表求Y=X2 MOV 21H,A;保存Y(结果) RET;子程序结束;其它程序段 ORG 3000H ;常数表格首地址 TAB: DB 00,01,04,09,
2、,225;平方表 END2)ORG 1000H;程序起始地址 SQU: MOV A,20H ;取X ADD A,#3 ;修正偏移量 MOVC A,A+PC ;查表求Y=X2 (PC=1005H) MOV 21H,A ;存结果 RET ;子程序结束 TAB: DB 00,01,04 ;平方表 DB 09, ,225 3.分析下面程序MOV R0, #0C8H;(R0)=200CLR P1.7;P1.7为低电平LOOP: CPL P1.7;P1.7变反(1 s ) NOP;(1 s ) NOP;(1 s ) DJNZ R0,LOOP;(R0)0 则转 (2s)4.设计一个延时10ms的延时子程序,
3、已知单片机使用的晶振为6MHZ。机器周期数 ORG 0020H 1 MOV R0, #0AH ;外循环10次 1 DL2: MOV R1, #MT ;内循环MT次 1 DL1: NOP 1 NOP ;空操作指令 2 DJNZ R1, DL1 2 DJNZ R0, DL2 RET内循环DL1到指令DJNZ R1,DL1 的计算:(112)2sMT=1000s MT=125=7DH 总的延时时间: 11+(1+1+2)125+2102s=10.062ms5.试计算延时程序的执行时间DELAY: MOV R6,#64H (=100)1I1: MOV R7,#0FFH(=255)1I2: DJNZ R
4、7,I22 DJNZ R6,I12 RET2延时时间计算:(设时钟fOSC=12MHz) T=1ust=(11+1100+2100255+2100+21)T= 51.303 ms6. DELAY:MOV R6,#100 1 D1:MOV R7,#10 1 D2:NOP 1DJNZ R7,D2 2 t=6.606 ms DJNZ R6,D1 2RET 2计算延时程序的执行时间(设时钟fOSC=6MHz,T=2us) 。7.十六进制数转换为ASCII码:HASC:CJNE A,#0AH,N N:JNC N1(C=0跳N1)ADD A,#30HSJMPSE N1:ADD A,#37H SE:RET8
5、. 设从片内RAM30H单元和40H单元有两个16字节数,把它们相加,结果放于30H单元开始的位置处(设结果不溢出)。ORG 1000HMOV R0,#30HMOV R1,#40HMOV R2,#16 CLR CLOOP:MOV A,R0ADDC A,R1MOV R0,AINC R0INC R1DJNZ R2,LOOPEND9.按下面公式编写程序,x为无符号数,存在20h单元y存放在21h单元ORG 0030H MOV A, 20H CJNE A, #21H, LOOP1LOOP1: JC NEXT1 CJNE A, #40H, LOOP2LOOP2: JNC NEXT2 MOV B, #2
6、MUL AB AJMP NEXT2NEXT1: CPL ANEXT2: MOV 21H, A END从内部RAM 22h单元开始存有一个无符号数数据块,长度n存于21h中。求出数据块中的最小数,存于20h中。ORG 0030H MOV R0, #22H ;数据块起始地址 MOV R1, 21H ;数据个数n MOV 20H,#0FFH ; 最大数LOOP: MOV A, R0 ; 取新数 INC R0 ; 为取下一个新数作准备 CJNE A, 20H, LOOP1 ; 与原最大数比较LOOP1:JNC NEXT ; 大,原最小数保留 MOV 20H, A ; 小,改变最小数NEXT: DJNZ
7、 R1, LOOP ;循环 END10.ASCII码转换为十六进制数:AHEX:CLR C SUBBA,#30H CJNEA,#0AH,N N: JC N1 SJMP AE N1: SUBB A,#11H CJNE A,#06H,N2 N2: JNCERR ADDA,#0AH SJMP AEERR: MOVA,#0FFH AE:RET8位二进制转换成BCD码。(用十进制表达的二进制码)BINBCD1: MOV B, #100 DIV AB MOV R0, A INC R0 MOV A, #10 XCH A, B ;(A)原(B),(B)=10 DIV AB MOV R0, A INC R0 X
8、CH AB MOV R0, A RET11.要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。解:INT0输入按键信号,P1.0输出改变LED状态。 1、跳变触发:每次跳变引起一次中断请求。ORG0000H ;复位入口AJMP MAIN单片机INT0P1.01+5VORG0003H ;中断入口AJMPPINT0ORG0100H ;主程序MAIN:MOV SP,#40H ;设栈底SETBEA ;开总允许开关SETBEX0 ;开INT0中断SETBIT0 ;负跳变触发中断 H:SJMPH ;执行其它任务 ORG0200H ;中断服务程序PINT0:CPL P1.0 ;改变LEDRETI ;
9、返回主程序2、 电平触发:可避免一次按键引起多次中断响应。1) 软件等待按键释放(撤消低电平);(2)硬件清除中断信号(标志位)。ORG 0000H ;复位入口 AJMP MAINORG0003H;中断入口 AJMPPINT0ORG0100H;主程序MAIN:MOV SP,#40H ;设栈底SETBEA ;开总允许开关SETBEX0 ;开INT0中断CLRIT0 ;低电平触发中断H:SJMPH ;执行其它任务ORG0200H ;中断服务程序PINT0:CPL P1.0 ;改变LEDWAIT: JNBP3.2,WAIT ;等按键释放(P3.2即INT0) RETI ;返回主程序假设系统时钟为6M
10、Hz,编写定时器T0产生1秒定时的程序。(1)T0工作方式的确定定时时间较长,采用哪一种工作方式? 由各种工作方式的特性,可计算出: 方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512ms。选方式1,每隔100ms中断一次,中断10次为1s。 (2)计算计数初值 因为:(216-X)210-6 = 10-1 所以:X=15536=3CB0H 因此:TH0=3CH,TL0=B0H (3)10次计数的实现T1T0 采用循环程序法。(4)程序设计 ORG 0000HRESET: LJMP MAIN ;上电,转主程序入口MAIN ORG 000BH ;T0
11、的中断入口 LJMP IT0P;转T0中断处理程序IT0P ORG 1000H MAIN: MOV SP,#60H ;设堆栈指针 MOV B,#0AH ;设循环次数10次 MOV TMOD,#01H ;设T0工作在方式1 MOV TL0,#0B0H ;给T0设初值 MOV TH0,#3CH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ;CPU开放中断 HERE: SJMP HERE ;等待中断 ITOP: MOV TL0,#0B0H ;T0中断子程序,重装初值 MOV TH0,#3CH ; DJNZ B,LOOP CLR TR0 ;1s定时时间到,停止T0工
12、作 LOOP: RETI 12.由P1.0输出方波信号,周期为2ms,设fosc=12MHz。每隔1ms改变一次P1.0的输出状态。用T0非门控方式1定时。 计算时间常数:X=216-t/T=216-1000/1 =FC18HSTART:MOV TMOD,#01H MOV TL0,#18H MOV TH0,#0FCH SETB TR0 LOOP: C TF0,PTF0 SJMP LOOP PTF0: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH SJMP LOOPORG0000H AJMPMAIN ORG000BH;T0定时器 AJMPPT0INT ORG0100HM
13、AIN: MOVSP,#60H MOVTMOD,#01H MOVTL0,#18H MOVTH0,#0FCH SETBEA SETBET0 SETBTR0HERE: SJMPHEREPT0INT: CPLP1.0 MOVTL0,#18H MOVTH0,#0FCH RETI13. P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。本题采用硬件方式:T0定时,定时10ms; T1计数T0的定时跳变信号P1.0的负跳变次数,计满100个跳变为1秒。(查询方法) T=2s,X=5105个T,而最大只能65536个T,不能满足要求,必须借助硬件计数器或软件循环。T0定时初值: (方式1)t=10ms,X=5000D=1388H,C=(1388H)补=EC78H T1计数初值: (方式2)START: MOV TMOD,#61H MOV TL1,#0CDH MOV TH1,#0CDH CLR P1.0 SETB TR1LOOP1: CPL P1.7LOOP2: MOV TL0 ,#78H MOV TH0,#0ECH SETB TR0LOOP3: CTF0,LOOP4 SJMP LOOP3LOOP4: MOV TL0 ,#78H MOV TH0,#0ECH CPL P1.0 C TF1,LOOP1 SJMP LOOP27 / 7
限制150内