单片机编程练习题

合集下载

单片机 11道编程例题及答案

单片机  11道编程例题及答案

1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。

试编程实现。

ORG 0030H MOV R0,#inbuf MOV R1,#outbuf MOV R4,#10HLOOP:MOV A,@R0 ; 从内部RAM取数 CJNE A,#0DH,LL ;是否为回车符CRSJMP STOP ;是转停止传送 LL: MOVX @R1,A ;不是则传送到外部RAMINC R0 INC R1 DJNZ R4,LL;沒传送完则循环 STOP: SJMP $2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。

编程实现在表中找出最小数。

(3AH存放在运行程序时的最小的数)ORG 0030HMOV R0,#listMOV A,@R0 ;取第一个正数LOOP: INC R0 ;指向下一个正数MOV 3AH,@R0CJNE A,3AH,CHK ;前一个数与后一个数比较CHK: JC LOOP1 ;前一个数小,则转MOV A,@R0 ;前一个数大,取后一个数LOOP1: XCH A,3AHCJNE A,#0FFH,LOOPXCH A,3AH ;取最小数MOV 3BH,A SJMP $3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。

若X为正奇数,Z =X+Y;若X为正偶数,Z =X∨Y;若X为负奇数,Z =X∧Y;若X为负偶数,Z =X⊕Y。

分析:负数:第7位为1,正数:第7位为0 奇数:第0位为1,偶数:第0位为0 ORG 0000H MOV A,20H CLR C RL A JC FS ;移到负数处处理RR A RR A ;第0位移到C 再判定一下是不是1 JC ZJS ;到正奇数处MOV A,20H ORL A,21H MOV 22H,A SJMP OKZJS: MOV A,20H ADD A,21H MOV 22H,A SJMP OKFS: MOV A,20H CLR C RR A JC FJS ;第0位是1,移到正奇数处理MOV A,20H XRL A,21H MOV 22H,A SJMP OKFJS: MOV A,20H ANL A,21H MOV 22H,A OK: END4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。

51单片机c语言考试题目及答案

51单片机c语言考试题目及答案

51单片机c语言考试题目及答案一、选择题(每题2分,共10分)1. 下列关于51单片机的描述,错误的是()。

A. 51单片机是一种8位微控制器B. 51单片机具有丰富的I/O端口C. 51单片机的内部RAM是256字节D. 51单片机的时钟频率不能超过12MHz答案:D2. 在51单片机中,下列哪个寄存器用于存储当前正在执行的指令的地址?()A. SPB. PCC. DPTRD. PSW答案:B3. 51单片机的定时器/计数器可以工作在以下哪种模式?()A. 定时模式B. 计数模式C. 定时和计数模式D. 以上都是答案:D4. 51单片机的中断向量表中,外部中断0的中断向量地址是()。

A. 0003HB. 000BHC. 0013HD. 001BH答案:B5. 在51单片机的C语言编程中,下列哪个关键字用于定义一个函数?()A. intB. voidC. functionD. define答案:A二、填空题(每题2分,共10分)1. 51单片机的内部RAM分为______区和______区。

答案:工作寄存器;位寻址2. 51单片机的定时器/计数器0和定时器/计数器1的中断优先级分别是______和______。

答案:低;高3. 在51单片机的C语言编程中,使用______关键字可以定义一个全局变量。

答案:extern4. 51单片机的EA位是______位,它控制着______中断的总开关。

答案:总中断;所有5. 51单片机的定时器/计数器溢出时,会自动向______寄存器写入______。

答案:计数器;1三、简答题(每题5分,共20分)1. 简述51单片机的中断系统是如何工作的?答案:51单片机的中断系统由中断向量表、中断优先级和中断服务程序组成。

当一个中断事件发生时,单片机会自动将当前程序的地址存入堆栈,然后跳转到中断向量表中对应的中断服务程序地址执行中断服务程序。

中断服务程序执行完毕后,单片机会从堆栈中恢复程序的地址,继续执行被中断的程序。

51单片机c语言考试题和答案

51单片机c语言考试题和答案

51单片机c语言考试题和答案一、单项选择题(每题2分,共20分)1. 51单片机中,以下哪个寄存器是用于存储程序计数器(PC)的值?A. DPTRB. SPC. PCD. ACC答案:C2. 在51单片机中,以下哪个指令用于将累加器A的内容传送到外部数据存储器?A. MOV A, @R0B. MOV @R0, AC. MOV A, #dataD. MOV DPTR, #address答案:B3. 51单片机的定时器/计数器有几种工作模式?A. 2种B. 3种C. 4种D. 5种答案:C4. 51单片机中,以下哪个指令用于将立即数传送到累加器A?A. MOV A, #dataB. MOV A, @R0C. MOV A, R0D. MOV A, DPTR答案:A5. 51单片机的串行通信中,以下哪个寄存器用于存储串行数据?A. TCONB. SCONC. PCOND. IE答案:B6. 51单片机中,以下哪个指令用于将累加器A的内容与寄存器R0的内容进行异或操作?A. XOR A, R0B. ORL A, R0C. ANL A, R0D. CPL A答案:A进行逻辑与操作?A. ANL A, #dataB. ORL A, #dataC. XRL A, #dataD. CPL A答案:A8. 51单片机中,以下哪个指令用于将累加器A的内容与寄存器R0的内容进行逻辑或操作?A. ORL A, R0B. ANL A, R0C. XRL A, R0D. CPL A答案:AR0的内容进行逻辑异或操作?A. ORL A, R0B. ANL A, R0C. XRL A, R0D. CPL A答案:C10. 51单片机中,以下哪个指令用于将累加器A的内容与寄存器R0的内容进行逻辑非操作?A. ORL A, R0B. ANL A, R0C. XRL A, R0D. CPL A答案:D二、填空题(每题2分,共20分)1. 51单片机的外部中断有______个,分别是INT0和INT1。

