当前位置:首页 > 单片机复习材料
3.11将内部RAM的20H单元中的十六进制数变换成ASCII码存入22H,21H单元中,高位存入22H单元中,要求用子程序编写转换部分。 答:
ORG 0000H
MOV A,20H ASCII:CJNE A,# 0AH,NE ANL A,# 0F0H NE:JC A30
SWAP A ADD A,#37H ACALL ASCII RET
MOV 22H,A A30:ADD A,30H MOV A,20H RET ANL A,#0FH END ACALL ASCII MOV 21H,A SJMP $
3.12 编写一段程序,以实现图3-8中硬件的逻辑运算功能。
20H(位) ﹠ ≥1 P1.0
﹠ 1 2FH(位) 53H(位)
答:
ORG 0000H MOV C,20H ANL C,2FH ORL C,/2FH CPL C
ANL C,53H MOV P1.0,C SJMP $ END
3.13 用位操作指令实现下面的逻辑方程(×表示逻辑乘,+表示逻辑加) 答:
ORG 0000H MOV C,ACC.3 ANL C,P1.4 ANL C,/ACC.5 MOV 20H,C MOV C,B.4
CPL C
ANL C,/P1.5 ORL C,20H MOV P1.2,C SJMP $ END
3.14 试编写一个3字节无符号数乘1字节的乘法程序。 答:
ORG 0000H MOV R7,#03H MOV R0,#data MOV R2,#0
NEXT:MOV A,@R0 MOV B,R1
MUL AB ADD A,R2 MOV @R0,A MOV A,#0 ADDC A,B MOV R2,A
INC R0
DJNZ R7,NEXT MOV @R0,B SJMP $ END
4.4 编程将8XX51的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器中(位置不固定)。 答:
main() p2=0x35; {char data *p1,*p2; a=*p1*(*p2); xdata int a; }
p1=0x20;
4.5 讲将如下汇编程序译成C程序(等效即可)ORG 0000H SJMP $ CLR P1.0 MOV P1,#04H TLC:MOV A,#0 DJNZ R5,LOOP MOV R6,#0AH MOV @R0,A CLR P1.3 MOV R0,#30H MOV R5,#08 INC R0
LOOP:MOV C,P1.2 DJNZ R6,TLC2543 CLR P1.0
SETB P1.3 RLC A RET ACALL TLC SETB P1.0 END 答:
#include﹤reg51.h﹥ P1=0x04; For(i=0;i<8;i++) #define uchar unsigned char P=0x30; {P1_1=msb; sbit P1_0=P1^0; P1_0=0; y=ACC<<1; sbit P1_1=P1^1; P1_3=1; 1sb=P1_2; sbit P1_2=P1^2; for(i=0;i<10;i++) P1_0=1; sbit P1_3=P1^3; {*P=tlc(); P1_0=0; sbit msb=ACC^7; P++;} } sbit 1sb=ACC^0; } return y; uchar tlc(void); uchar tlc(void) } main() {uchar i,y; {uchar*P; ACC=0;P1_3=0;
4.6 8051的片内数据存储器25H单元中放有一个0~10的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存。 答:
#include
4.7 完成逻辑表达式P1.2=P1.4×ACC.0+ACC.7(“×”表示逻辑与,“+”表示逻辑或)。 答:
#include
{P12=~(P1^4&ACC^0|ACC^7;)
4.8 将外部RAM的10H~15H单元的内容传送到内部RAM的10H~15H单元。 答:
#include
4.9 内部RAM的20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。 答:
#define unit unsigned int m=0x20;n=0x22;P=0x24; main(){ if(*m<*n)*P=*n; uint data*m,*n=,*p; else*P=*m; for(;;){ }}
4.10 将内部RAM21H单元存放的BCD码转换为二进制存入30H为首址的单元,BCD码的长度存放在20H单元中。 答: main() for(i=0;i<*P1;i++){ int data a=0,*P3; a=a*10+*P2; char i,*P1,*P2; P2++; P1=0x20; } P2=0x21; *P3=a; P3=0x30; }
4.11 将内部RAM30H单元存放的2字节二进制数转换为二进制数存放于21H为首的单元中,长度存放于20H单元中。 答: main() {*P2=a/k; unsigned int a,k,*P3; a=a%k; char i,*P1,*P2; P2++; P1=0x20;P2=0x25;P3=0x30; k=k/10; a=*P3;k=10000; } while(a/k= =0)k=k/10; *P1=i; for(i=0;a!=0;i++) }
5.6 利用8XX51的P1口,检测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意),画出电路并编出程序。
答:
ORG 0000H ABC:CLR P1.0 SETB P1.7 JB P1.7,$ JNB P1.7,$ SETB P1.0
+5VMOV R2,#0 DAY:NOP NOP
DJNZ R2,DAY SJMP ABC
Vcc10ufEARSTP1.01KΩ300Ω89C51+5V1KΩ30pf×2XTAL1P1.7XTAL2GND5.7 利用8XX51的P1口控制8个发光二极管LED。相邻的4个LED为一组,使两组每隔0.5s交替发亮一次,周而复始,画出电路并编出程序(设延时0.5s子程序为D05,已存在)。
ORG 0000H MOV A,#0FH ABC:MOV P1,A ACALL D05 SWAP A
+5VSJMP ABC
D05:MOV R6,250 DY:MOV R7,250 DAY:NOP NOP
DJNZ R7,DAY DJNZ R6,DY RET END
89C51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7EA
共分享92篇相关文档