实验一 清零、移数、判断
将片内30H~40H及片外0010H~0100H清零,然后将片内41H~47H的内容移到片外0041H~0047H,判断:
若(0041H)<15,则求平方存到0050H中,并将位00H置1。
若(0041H)=15, 则加15存到0050H中,并将位01H置1。 若(0041H)>15, 则减15存到0050H中,并将位02H置1。
ORG 0000H;设置初始地址
MOV R0,#30H;对片内30H~40H清零 MOV R1,#11H CLR A
CON1:MOV @R0,A INC R0
DJNZ R1,CON1
MOV DPTR,#0010H;对片外0010H~0100H清零 MOV R1,#0F1H CLR A
CON2:MOVX @DPTR,A INC DPTR
DJNZ R1,CON2
MOV R1,#07H;移动内容 MOV R0,#41H
MOV DPTR,#0041H LOOP:MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR
DJNZ R1,LOOP
MOV DPTR,#0041H MOVX A,@DPTR
CJNE A,#0FH,NEXT1;不相等跳转 ADD A,#0FH;相等情况 MOV DPTR,#0050H MOVX @DPTR,A SETB 01H CLR 00H CLR 02H
1
SJMP OUT
NEXT1:JC NEXT2;<跳转 SUBB A,#0FH;>情况 MOV DPTR,#0050H MOVX @DPTR,A SETB 02H CLR 00H CLR 01H SJMP OUT
NEXT2:MOV B,A;<情况 MUL AB
MOV DPTR,#0050H MOVX @DPTR,A SETB 00H CLR 01H CLR 02H OUT:SJMP $
实验二 排序、加法
有两个长度为10H的数,分别放在30H和40H为首地址的存储器中(低字节),求其对应之和,放在50H为首地址的存储器中(处理进位位),然后按升序排列,放在70H为首地址的存储器中。 ORG 0000H;设置初始位置 START:MOV R0,#30H MOV R1,#50H MOV R3,#10H
CF:MOV A,@R0;将30H的数放在50H MOV @R1,A INC R0 INC R1
DJNZ R3,CF
MOV R0,#50H MOV R1,#40H MOV R3,#10H CLR C
JIA:MOV A,@R0;将两个数求和 ADDC A,@R1 MOV @R0,A INC R0 INC R1
DJNZ R3,JIA
CLR A;查看最后一个数是否有进位位 ADDC A,#00H MOV 60H,A
MOV R0,#50H;将50H的数放到70H MOV R1,#70H MOV R3,#10H ZY:MOV A,@R0 MOV @R1,A INC R0 INC R1
DJNZ R3,ZY
MOV DPL,#0FH;用DPL计数 AA:MOV R0,#70H MOV R1,#71H
PUSH DPL;保护DPL BB:CLR C
MOV A,@R0 SUBB A,@R1
JC CC;第一个数小于第二个数跳转 MOV A,@R0 XCH A,@R1 MOV @R0,A CC:INC R0 INC R1
DJNZ DPL,BB;减一不等于零跳转(内循环)
POP DPL
DJNZ DPL,AA;减一不等于零跳转(外循环)
SJMP $ END
实验三
设一表格,表中数为:00H、11H、22H……FFH,将片内00H单元中的低4位放到片外0000H中(0000H中的高4位为0),高4位放到片外0001H中(0001H中的高4位为0),根据0000H中的数取出表中相应的值存到片内30H中;根据0001H中的数跳到相应的处理程序中,在处理程序中,把相应的位地址置1。 ORG 0000H
2
START:MOV DPTR,#0000H; MOV A,#00H
MOVX @DPTR,A INC DPTR
MOVX @DPTR,A
MOV DPTR,#00H;将片内00H中的值拆分放入片外相应位置 MOV R1,#00H MOV A,@R1 ANL A,#0FH
MOVX @DPTR,A
MOV A,@R1 ANL A,#0F0H RR A RR A RR A RR A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#0000H;相应值赋给30H MOVX A,@DPTR
MOV DPTR,#TABLE;指向表格的首地址
MOVC A,@A+DPTR MOV 30H,A
MOV DPTR,#0001H;散转
MOV 20H,#00H;置位前先将20H清零
MOVX A,@DPTR
MOV R1,A;LJMP;A变为3倍 RL A
ADD A,R1
MOV DPTR,#TAB JMP @A+DPTR
TAB: LJMP PM0 LJMP PM1 LJMP PM2 LJMP PM3 LJMP PM4 LJMP PM5
LJMP PM6 LJMP PM7 LJMP PM8 LJMP PM9 LJMP PMA LJMP PMB LJMP PMC LJMP PMD LJMP PME LJMP PMF PM0:SETB 00H JMP AA PM1:SETB 01H JMP AA PM2:SETB 02H JMP AA PM3:SETB 03H JMP AA PM4:SETB 04H JMP AA PM5:SETB 05H JMP AA PM6:SETB 06H JMP AA PM7:SETB 07H JMP AA PM8:SETB 08H JMP AA PM9:SETB 09H JMP AA PMA:SETB 0AH JMP AA PMB:SETB 0BH JMP AA PMC:SETB 0CH JMP AA PMD:SETB 0DH JMP AA PME:SETB 0EH JMP AA PMF:SETB 0FH JMP AA TABLE:DB
00H,11H,22H,33H,44H,55H,66H,77H,88H,99
3
H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH AA:SJMP $ END 实验四 外中断 S1加1键,S2减1键 要求:上电全灭 每按一次S1亮的灯多一盏 每按一次S2亮的灯少一盏 按8次后重复开始状态 ORG 0000H
LJMP MAIN ORG 0003H LJMP INT0 ORG 0013H LJMP INT1 ORG 0030H MAIN: SETB EA SETB EX0 SETB EX1 SETB IT1 SETB IT0 MOV P1,#00H MOV A,P1 SJMP $ Z1: SETB C RLC A MOV P1,A SETB C RETI
INT0: CJNE A,#0FFH,Z1 MOV A,#00H MOV P1,A RETI
J1: ANL A,#0FFH CLR C RLC A MOV P1,A CLR C RETI
INT1: CJNE A,#00H,J1 MOV A,#0FFH MOV P1,A RETI 实验五 定时器
P1.0、P1.1接两个发光管,INT0接一启动按键,启动后两个发光管一亮一灭,亮灭时
间为1s,再按按键停止发光管。 实验箱晶振:6M ORG 0000H
SJMP MAIN LJMP INT0INT ORG 000BH AJMP TIME0 ORG 0030H MAIN:CLR 20H.0 CLR P1.0 CLR P1.1
MOV R0,#00H SETB EX0 SETB IT0 SETB EA SJMP $
INT0INT:CPL 20H.0 JB 20H.0,L1 CLR TR0 CLR ET0 CLR P1.0 CLR P1.1 SJMP L2 L1: SETB P1.0 CLR P1.1
MOV TMOD,#01H MOV TH0,#0AEH MOV TL0,#58H SETB TR0 SETB ET0 L2: NOP RETI
TIME0:MOV TH0,#0AEH MOV TL0,#58H INC R0
CJNE R0,#0AH,L3 CPL P1.0 CPL P1.1
MOV R0,#00H L3: RETI
实验六 定时器、计数器
P3.2口输出周期为2秒的方波;T1口为脉冲输入端,记录输入脉冲的个数,脉冲数由P1口所接的8个发光管显示出来(以二进
4
制形式)。
实验箱晶振:6M ORG 0000H
AJMP MAIN ORG 0003H AJMP INT0 ORG 000BH AJMP TIM0 ORG 0030H
MAIN: MOV TMOD,#51H MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#00H MOV TL1,#00H MOV P1,TL1 SETB EA SETB EX0 SETB IT0 CLR 20H.0 MOV R7,#0AH SJMP $
ORG 0300H INT0: JB 20H.0,AA CPL 20H.0 SETB ET0 SETB TR0 SETB ET1 SETB TR1 RETI
AA: CPL 20H.0
MOV TH1,#00H MOV TL0,#00H CLR ET0 CLR TR0 CLR ET1 CLR TR1 RETI
TIM0: MOV TH0,#3CH MOV TL0,#0B0H DJNZ R7,BB CPL P3.2 MOV P1,TL1 MOV R7,#0AH BB: RETI
实验七 串行通信(3学时)
主机:每隔1秒读一次P1口并将读数发给从机,同 时接收从机的信号,若与所发数相同,则P3.2的灯亮,若不同或不回答则P3.3的灯亮。
从机:将接收的数据从P1口推出,并回发 SETB REN;允许串行接收 MOV A,SBUF MOV 70H,A POP A
CJNE A,70H,CC SETB P3.2 此数据
波特率自定,编写主机程序和从机程序。 主机 ORG 0000H AJMP MAIN ORG 000BH AJMP CT0 ORG 0023H AJMP RT ORG 0030H
MAIN:MOV TMOD,#21H MOV TL1,#0FAH MOV TH1,#0FAH MOV R7,#0AH MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB TR0 SETB EA SETB TR1
CLR TI ;请除发送位 MOV SCON,#50H MOV P1,#0FFH MOV A,P1 MOV SBUF,A AA:JNB TI,AA CLR TI SETB ES SJMP $
CT0:MOV TH0,#3CH MOV TL0,#0B0H DJNZ R7,BB MOV P1,#0FFH MOV A,P1 MOV SBUF,A MOV R7,#0AH BB:RETI
RT:PUSH A;保护现场 CLR TI
CLR P3.3
CLR RI RETI
CC:SETB P3.3 CLR P3.2
CLR RI;中断请求相应 RETI
从机ORG 0000H AJMP MAIN ORG 0030H
MAIN:MOV TMOD,#20H MOV TH1,#0FAH MOV TL1,#0FAH MOV P1,#00H SETB EA SETB TR1
CLR ES ;禁止串行中断 CLR TI ;发送中断 CLR RI ;接收中断
MOV SCON,#50H ;串行方式1接收 MOV PCON,#00H
AA:JNB RI,AA CLR RI
MOV A,SBUF MOV P1,A CLR ES
MOV SBUF,A BB:JNB TI,BB CLR TI SJMP AA
实验八 交通灯控制(3学时) 设计一交通灯控制系统,控制东西方向的红、黄、绿灯和南北方向的红、黄、绿灯,可手动控制和自动控制,设置两个输入控制开关(可用P1.0、P1.1做输入控制),控制过程如下:
东西方向5
CJNE R6,#00H,LOOP1 南北方向
P1.0 P1.1 红 黄 绿 MOV P1,#01001011B;亮一秒
DJNZ R7,GORET1 红 黄 绿
1 0 亮 MOV R6,#0AH
GORETI:RETI 亮 3S后 亮
0 1 亮 3S后 亮 LOOP1:MOV P1,#00000011B;灭一秒
DJNZ R6,GORET1 亮
MOV R7,#0AH 0 0 亮
亮
1 1 闪(亮1S灭1S)闪(亮1S灭1S) ORG 0000H AJMP MAIN ORG 000BH AJMP T0 ORG 0030H MAIN:MOV P1,#03H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 MOV R2,#20 MOV R3,#20 MOV R4,#30 MOV R5,#30 MOV R6,#10 MOV R7,#10 SETB TR0 SJMP $ ORG 0200H;进入定时器,首先判断情况
T0:SETB P1.0 SETB P1.1 JB P1.0,AA ;每100ms判断一次情况
JNB P1.0,BB AA:JB P1.1,SHAN ;11 JNB P1.1,ZD2 ;01 BB:JB P1.1,ZD1 ;10 JNB P1.1,HONG;00 SHAN:MOV TH0,#3CH;黄灯闪烁情况 MOV TL0,#0B0H
GORET1:RETI HONG:MOV TH0,#3CH ;红灯一直亮 MOV TL0,#0B0H MOV P1,#10010000B RETI ZD1:JB P1.4,ZD11 MOV TH0,#3CH;自动情况 MOV TL0,#0B0H CJNE R4,#00H,LOOP2 MOV P1,#10001001B;黄灯亮3秒 DJNZ R2,GORET2 MOV R4,#30 LJMP ZD11 LOOP2:MOV P1,#10000101B DJNZ R4,GORET2 MOV R2,#20 GORET2:RETI ZD11:MOV TH0,#3CH ;自动情况11 MOV TL0,#0B0H CJNE R4,#00H,LOOP5 MOV P1,#01010001B
DJNZ R2,GORET3 MOV R4,#30 MOV P1,#10000110B
AJMP ZD1 LOOP5:MOV P1,#00110001B DJNZ R4,GORET3 MOV R2,#20 GORET3:RETI ZD2:JB P1.7,ZD21 MOV TH0,#3CH ;自动情况2 MOV TL0,#0B0H
6
CJNE R5,#00H,LOOP3 MOV P1,#01010010B DJNZ R3,GORET4 MOV R5,#30 AJMP ZD21
LOOP3:MOV P1,#00110010B DJNZ R5,GORET4 MOV R3,#20 GORET4:RETI
ZD21:MOV TH0,#3CH;自动情况 MOV TL0,#0B0H
CJNE R5,#00H,LOOP6 MOV P1,#10001010B DJNZ R3,GORET5 MOV R5,#30
MOV P1,#00110010B AJMP ZD2
LOOP6:MOV P1,#10000110B DJNZ R5,GORET5 MOV R3,#20 GORET5:RETI
实验九 定时、记数、显示(3学时) 设计一个带有控制功能的脉冲发生器/计数器系统,脉冲发生器发出周期为2秒的方波(提示:可由P1.0口输出,用发光二极管显示);被计数脉冲由T0口输入,所记录的脉冲数以十进制形式在数码管显示(至少应可记录256个脉冲);设两个按键,一个启动脉冲发生器,一个启动记数,(按一次启动,再按一次停止),不启动时,发光管灭,数码管显示学号。 伟福:数码管为共阴极;
KEY/LED_CS 与CS0连线,则段地址为:8004H,位地址为:8002H ORG 0000H AJMP MAIN ORG 0003H AJMP INT0 ORG 0013H AJMP INT1 ORG 001BH AJMP T1
7
ORG 0030H
MAIN:MOV TMOD,#16H ;T0计数,T1计时 MOV TH0,#00H MOV TL0,#00H MOV TH1,#0EFH MOV TL1,#0CH SETB EA SETB EX0 SETB EX1 SETB ET0 SETB ET1 SETB IT0 SETB IT1 CLR TR0 CLR TR1
MOV P1,#00H CLR 20H.0 MOV R7,#100 SJMP $
ORG 0100H
INT0:JB 20H.0,AA ;脉冲开关 MOV TH1,#0EFH MOV TL1,#0CH MOV R7,#100
SETB 20H.0 ;用20H.0口作为判断标志
SETB TR1 RETI
AA:CLR 20H.0 ;CLR TR1 ;CLR P1.0 RETI
ORG 0300H
INT1:JB TR0,BB ;计数开关 MOV TH0,#00H ;开始计数 MOV TL0,#00H MOV TH1,#0EFH MOV TL1,#0CH SETB TR0 RETI
BB:CLR TR0 ;关闭计数器显示
学号
MOV TH0,#00H MOV TL0,#00H
T1:MOV TH1,#0EFH MOV TL1,#0CH
JX:JNB TR0,XH1 DY:ACALL H_BCD MOVX @DPTR,A MOV DPTR,#8004H MOV A,30H
MOVX @DPTR,A ACALL DLAY
MOV DPTR,#8002H MOV A,#02H
MOVX @DPTR,A MOV DPTR,#8004H ACALL JISHU ACALL DISP
DJNZ R7,GORET1 MOV R7,#100 JNB 20H.0,DY
CPL P1.0 ;用P1.0作为脉冲发生器
GORET1:RETI
H_BCD:MOV A,TL0 MOV B,#100 DIV AB MOV 32H,A MOV A,#10 XCH A,B DIV AB MOV 31H,A MOV 30H,B RET
JISHU:MOV R2,#3 ;R2计数,让后三个数码管都显示
MOV R0,#30H
FT:MOV A,@R0 ;将所计数转换成数码管显示形式
MOV DPTR,#TAB MOVC A,@A+DPTR MOV @R0,A INC R0
DJNZ R2,FT RET
DISP:MOV DPTR,#8002H MOV A,#01H
8
MOV A,31H
MOVX @DPTR,A ACALL DLAY
MOV DPTR,#8002H MOV A,#04H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,32H
MOVX @DPTR,A ACALL DLAY RET
XH1:MOV DPTR,#8002H MOV A,#01H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,#7DH MOVX @DPTR,A ACALL DLAY XH2:MOV DPTR,#8002H MOV A,#02H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,#6FH MOVX @DPTR,A ACALL DLAY
XH3:MOV DPTR,#8002H MOV A,#04H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,#66H
MOVX @DPTR,A ACALL DLAY XH4:MOV DPTR,#8002H MOV A,#08H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,#5BH MOVX @DPTR,A ACALL DLAY XH5:MOV DPTR,#8002H MOV A,#10H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,#3FH MOVX @DPTR,A ACALL DLAY XH6:MOV DPTR,#8002H MOV A,#20H
MOVX @DPTR,A MOV DPTR,#8004H MOV A,#06H
MOVX @DPTR,A ACALL DLAY
DJNZ R7,GORET2 MOV R7,#100 JNB TR0,XH1
CPL P1.0 ;用P1.0作为脉冲发生器
GORET2:RETI
RETI
DLAY:MOV R6,#1000;延时子程序 DJNZ R6,$ RET
TAB:DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
9
因篇幅问题不能全部显示,请点此查看更多更全内容