51单片机c语言考试题目及答案

51单片机c语言考试题目及答案

51单片机c语言考试题目及答案一、单项选择题(每题2分,共20分)1. 51单片机中,以下哪个寄存器用于存储程序计数器(PC)?A. R0B. SPC. DPTRD. PC答案:D2. 在51单片机中,哪个寄存器用于存储堆栈指针?A. R0B. SPC. DPTRD. PC答案:B3. 51单片机的定时器/计数器有几种工作模式?A. 2种B. 3种C. 4种D. 5种答案:C4. 51单片机中,哪个指令用于将累加器A的内容送入外部数据存储器?A. MOV A, #dataB. MOV A, @R0C. MOVX @DPTR, AD. MOVX A, @DPTR答案:C5. 51单片机中,哪个指令用于将累加器A的内容送入寄存器R0?A. MOV A, R0B. MOV R0, AC. MOV A, #dataD. MOVX @DPTR, A答案:B6. 51单片机中,哪个指令用于将立即数送入累加器A?A. MOV A, R0B. MOV A, #dataC. MOVX @DPTR, AD. MOVX A, @DPTR答案:B7. 51单片机中,哪个指令用于将累加器A的内容与寄存器R0的内容进行逻辑“或”操作?A. ORL A, R0B. ORL A, #dataC. ORL @R0, AD. ORL A, @R0答案:A8. 51单片机中,哪个指令用于将累加器A的内容与立即数进行逻辑“与”操作?A. ANL A, R0B. ANL A, #dataC. ANL @R0, AD. ANL A, @R0答案:B9. 51单片机中,哪个指令用于将累加器A的内容与寄存器R0的内容进行逻辑“异或”操作?A. XRL A, R0B. XRL A, #dataC. XRL @R0, AD. XRL A, @R0答案:A10. 51单片机中,哪个指令用于将累加器A的内容与寄存器R0的内容进行逻辑“非”操作?A. CPL AB. CPL R0C. CPL @R0D. CPL A, R0答案:A二、填空题(每题2分,共20分)1. 51单片机的内部RAM共有______字节。

单片机试题库(编程题)

单片机试题库(编程题)

编程题:2.编一个子程序,将寄存器R0中的内容*10(积<256)3.编程将片内RAM 30H单元开始的15B的数据送到片外RAM 3000H开始的单元中去.4.用查表法编一子程序,将40H单元中的BCD码转换成ASCII码.4.片内RAM50H、51H单元中有一个10B的二进制数,高位在前,低位在后,请编程将其求补,存回原单元中去。

5.片内RAM30H开始的单元中有10B的二进制数,请编程求它们的和。

6.R1中存有一BCD码,请编程将它转换成ASKII码,存入外RAM1000H单元中去。

7.编一个程序,将累加器中的一个字符从串行接口发送出去。

8.片外RAM2000H开始的单元中有5B的数据,编程将它们传送到片内RAM20H开始的单元中去。

9 用查表法编一子程序,将R3中的BCD码转换成ASKII码。

10.片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。

11.编程将片外RAM3000H开始的20B的数据传送到片内RAM30H开始的单元中。

12.编程将R1、R2中的16位二进制数增1后送回原单元。

13.编程将片内RAM40H开始的单元存放的10B的二进制数传送到片外RAM4000H开始的单元中去。

14.编一子程序,从串行接口接受一个数据。

15.编写将30H和31H单元中2B二进制数乘2的子程序。

16.片外RAM2000H单元中有一BCD码,编程将其转换成ASKII码。

17.试编制单字节BCD码数的减法程序。

18.利用调子程序的方法,进行两个4B无符号数相加。

请编主程序及子程序。

19.若图11-2中数据为无符号数,求数据中最大值送A 。

编程并注释。

图11-2 片外 RAM中的数据块片外 RAM0001H┆20. 若图11-2中数据块是有符号数,求正数个数。

编程并注释。

21. 若图11-2中数据块为无符号数,求其累加和。

编程并注释。

22.已知20H单元有一位十进制数,通过查表找出与其对应的共阴极七段码,并存于30H单元。

《单片机》编程题题库

《单片机》编程题题库

《单片机原理及应用》编程题题库六、编程(每题10分)1、内部RAM 30H和31H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD 码(高位在前)并存入外部RAM 2300H单元中。

2、设单片机的晶体震荡频率为12MHz,利用定时器T0编程由P1.2输出周期为10mS的方波。

(要求:T0工作在方式1下,采用中断方式工作)3、将存放在内部RAM 30H-35H单元的压缩型BCD码转换成相应的ASCII码,依次存放到外部RAM 2100H开始的单元区中。

