1、1.实现片外数据存储器数据传送(H)-(2100H)MOV DPTR,#HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A2.查表法求Y=X2。设X(0X15)在片内RAM20H单元中,规定查表求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, ,225;平方表
2、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 R7,I22 DJNZ R6,I12
4、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. 设从片内RAM30H单元和40H单
5、元有两个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 MUL AB AJMP NEXT2NEXT1:C
6、PL 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 R1, LOOP ;循环 END10.ASCII码转换为十六进制数:AH
7、EX: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 XCH AB MOV R0, A RET11.规定每次按动按键,使外接发光二极
8、管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 ;返回主程序2、 电平触发:可避免一次按键引起多次中断响应。1) 软件等待按键
9、释放(撤除低电平);(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 ;返回主程序假设系统时钟为6MHz,编写定期器T0产生1秒定期程序。(1)T0工作方式拟定定期时间较长,采
10、用哪一种工作方式? 由各种工作方式特性,可计算出: 方式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中断入口 LJMP IT0P;转T0中断解决程序IT0P ORG 1000H MAI
11、N: 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工作 LOOP: RETI 12.由P1.0输出方波信号,周期为2ms,设fosc=12
12、MHz。每隔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: JBC TF0,PTF0 SJMP LOOP PTF0: CPL P1.0 MOV TL0,#18H MOV TH0,#0FCH SJMP LOOPORG0000H AJMPMAIN ORG000BH;T0定期器 AJMPPT0INT ORG0100HMAIN: MOVSP,#60H MOVTMOD,#01H MOVTL0,#18H M
13、OVTH0,#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: JBCTF0,LOOP4 SJMP LOOP3LOOP4: MOV TL0 ,#78H MOV TH0,#0ECH CPL P1.0 JBC TF1,LOOP1 SJMP LOOP2