ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:249.10KB ,
资源ID:24481697      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24481697.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机原理编程题.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机原理编程题.docx

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