4、已知8051单片机应用系统的晶体振荡频率为12MHz,请利用定时器T0实现在P1.0引脚上输出周期为100mS的方波。

(要求:采用中断方式,T0工作在方式1下)5、设8031单片机应用系统的晶振频率为12MHz,请利用T0在P1.0和P1.1引脚上输出频率为20Hz、互补(两个波形互为反相)的方波。

要求:采用中断方式,T0工作在方式1。

6、内部RAM 20H和30H开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM 2000H开始的单元中。

7、8031单片机应用系统的晶体振荡器频率为12MHz,请利用定时器T0编程实现在P1.7引脚输出频率为20Hz的方波。

要求:采用中断方式,T0工作在方式1下。

8、请编写多字节无符号数减法程序。

被减数存放在内部RAM 20H开始的8个单元中,减数存放在内部RAM 30H开始的8个单元,请将差存放到外部RAM 2000H开始的8个单元中,借位存放到OV标志中。

注意:所有数据均按照从低字节到高字节的顺序存放。

9、内部RAM 40H和41H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD 码(高位在前)并存入外部RAM 2000H单元中。

10、设单片机的晶体振荡频率为12MHz,利用定时器T0编程由P1.0和P1.1输出周期为10mS、互补(互为反相)的方波。

c语言版单片机试题及答案

c语言版单片机试题及答案

c语言版单片机试题及答案一、选择题(每题2分,共10分)1. C语言中,以下哪个关键字用于定义结构体?A. structB. unionC. enumD. typedef答案:A2. 在C语言中,以下哪个运算符用于取地址?A. *B. &C. %D. #答案:B3. 下列关于C语言数组的描述,正确的是:A. 数组的大小在运行时确定B. 数组的大小在编译时确定C. 数组可以动态分配D. 数组可以存储不同类型的数据答案:B4. 在C语言中,以下哪个函数用于将字符串复制到另一个字符串?A. strcatB. strcpyC. strcmpD. strlen答案:B5. C语言中,以下哪个函数用于打开文件?A. fopenB. fcloseC. freadD. fwrite答案:A二、填空题(每题2分,共10分)1. 在C语言中,______关键字用于定义一个函数。

答案:void2. C语言中,______关键字用于声明一个指针。

答案:*3. 在C语言中,______关键字用于定义一个全局变量。

答案:extern4. C语言中,______关键字用于定义一个静态变量。

答案:static5. 在C语言中,______函数用于将一个整数转换为字符串。

答案:itoa三、简答题(每题5分,共20分)1. 请简述C语言中指针和数组的关系。

答案:在C语言中,指针和数组有密切的关系。

指针可以存储数组的地址,通过指针可以访问数组的元素。

数组名本身可以作为指向数组首元素的指针使用。

指针运算可以用来遍历数组。

2. 解释C语言中的预处理器指令#include的作用。

答案:预处理器指令#include用于将指定的文件包含到当前文件中。

这些文件通常是库文件或头文件,包含了函数声明、宏定义、类型定义等,使得程序可以调用这些文件中定义的内容。

3. 描述C语言中函数的调用过程。

答案:在C语言中,函数调用过程包括:调用语句、函数名、参数列表、函数执行和返回值。

单片机编程练习题(含部分答案)

单片机编程练习题(含部分答案)

单片机编程练习题(含部分答案)编程练习题1. 编一程序将片内存储单元20H~3FH单元的内容复制到40H~5FH单元。

MOV R0,#20H MOV R1,#40H MOV R7,#32LOOP: MOV A,@R0MOV @R1,A INC R0 INC R1DJNZ R7,LOOP SJMP $2. 编一程序将片内存储器40H单元的内容与41H单元的内容进行比较,若相等将50H置00H,若不等将50H置0FFH。

3. 在片内数据存储单元30H~4FH中存有32个同学的数学成绩,编一程序计算有多少同学成绩不及格(成绩低于60为不及格)。

若20H作为计数存储单元MOV R0,#30H MOV 20H,#0 MOV R0,#30H MOV R7,#32 MOV 20H,#0LOOP: MOV A,@R0 MOV R7,#32 SUBB A,#60 LOOP: CJNE @R0,#60,NE JNC GE NE: JNC GE INC 20H INC 20H GE: INC R0 GE: INC R0DJNZ R7,LOOP DJNZ R7,LOOPSJMP $ SJMP $4. 内部RAM中分别以地址20H和30H开始的连续16个单元,按顺序依次将两组中相应单元的内容相加(不考虑溢出),并将和存入外部RAM 2000H开始的单元中。

MOV R0,#20H MOV R1,#30H MOV DPTR,#2000H MOV R7,#16LOPP: MOV A,@R0ADD A,@R1 MOVX @DPTR,A INC R0 INC R1 INC DPTRDJNZ R7,LOOP SJMP $5. 设内部RAM 20H单元为数据块的起始地址,数据块长度为10H,数据为8位无符号数,试编程找出数据块中的最小值,并将其存入40H单元。

MOV R0,#20H MOV 40H,#255 MOV R7,#10HLOOP: MOV A,@R0SUBB A,40H JNC NJWMOV 40H,@R0NCW: INC R0DJNZ R7,LOOP SJMP $6. 比较两个ASCII码字符串是否相等。

单片机编程题(经典)

单片机编程题(经典)

