1、单片机原理编程题一编程题 (每小题8分,共16分)1.设在内RAM 40H开始的存储区有若干个字符和数字,已知最后一个为字符“$“(并且只有一个,试统计这些字符数字的个数,结果存入30H单元中。参考程序: ORG 0000H START: MOV R1,#40H ;R1作为地址指针 CLR A ;A作为计数器 LOOP: CJNE R1,#24H,NEXT ;与“$”号比较,不等转移 SJMP NEXT1 ;找到“$“结束循环 NEXT: INC A ;计数器加1、 INC R1 ;指针加1 SJMP LOOP ;循环 NEXT1: INC A ;再加入”$”这个字符 MOV 30H,A ;存
2、结果 END2.试编一程序,分别统计在内部RAM的30H50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。参考程序: ORG 0000H MOV 51H ,#0H MOV 52# ,#0H! MOV R1 ,#30H MOV R0 ,#20H MOV A,R1 INC R1 ANL A , #01H JZ LOOP1 INC 51H SJMP LOOP2 LOOP1: INC 52H LOOP2: DJNZ R0 , LOOP3| RET3用8XX51的P1口接8个LED发光二极管,由 INT0接一消抖按键开关,开始的LED亮,以后由INT0按键每中断一
3、次,下一个LED亮,顺序下移,且每次只一个LED亮,周而复始。请编制程序。参考程序: ORG 0000H AJMP MAIN ORG 0003H RL A ;中断服务 MOV P1,A RETI MAIN: MOV A,#0FFH。 MOV P1,A ;第一灯亮 SETB EA SETB EX0 ;允许INT0外部中断 SETB IT0 ;中断触发方式为下降沿触发 SJMP $ ;等待中断4.设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。MOV 30H,#0MOV 31H,#0MOV 32H,#0:M
4、OV DPTR ,#2000HMOV R1,#100 L4: MOVX A,DPTR INC DPTR CJNE A,#0,L1 INC 32H SJMP L2 L2: JC L3 INC 30H SJMP L2¥ L3: INC 31H L2: DJNZ R1,L4 SJMP $5.编程将内部数据存储器20H24H单元压缩的BCD码转换成ASC存放在于25H开始的单元。参考程序:注意压缩的BCD码为一个字节占两位BCD码。 ORG 0000H MOV R7,#05H ;R7为转换字节数 MOV R0,#20H ;R0为源操作数地址 MOV R1,#25H ;R1为目的操作数地址 NE: MO
5、V A,R0% ANL A,#0FH ;先取低位BCD码 ADD A,#30H ;将BCD码转换成ASC码 MOV R1,A INC R1 MOV A,R0 ANL A,#0F0H ;取高位BCD码 SWAP A ;半字节交换 ADD A,#30H ;将高位BCD码转换成ASC码 MOV R1,A INC R0 INC R1 DJNZ R7,NE SJMP $ END编程题,另外加上第4章课件上的例子。三、程序解释(每小题5分,共10分)1ORG 0200H MOV DPTR,#1000H / MOV R0,#20H LOOP: MOVX A,DPTR MOV R0,A INC DPTR IN
6、C R0 CJNE R0,#71H,LOOP SJMP $程序功能:把片外数据存储器1000H1050H中的内容传送到片内数据存储器 20H70H中。#2 ORG 0200HMOV A,R0 ANL A,#0FH MOV DPTR,#TAB MOVC A,A+DPTR MOV R0,A SJMP $ TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H; 09的ASC码 DB 41H,42H,43H,44H,45H,46H ;AF的ASC码。程序功能:利用查表的方法实现RO中的十六进制数转换为ASC码对每小题程序中划线的指令含义(或指令作用)进行解释,
7、并说明程序的作用。*1. 程序解释 ORG 100H MOV A,R0 ;R0的内容送A ANL A,#0FH MOV R1,A MOV A,R0 SWAP A ;A的内容高低4位交换 # ANL A,#0FH MOV R2,A SJMP $ ;等待 END该程序的作用是:将原R0中数据按照高低4位分成两个字节,低位字节保存在R1中,高位字节保存到R2中。2. 程序解释 ORG 30HMOV R0,#data1 ; data1送R0 MOV R1,#data2 MOV R2,#2。 CLR CLOOP: MOV A,R0SUBB A,R1 ;(A)-(C)-(R1)A MOV R0,A INC
8、 R0 INC R1DJNZ R2,LOOP ;(R2)-1不等于零,跳LOOP处 SJMP $ END该程序的作用是:将data1中的双字节数据减去data2中的双字节数据,结果保存到data1中3. 程序解释 ORG 30HVARDATA 30HFUNC DATA 31H MOV A,VAR ;30单元的内容送A JZ DONE ;A为零转移 JNB ,POSI ;A的最高位为0(正数)转移 MOV A,#0FFH ;提示:0FFH表示-1 SJMP DONE -POSI: MOV A, #01H DONE: MOV FUNC,A SJMP $ END该程序的作用是:判断30H单元中的内容
9、,结果放在31H单元中。大于0放1,小于0放-1,等于零放0。 4. 程序解释 ORG 100HMOV A, R3 RL A ;A左循环一位(即乘2) MOV DPTR,#BRTAB ;绝对转移地址表起始地址送DPTR JMP A+DPTR ;(PC)=(A)+(DPTR) BRTAB:AJMP ROUT000 AJMP ROUT001AJMP ROUT002 AJMP ROUT127 END该程序的作用是:本程序完成128分支转移操作,根据R3中的数值转移到。相应的128个分支程序中。5. 程序解释 ORG 0030H MOV R0, #22H ; 立即数22H送R0 MOV R0, #00
10、H INC R0 ; R0中的内容加1 MOV R0, #01H INC R0 MOV R0, #02H ; 02H送24H单元 SJMP $ END该程序的作用是:向单片机内部RAM的22H,23H,24H单元分别送数据00,01,02。 6. 程序解释 ORG 0030H MOV A, 20H MOV B, 21H DIV AB ; A除以B MOV 31H, A ; 商送30H单元 IMOV 31H,B ; 余数送31H单元 / SJMP $ END该程序的作用是:将20H单元中有一个二进制数除以21H单元中二进制数,商保存到30H单元,余数保存到31H。7. 程序解释CHENGJI D
11、ATA 1000HGRADA DATA 20HGRADB DATA 21H MOV GRADA,#00H MOV GRADB,#00H MOV R2,#100 ; MOV DPTR,#CHENGJI ;1000H送DPTR LOOP: MOVX A,DPTRCJNE A,#60,LOOP1 LOOP1: JNC NEXT1INC GRADB ;21H单元的内容加1 SJMP NEXTNEXT1: INC GRADANEXT: INC DPTR DJNZ R2,LOOP ;(R2)-1R2 不为零,转移 SJMP $) END该程序的作用是 本程序完成对100个数(如100个学生成绩)的过滤统计
12、,成绩在60以上的学生统计到GRADA,60的学生统计到GRADB。8. 程序解释LEN DATA 20HSUM DATA 21H BLOCK DATA 22HCLRA ;A清0 MOV R2,LEN MOV R1,#BLOCK LOOP:ADD A,R1 ;(A)+(R1)A | INC R1CHECK:DJNZ R2,LOOP ;LEN个单元未加完,继续 MOV SUM,A SJMP $ END该程序的作用是:完成BLOCK单元开始的LEN单元中数据个数的累加,累加结果保存到SUM单元中。 9. 程序解释XX DATA 40HYY DATA 41H MOV A,XX JZ DONE MOV
13、 R0,#0FFH ;提示:0FFH表示-1 JNB ,NEG ;若A 0,则转向NEG MOV R0,#01H ; 01送R0 NEG: MOV A, R0DONE: MOV YY,A ;(A)送41H单元 SJMP $ END该程序的作用是:判断40H单元中的内容,结果放在41H单元中。大于0放1,小于0放-1,等于0放0。 10. 程序解释ONE DATA 30HTWO DATA 31H;TWO地址定义为31HMAX DATA 32H CLR C;C清零MOV A,ONESUBB A,TWO;(A)-(31H)结果送AJNC XMAXYMAX:MOV A,TWOSJMP DONE!XMA
14、X:MOV A,ONEDONE: MOV MAX,A该程序的作用是:本程序完成ONE和TWO的两个单元中的数的比较,大数存入MAX单元中。 11. 程序解释BLOCK1 DATA 20HBLOCK2 DATA 40H MOV R0,#BLOCK1 MOV R1,#BLOCK2: MOV R2,#03 CLR CLOOP: MOV A,R0 ;被加数送A ADDC A,R1 ;带进位加法 MOV R0,A ;和送(R0) INC R0 INC R1 DJNZ R2,LOOP1 SJMP $ END-该程序的作用是:内部RAM中BLOCK1(20H)开始的三字节数与BLOCK2(40H)开始的两个
15、三字节数相加,和数存放到BLOCK1开始的单元。 12. 程序解释SHIFT: MOV DPTR,#TABJ MOV A,R2 RL A ;A乘2 ADD A,R2 JMP A+DPTR;跳转到(A)+(DPTR)PCTABJ: LJMP PRG0;跳转到PRG0 LJMP PRG1 LJMP PRGN该程序的作用是:根据内部RAM中R2数据转向不同的子程序,R2=0转PRG0,R2=1转PRG1, R2=N转PRGN 13. 程序解释START: CLR AMOV R2,#10 MOV R1,#21H ;21H送R1 NEXT: ADD A,R1 ;(A)+(R1)A INC R1 DJNZ
16、 R2,NEXT ;未加完,跳转 MOV 22H,A SJMP $ END该程序的作用是:完成21H单元开始的10个数据块的累加,结果保存到22H单元。14. 程序解释LEN DATA 20HMAX DATA 21H ADDR DATA 30H MOV MAX,#00H MOV R0,#ADDR LOOP: MOV A,R0) CJNE A,MAX,NEXT1 ;(A)与(MAX)比较,不等去NEXTNEXT1: JC NEXT ;C=1 去NEXT MOV MAX,ANEXT: INC R0 ;R0内容加1 DJNZ LEN,LOOP SJMP $ END该程序的作用是:内部RAM中ADDR
17、(30H)开始的x个数据的比较,将最大的数字送MAX单元。x由LEN(20H)单元给出。 15. 程序解释 MOV A,R0 ANL A,#0FH ;0FH与A相与,结果送A MOV DPTR,#ASCTAB MOVC A,A+DPTR ;查表 MOV R0,A ; 查表结果存入R0 SJMP $ASCTAB:DB 0, 1, 2, 3, 4 DB 5, 6, 7, 8, 9 DB A, B, C, D, E , F END该程序的作用是:将R0中低4位的0F的十六进制数据转换成ASCTAB中的编码存放到R0中。!16. 程序解释 ORG 100HMERG:MOVX A,R0 ; 读片外RAM
18、第一字节 ANL A,#0FH SWAP A ;高低4位相互交换 MOV B,A INC R0MOVX A,R0 ANL A,#0FH ORL A,B ;A或B, 结果送A ; DEC R0 MOVX R0,A SJMP $ END该程序的作用是:将R0指向的两个字节的低4位和并为一个字节,保存到原R0指向的存储单元。 17. 程序解释START:MOV DPTR,#DTATABMOV A,R4 ;(R4)A ADD A,DPL ;(DPL)+(A)A MOV DPL,ACLR A ;清AADDC A,DPHMOV DPH,A CLR A MOVC A,A+DPTR MOV R5,A RETD
19、TATAB: DB ;元素表格,高字节在前 DB END该程序的作用是:根据R4中的内容(元素序号)在DTATAB表格中查表,将查表得到的数据存入R5中。18. 程序解释START: MOV A, R0 ACALL SQR ;调用子程SQR MOV R2,A MOV A, R1 ACALL SQR ADD A,R2 ;(R2)+(A)A MOV R2,A SJMP $:SQR: ADD A,#01H MOVC A,A+PC ;查平方表 RETSQRTAB:DB 0,1,4,9,16 ;平方表 DB 25,36,49,64,81 END该程序的作用是:将R0和R1中的两个个位数进行平方元算,然后
20、相加,和存入R2中。19. 程序解释MOV R2,#0AH$MOV R0,#50HCLR ALOOP: MOV R0,A ;(A)(R0) INC R0DJNZ R2,LOOP ;(R2)-1不等于0,跳转 RET ;子程序返回 END 该程序的作用是: 将50H59H单元置0 20. 程序解释CONT: MOV R0, #10 ;10送R0 ) MOV 31H,#00HMOV R1,#01HCLOP: MOV A,R1CLR CRLC A ;乘2 ADD A,31H ;(A)+(31H)结果送A MOV 31H,A INC R1 DJNZ R0,CLOPRET】END该程序的作用是: 将11
21、0十个数乘2后再累加,结果送31H单元。 21. 程序解释DLAY: MOV R7,#02H ;02H送R7 DL: MOV R6,#0FFHDL1: DJNZ R6,DL1 ;(R6)-1不为零转移。DJNZ R7,DL RETEND ;程序结束伪指令 该程序的作用是:利用R6,R7实现双循环延时子程序22. 程序解释MATH DATA 1000H PASS DATA 20HNOPASS DATA 21H MOV PASS,#00H MOV NOPASS,#00H MOV R2,#0C8H MOV DPTR,#MATHLOOP: MOVX A, DPTR ;片外单元(DPTR)A】 CJNE
22、 A,#60,LOOP1 ;(A)不等于60转移 LOOP1: JNC NEXT1NEXT: INC NOPASS SJMP NEXT2NEXT1: INC PASS ;PASS单元内容加1 NEXT2: INC DPTR DJNZ R2,LOOP RET END该程序的作用是:完成1000H开始的200(C8H)个数的过滤统计,在60及以上的统计到PASS,60的到NOPASS。 ?23. 程序解释CLEAN:MOV DPTR,#1000H ; 设置数据区首地址 MOV R2,#51HCLR ACLOOP:MOVX DPTR, A ; 0 (DPTR)INC DPTR DJNZ R2,CLO
23、OP ; R2-1不为零转移 RET END该程序的作用是:将外部RAM1000H1050H单元的内容清零。24. 程序解释DMOV: MOV DPTR,#2000H MOV R2,#00H DLOOP:MOVX A,DPTR ;设置源数据区首地址MOV DPH,#30H ;置目的数据区高8位地址 MOVX DPTR,A MOV DPH,#20H INC DPTR ;指向下一个数据单元 DJNZ R2,DLOOP END该程序的作用是:将2000H20FFH的数据块传送到3000H30FFH单元 25. 程序解释LOK1: MOV 21H,0 MOV R2,#08H;置统计次数MOV A,20
24、HLOOP: RLC A;A的内容带进位作循环JNC LP1 INC 21H:LP1: DJNZ R2,LOOP;次数未完继续 RET该程序的作用是:求20H单元数据中”1”的个数,并将统计结果存入21H。 26. 程序解释SUM DATA 31HBLOCK DATA 33H CLR A CLR C MOV SUM,A MOV SUM+1,A MOV R2,#10MOV R1,#BLOCK ;33H送R1LOOP: MOV A,SUM ADD A,R1 ;(A)+(R1)A MOV SUM,A MOV A,SUM+1ADDC A,0 ;加进位位到高字节 MOV SUM+1,A INC R1 D
25、JNZ R2,LOOP SJMP $ END该程序的作用是:完成BLOCK开始的10个字节数据的累加,结果(双字节)保存到(SUM+1)(SUM)。27. 程序解释 ORG 0000H SJMP MAIN;跳转到MAINORG 0003H .】 ORG 0030HMain: ;主程序SUBINT0: RETI ;INT0中断返回SUB_T0: SUB_INT1: SUB_T1: SUB_UART: 该程序的作用是:8031/8051系统程序框架,包括主程序及全部中断服务程序框架。28. 程序解释!TB: MOV A,R2 ADD A,R2 MOV R3,A ADD A,#6 MOVC A,A+
26、PC;查第一字节 XCH A,R3;交换A,R3内容,保存在R3 ADD A,#3 MOVC A,A+PC MOV R4,A RETTAB: DW 1520,3721, DW 该程序的作用是:根据R2内容为索引,在TAB检索数据,检索结果存放到R3R4中。(TAB中内容为双字节数据) 29. 程序解释DATLEN DATA 21HSEACH:MOV R0,#30H ;30H送R0 MOV 20H,#0FFHSLOP: MOV A,R0CJNE A,20H,NEXT ;A与20H单元内容比较 NEXT: JNC SLP1 ;(A)大,跳转 MOV 20H,ASLP1: INC R0DJNZ DA
27、TLEN,SLOP RET END该程序的作用是:将30H开始的DATLEN个数据中最小的数搜出,保存到20H单元。30. 程序解释 ORG 100HDATAX DATA 10HDATAY DATA 11H。 CLR C ;清C MOV A,DATAX RLC A ;A左循环 JNC POSI CLR A SJMP DONEPOSI: MOV A,#01HDONE: MOV DATAY,A ;(A)送DATAY SJMP $ END该程序的作用是: 判断10H单元的内容,结果送11单元,大于等于零时送1,小于零时送零。 31. 程序解释 ORG 100H MOV A,R0 CJNE A,#3AH,NEXT1;(A)与3AH比较 JNC ERR CJNE A,#30H JC ERR;有借位,跳转 CLR CSUBB A,#30H;转换ASCII码为十进制数字* SJMP DONEERR: MOV A,#0FFHDONE: MOV R0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1