单片机编程练习题
- 格式:docx
- 大小:19.84 KB
- 文档页数:6
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语言考试题目及答案一、选择题(每题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语言考试题和答案一、单项选择题(每题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语言考试题目及答案一、单项选择题(每题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语言版单片机试题及答案一、选择题(每题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。
《单片机原理及应用》编程题题库参考答案六、编程(每题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评分办法:不要求写出程序的注释。
单片机编程练习题
第四章习题:
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(;;){}
}。