一、编程题(每小题4分,共20分)1.已知在累加器A中存放一个BCD数(0~9),请编程实现一个查平方表的子程序。

2.请使用位操作指令实现下列逻辑操作:BIT=(10H∨P1.0)∧(11H∨CY)3.已知变量X存于VAR单元,函数值Y存于FUNC单元,按下式编程求Y值。

Y=10 01xxx> -=<⎧⎨⎪⎩⎪4.已知在R2中存放一个压缩的BCD码,请将它拆成二个BCD字节,结果存于SUM开始的单元中(低位在前)。

5.将存于外部RAM 8000H开始的50H数据传送0010H的区域,请编程实现。

编程题(每小题4分,共20分)1.SQR:1NC AMOVC A,@A+PCRETTAB:DB 0,1,4,9,16DB 25,36,49,64,812.ORL C,11HMOV 12H,CMOV C,P1.0ORL C,/10HANL C,12HMOV BIT,CRET3. MOV A,VARCJNE A,#0,COMPSJMP RES ;x=0,Y=0COMP:JNC POSI ;x>0,Y=1MOV A,#0FFH ;x<0,Y=-1SJMP RESPOSI:MOV A,#01HRES:MOV FUNC,ARET4.MOV R0,#SUMMOV A,R2ANL A,#OFHMOV @R0,A ;存低字节BCDMOV A,R2ANL A,#0F0HSWAP A1NC R0MOV @R0,A ;存高字节BCDRET5. MOV DPTR,#8000HMOV R0,#10HMOV R2,#50HLOOP:MOVX A,@DPTR ;取数MOVX @R0,A ;存数1NC DPTR1NC R0DJNZ R2,LOOPRET二、编程题(10分)将内部RAM20H为首的16个单元的8位无符号数排序写出程序,并作适当注释SORT: MOV R0, #20HMOV R7,#07HCLR TR0 ;交换标志位复位LOOP: MOV A,@R0MOV 2BH, AINC R0MOV 2AH, @R0CLR CSUBB A, @R0;比较前后两个数JC NEXT ;MOV @R0, 2BHDEC R0MOV @R0, 2AHINC R0SETB TR0 ;置交换标志位有效NEXT: DJNZ R7, LOOPJB TR0, SORT;若交换标志位有效,继续进行HERE: SJMP $三、编程序***1.请使用位操作指令,实现下列逻辑操作:P1.5=ACC.2∧P2.7∨ACC.1∧P2.02.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每个字节的最高位无条件地置1。

(完整word版)《单片机》编程题题库答案

(完整word版)《单片机》编程题题库答案

《单片机原理及应用》编程题题库参考答案六、编程(每题10分)1、内部RAM 30H和31H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD 码(高位在前)并存入外部RAM 2300H单元中。

解: ORG 0HLJMP STARTORG 30HSTART: MOV A,30HANL A,#0FHSWAP AMOV R0,AMOV A,31HANL A,#0FHORL A,R0MOV DPTR,#2300HMOVX @DPTR,AEND评分办法:不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

2、将存放在内部RAM 30H-35H单元的压缩型BCD码转换成相应的ASCII码,依次存放到外部RAM 2100H开始的单元区中。

ORG 0HLJMP STARTORG 30HSTART:MOV R0,#30HMOV R2,#06HMOV DPTR,#2100HLOOP:MOV A,@R0SWAP AANL A,#0FHORL A,#30HMOVX @DPTR,AINC DPTRMOV A,@R0ANL A,#0FHORL A,#30HMOVX @DPTR,AINC DPTRINC R0DJNZ R2,LOOPSJMP $END评分办法:不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

3、内部RAM 20H和30H开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM 2000H开始的单元中。

解:ORG 0LJMP STARTORG 30HSTART: MOV R0,#20HMOV R1,#30HMOV DPTR,#2000HMOV R2,#08H ;每个单元存放2个16进制数,故16个16进制数占用8个单元 LOOP: MOV A,@R0ADD A,@R1MOVX @DPTR,AINC R0INC R1INC DPTRDJNZ R2,LOOPSJMP $END评分办法:不要求写出程序的注释。

单片机考试试题及答案c语言

单片机考试试题及答案c语言

单片机考试试题及答案c语言一、选择题(每题2分,共20分)1. C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A2. 在C语言中,以下哪个函数用于将整数转换为字符串?A. sprintfB. atoiC. itoaD. strtol答案:C3. 下列关于C语言数组的描述中,错误的是?A. 数组可以存储不同类型的数据B. 数组的索引从0开始C. 数组在声明时必须指定大小D. 数组可以作为函数的参数答案:A4. 在C语言中,以下哪个运算符用于计算两个数的和?A. +B. -C. *D. /答案:A5. C语言中,以下哪个关键字用于定义一个函数?A. functionB. defC. intD. void答案:C6. 下列关于C语言指针的描述中,正确的是?A. 指针可以存储函数的地址B. 指针不能存储数组的地址C. 指针不能存储变量的地址D. 指针不能存储常量的地址答案:A7. 在C语言中,以下哪个关键字用于定义一个全局变量?A. externB. staticC. registerD. auto答案:A8. 下列关于C语言函数的描述中,错误的是?A. 函数可以返回一个值B. 函数可以没有返回值C. 函数可以没有参数D. 函数可以有多个返回值答案:D9. 在C语言中,以下哪个语句用于在循环中终止循环?A. breakB. continueC. returnD. exit答案:A10. 下列关于C语言中文件操作的描述中,错误的是?A. 使用fopen函数打开文件B. 使用fclose函数关闭文件C. 使用fread函数读取文件D. 使用fwrite函数写入文件答案:C二、填空题(每题2分,共20分)1. 在C语言中,用于定义单片机特殊功能寄存器的关键字是________。

答案:sfr2. C语言中,用于声明一个无符号字符的关键字是________。

单片机c语言试题和答案

单片机c语言试题和答案

单片机c语言试题和答案一、选择题1. 以下哪项不是8051单片机的特点?A. 内置8KB的ROMB. 内置256B的RAMC. 有4个定时器/计数器D. 支持外部中断答案:C(8051单片机有2个定时器/计数器)2. 在8051单片机中,以下哪个寄存器用于存放程序状态字?A. A寄存器B. B寄存器C. PSW寄存器D. SP寄存器答案:C(PSW寄存器用于存放程序状态字)3. 以下哪个指令用于将累加器A的值传递给B寄存器?A. MOV B, AB. MOV A, BC. ADD A, BD. SUBB A, B答案:A(MOV B, A)4. 在8051单片机中,以下哪个引脚用于外部中断0?A. P3.2B. P3.3C. P3.4D. P3.5答案:B(P3.3用于外部中断0)5. 以下哪个指令用于将立即数#0Ah传送到累加器A?A. MOV A, #0AhB. MOV A, 0AhC. ADD A, #0AhD. SUBB A, #0Ah答案:A(MOV A, #0Ah)二、填空题1. 8051单片机的时钟频率最高可达______MHz。

答案:12MHz2. 在8051单片机中,数据指针DPTR由______和______两个寄存器组成。

答案:DPL和DPH3. 在8051单片机中,外部中断1的优先级高于______。

答案:外部中断04. 以下程序的功能是______。

```cvoid delay(unsigned int ms) {unsigned int i, j;for(i = ms; i > 0; i--)for(j = 110; j > 0; j--);}```答案:实现一个简单的延时函数,延时时间为ms毫秒5. 在8051单片机中,以下指令序列实现的功能是______。

```cMOV A, #0FFhMOV B, #0FFhDEC ADEC BJNZ Label```答案:将A和B寄存器的值减1,直到它们都为0,然后跳转到Label标签处执行三、编程题1. 编写一个程序,使用8051单片机的定时器0实现一个1秒的定时器中断,并在中断服务程序中使P1.0引脚的电平翻转。

(完整word版)《单片机》编程题题库答案

(完整word版)《单片机》编程题题库答案

(完整word 版)《单片机》编程题题库答案第1页 共85页《单片机原理及应用》编程题题库参考答案六、编程(每题10分)1、 内部RAM 30H 和31H 单元中存放着2个0—9的ASCII 码(高位字节在前),请将其转换为压缩BCD 码(高位在前)并存入外部RAM 2300H 单元中。

解: ORG 0H LJMP START ORG 30H START : MOV A,30H ANL A,#0FH SWAP A MOV R0,A MOV A ,31HANL A ,#0FH ORL A,R0MOV DPTR,#2300H MOVX @DPTR ,A END评分办法:不要求写出程序的注释。

程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1—3分。

2、将存放在内部RAM 30H —35H 单元的压缩型BCD 码转换成相应的ASCII 码,依次存放到外部RAM 2100H 开始的单元区中.ORG 0H(完整word 版)《单片机》编程题题库答案第2页 共85页LJMP START ORG 30H START:MOV R0,#30H MOV R2,#06H MOV DPTR,#2100H LOOP :MOV A,@R0 SWAP A ANL A ,#0FH ORL A ,#30H MOVX @DPTR ,A INC DPTR MOV A ,@R0 ANL A,#0FHORL A ,#30H MOVX @DPTR ,A INC DPTR INC R0 DJNZ R2,LOOP SJMP $ END评分办法:不要求写出程序的注释.程序设计思路正确可得5分,指令完全写对可得10分。

若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。

(完整word 版)《单片机》编程题题库答案第3页 共85页3、内部RAM 20H 和30H 开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM 2000H 开始的单元中。

单片机编程综合测试试题及答案

单片机编程综合测试试题及答案

编程综合测试班级:组号姓名:一、基础知识填空:(每空2分,满分20分)1.调用头文件的关键字是include ;2.设X和Y是无符号字符型,且X=0x79,Y=0x63H,则X&&Y的值为 1 ,X&Y的值为0x61 。

3.sbit与bit的区别是sbit是端口的位定义,bit是定义一个位变量;4.一个工程中main 函数只允许出现的一次;5.若采用12MHz的晶体振荡器,则MCS-51单片机的机器周期为1us 。

6.有些程序中,在开始时对部分函数做了声明是因为后面的函数调用能找到他;7.写出共阳数码管显示0~9、A、b、c、d、E、F的十六进制数形0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc 6,0xa1,0x86,0x8e 。

8.判断按键是否按下时,为消除按键的机械抖动,一般在程序中需要添加延时函数。

9.字符常量的定义形式是“#define A 100;”,是对还是错。

#define A 100 (如果错,请写出正确答案)。

二、判断题,对的填“√”,错的填“×”(每题2分,满分20分)1.程序的执行是以主函数作为结束。

(√)2.break可用来实现循环体的中止。

(√)3.中断函数的调用是在满足中断的情况下,自动完成函数调用的。

(√)4.C51语言允许在复合语句内再定义局部变量。

(√)5.单片机的程序中,一定有一个死循环的程序,否则,会出现运行错。

(√)6.MCS-51系统可以没有串行通信电路。

(×)7.STC89C52RC单片机有3个中断源:外部中断、定时器中断、串行中断。

(×)8.所有定义在主函数之前的函数无需进行声明。

(×)9.若一个函数的返回类型为void,则表示其没有返回值。

(√)10.MCS-51单片机中,系统默认情况下,优先级最高的中断为ET0。

单片机原理编程题

单片机原理编程题

一.编程题(每题8分,共16分)1.设在内RAM 40H开场的存储区有假设干个字符和数字,最后一个为字符“$“〔并且只有一个,试统计这些字符数字的个数,结果存入30H单元中。

参考程序:ORG 0000HSTART: MOV R1,#40H ;R1作为地址指针CLR A ;A作为计数器LOOP: CJNE R1,#24H,NEXT ;与“$〞号比拟,不等转移SJMP NEXT1 ;找到“$“完毕循环NEXT: INC A ;计数器加1INC R1 ;指针加1SJMP LOOP ;循环NEXT1: INC A ;再参加〞$〞这个字符MOV 30H,A ;存结果END2.试编一程序,分别统计在内部RAM的30H~50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。

参考程序:ORG 0000HMOV 51H ,#0HMOV 52# ,#0HMOV R1 ,#30HMOV R0 ,#20HMOV A,R1INC R1ANL A , #01HJZ LOOP1INC 51HSJMP LOOP2LOOP1: INC 52HLOOP2: DJNZ R0 , LOOP3RET3.用8XX51的P1口接8个LED发光二极管,由INT0接一消抖按键开关,开场P1.0的LED亮,以后由INT0按键每中断一次,下一个LED亮,顺序下移,且每次只一个LED亮,周而复始。

请编制程序。

参考程序:ORG 0000HAJMP MAINORG 0003HRL A ;中断效劳MOV P1,ARETIMAIN: MOV A,#0FFHMOV P1,A ;第一灯亮SETB EASETB EX0 ;允许INT0外部中断SETB IT0 ;中断触发方式为下降沿触发SJMP $ ;等待中断4.设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。

单片机习题(指令与编程及答案)

单片机习题(指令与编程及答案)

单片机练习二一.单项选择题1. ORG 0003HLJMP 2000HORG 000BHLJMP 3000H当CPU响应外部中断0后,PC的值是( B )。

A.0003HB. 2000HC. 000BHD. 3000H3. MCS-51的相对转移指令的最大负跳距离为( B )。

A.2KBB. 128BC.127BD. 256B4. 以下运算中对溢出标志0V没有影响或不受影响的运算是( A )。

A.逻辑运算B. 符号数加减运算C. 比较数据大小运算D. 除法运算5. 产生PSEN信号的指令是( C )。

A . MOVX A ,@DPTR B. MOVX @DPTR, AC. MOVC A , @A+PCD. MOVX A, @A+DPTR6. MOVX A , @DPTR指令中的源操作数的寻址方式是( B )。

A.寄存器寻址B.寄存器间接寻址C.直接寻址D.立即寻址7. 将MCS-51的工作寄存器置成3区的指令是( B )。

A. MOV PSW , #13HB.MOV PSW , #18HC. SETB PSW.4 ,CLR PSW.3D.SETB PSW.3 ,CLR PSW.48. 指令AJMP的跳转范围是( C )。

A .256B B.1KB C.2KB D.64KB9. 6264芯片是( B )。

A.E2PROMB.RAM C .Flash ROM D .EPROM10. 下面那条指令产生WR信号( D )。

A.MOVX A , @DPTRB.MOVC A , @A+DPTRC.MOVC A , @A+PCD.MOVX @DPTR , A11. 执行LCALL 4000H指令时,MCS-51所完成的操作是( D )。

A.保护PCB.保护现场C.4000H →PCD.PC+3入栈,4000H → PC12. 下列指令中可能改变Cy的有(C )。

A.INC AB.CPL AC. RLC AD.MOV A , #data13.假定设置堆栈指针SP的值为36H,在执行指令PUSH 20H后,SP的值为( B )。

单片机练习题含答案

单片机练习题含答案

单片机练习题含答案一、单选题(共107题,每题1分,共107分)1.可编程接口芯片8155内部的定时/计数器是 ( ) 计数器。

A、加法B、可逆C、减法D、加减法正确答案:C2.累加器A的内容是85H,执行RL A 指令后累加器的内容变为( )。

A、42B、43C、0AD、0BH正确答案:D3.可编程接口芯片8155内部的定时/计数器是 ( ) 计数器。

A、加法B、减法C、加减法D、可逆正确答案:B4.下列设备中属于嵌入式系统的是 ( )A、MP4播放器B、服务器C、台式计算机D、笔记本电脑正确答案:A5.AT89C1051单片机的字长是 ( ) 位。

A、4B、8C、16D、32正确答案:B6.89C51单片机的字长是( )位。

A、32B、16C、8D、4正确答案:C7.下列特殊功能寄存器中可以位寻址的是 ( ) 。

A、IE(0A8B、DPH(83C、TH1(8DD、SP(81正确答案:A8.8031单片机的堆栈位于 ( ) 中。

A、内部RAMB、外部RAMC、程序存储器D、特殊功能寄存器正确答案:A9.MCS-51单片机复位后堆栈指针SP= ( ) 。

A、07B、0FC、7FD、0FF正确答案:A10.累加器A的内容是73H,执行SWAP A 指令后累加器的内容变为( )。

A、70B、37C、30D、0A0H正确答案:B11.累加器A的内容是73H,执行RR A 指令后累加器的内容变为( )。

A、0B9B、0C2C、39D、38H正确答案:A12.下列产品中属于嵌入式系统的是 ( ) 。

A、服务器B、笔记本计算机C、MP3D、Tablet正确答案:C13.MCS-51系列单片机的P0口除做为输入/输出接口使用外,还可以作为 ( ) 使用。

A、低8位地址总线和数据总线B、高8位地址总线C、控制总线D、读写控制线正确答案:A14.UART的中文含义是( )。

A、通用异步接收/发送器B、串行接口C、RS-232接口D、USB接口正确答案:A15.累加器A的内容是67H,执行RR A 指令后累加器的内容变为( ) 。

单片机编程练习题(含部分答案)

单片机编程练习题(含部分答案)

单片机编程练习题(含部分答案)单片机编程练习题(含部分答案)在单片机编程的学习过程中,练习题是非常重要的一部分。

通过完成各种编程练习,我们可以提高自己的编程能力,掌握单片机的各种功能和应用。

本文将介绍一些常见的单片机编程练习题,并提供部分答案,帮助读者更好地理解相关知识。

一、LED亮灯顺序控制题目描述:使用单片机控制4个LED灯按指定的顺序依次亮起。

解答思路:首先,我们需要定义4个LED灯的引脚,使用宏定义的方式可以方便地修改引脚号码。

然后,在主函数中通过设置引脚输出高电平或低电平的方式控制LED灯的亮灭状态。

可以使用延时函数来控制每个LED灯亮起的时间。

代码示例:```#include <reg51.h>#define LED1 P1_0#define LED2 P1_1#define LED3 P1_2#define LED4 P1_3void delay(unsigned int time) // 延时函数{unsigned int i, j;for (i = time; i > 0; i--)for (j = 110; j > 0; j--);}void main(){LED1 = 0; // LED1灭LED2 = 0; // LED2灭LED3 = 0; // LED3灭LED4 = 0; // LED4灭while (1){LED1 = 1; // LED1亮delay(1000); // 延时1秒LED1 = 0; // LED1灭LED2 = 1; // LED2亮delay(1000); // 延时1秒LED2 = 0; // LED2灭LED3 = 1; // LED3亮delay(1000); // 延时1秒LED3 = 0; // LED3灭LED4 = 1; // LED4亮delay(1000); // 延时1秒LED4 = 0; // LED4灭}}```二、数码管计数器题目描述:使用单片机控制数码管显示一个0~9的计数器。

c语言单片机试题及答案

c语言单片机试题及答案

c语言单片机试题及答案一、选择题(每题2分,共10分)1. 在C语言中,以下哪个关键字用于定义一个函数?A. intB. voidC. returnD. function答案:A2. 单片机的内部RAM中,哪个区域用于存储位地址?A. 直接地址区B. 间接地址区C. 位寻址区D. 扩展RAM区答案:C3. 下列哪个选项是C语言中正确的字符串定义方式?A. char str[] = "Hello";B. char str[5] = "Hello";C. char str[] = {"Hello"};D. char str[6] = {"Hello"};答案:A4. 在8051单片机中,哪个寄存器用于存储当前正在执行的程序的地址?A. ACCB. BC. PCD. SP答案:C5. C语言中,以下哪个选项是正确的数组定义?A. int a[] = {1, 2, 3};B. int a[3] = {1, 2, 3};C. int a = {1, 2, 3};D. int a[3] = {1};答案:A二、填空题(每题4分,共20分)1. 在C语言中,用于定义一个整型变量的关键字是________。

答案:int2. 8051单片机的外部中断0的中断向量地址是________。

答案:0003H3. 单片机的I/O口通常可以被配置为________或输出模式。

答案:输入4. 在C语言中,用于定义一个字符型数组的关键字是________。

答案:char5. 8051单片机的定时器/计数器0的控制寄存器是________。

答案:TMOD三、简答题(每题10分,共20分)1. 简述C语言中如何实现函数的递归调用。

答案:在C语言中,函数的递归调用是指一个函数在其定义中调用自身。

递归函数通常包含一个结束递归的条件,以防止无限递归。

例如,计算阶乘的函数可以定义为:```cint factorial(int n) {if (n == 0) return 1; // 递归结束条件return n * factorial(n - 1); // 递归调用}```2. 解释8051单片机的定时器/计数器的作用。

单片机编程题练习

单片机编程题练习

乙机发送,甲机接收。

请画出电路图并写出初始化发送(查询)和接收(中断方式)程序。

2、口线P1.0接一个发光二极管,由定时器0控制,用于演示1秒钟亮、1秒钟暗的效果。

3、给80C51单片机扩展一片6116,0809和8155,要求0809采用中断方式,8通道工作;采用138译码选择芯片。

请画出系统连接图,写出各芯片的地址范围并写出8155内各口及其内部的RAM地址范围。

4、已知系统的连接如图所示,试编写程序实现下列功能:(1).编写上电显示程序,显示“123456”。

(2).编写主程序,功能为:当有键按下(0~7号)时,都显示键号;无键按下,保持原有显示状态。

5、选用DAC0832芯片产生一个三角波,要求幅值为0~2.5V。

1200bps,甲机发送数据88H(查询方式),乙机接收(中断方式)。

请画出电路图并编程实现上述功能。

7、已知一单片机应用系统如下图所示。

试回答问题并编写显示程序,以1秒为间隔,亮暗相间,显示“88888888”。

(1).写出各口的地址和控制字A口地址:B口地址:C口地址:控制口地址:控制字:(2).显示程序8、已知ADC0809单片机的连接如下图所示,试写出启动0809第3通道A/D转换的程序段。

(1)、把外部2000H内容送到内部RAM的20H单元。

(2)、找出20H~22H三个单元中的最大数,放在A累加器中。

9、编写程序完成以下功能:每响应一次外部中断,发光二极管亮一秒钟。

六、简单编程题:(1)、用间接寻址方式,把外部20H内容送到内部RAM的20H单元。

(2)、依据第四题接线图,写出启动0809第3通道A/D转换的程序段。

(3)、编写串行口方式1串行发送初始化程序。

(省略波特率发生器初始化)。

10、假定甲乙机以方式1进行串行数据通信,晶振=6MHz,要求波特率为1200。

甲机发送,乙机接收。

请画出电路图并计算出波特率,写出初始化发送和接收程序。

11、当系统选用12MHz晶体振荡器时,由定时器0控制产生周期为4ms(脉冲宽度为2ms)的方波序列(采用中断方式),并由P1.0输出,请编写实验程序。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机编程练习题
第四章习题:
1、编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器中(任意位置)。

#include<reg51.h>
#include<math.h>
int movdata(char);
void main()
{
unsigned int xdata sum;
unsigned char *ptr,a,b;
ptr=0x20;
a=*ptr;
ptr=0x35;
b=*ptr;
sum=a*b;
}
2、8051的片内数据存储器25H单元中存放有一个0~10的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存中。

#include<reg51.h>
#include<math.h>
void main()
{
char n;
char *ptr;
float *ptr2;
float f;
ptr=0x25;
n=*ptr;
f=sqrt(n);
ptr2=0x30;
*ptr2=f;
}
3、将外部RAM 10H~15H单元的内容传送到内部RAM 10H~15H单元。

#include<reg51.h>
int movdata(char);
void main()
{
char n=6;
char *ptr1=0x10;
char xdata *ptr2;
ptr2=0x10;
while(n--)
{
*ptr1++=*ptr2++;
}
}
4、内部RAM 20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。

#include<reg51.h>
unsigned int x _at_ 0x20;
unsigned int y _at_ 0x22;
unsigned int z _at_ 0x24;
void main()
{
z=(x>y)?x:y;
}
第五章习题
1、编写出外部中断1为下跳沿触发的中断初始化程序。

#include<reg51.h>
void Int_init()
{IT1=1;
EA=1;
EX1=1;
}
2、有一外部中断源,接入端,当其中有中断请求时,要求CPU 把一个从内部RAM 30H 单元开始的50个字节的数据块传送到外部RAM 从1000H 开始的连续存储区。

请编写对应的程序。

#include<reg51.h>
void main(){
IT0=1 ;
EA=1;
EX0=1;
while(1) ;
}
void intx0() interrupt 0 using 1{
char * ptr1=0x30;
char xdata i, * ptr2=0x1000;
for(i=0;i<50;i++) *ptr2++=*ptr1++;
}
3、设fosc = 12MHz ,利用定时器,TO(工作在方式2)在P1.1引脚上获取输出周期为O.4ms 的方波信号,定时器溢出时采用中断方式处理,请编写,T0的初始化程序及中断服务程序。

#include<reg51.h>
sbit P1_1=P1^1; void timer0()interrupt 1 using 1{
0INT
P1_1=!P1_1;
}
void main(){
P1_1=0;
TMOD=0x02;
TH0=56;
TL0=56;
IE=0x82;
TR0=1;
for(;;){}
}
4、设fosc = 6MHz,要求每隔50ms,从内部RAM以30H开始的数据存储区传送一个字节数据到外部RAM以2000H开始的连续存储区,共传送50个数据。

要求:采用定时器T1以方式2实现定时,数据传送在中断服务程序中完成。

#include<reg51.h>
char intcnt=0;
char movcnt=0;
char *ptr1=0x30;
char xdata *ptr2=0x2000;
void timer1()interrupt 3 using 1{
intcnt++;
if(intcnt==100){ if(movcnt<50){ *ptr2++=*ptr1++; movcnt++;
}
else EX1=0; intcnt=0;
}
}
void main(){ TMOD=0x20;
TH1=6;
TL1=6;
IE=0x84;
TR1=1;
for(;;){}
}。

相关文档
最新文档