13个简单的单片机程序

13个简单的单片机程序
13个简单的单片机程序

单片机简答题

简答题 1、简述借用定时/计数器溢出中断作为外部中断的具体方法? 2、简述8051片内RAM的空间地址分配。 3、MCS-51外扩的程序存储器和数据存储器可以有相同的地址空间,但不会发生数据冲突,为什么? 4、简述直接位寻址区的空间分配,片内RAM中包含哪些可位寻址单元? 5、8051单片机的存储器在结构上有何特点?在物理和逻辑上各有哪几种地址空间?访问不同空间的指令格式有何区别? 6、8051单片机在片内有哪些主要逻辑功能部件?每个逻辑部件的主要功能是什么? 7、写出MCS-51的所有中断源,并说明说明哪些中断源在响应中断时,由硬件自动清除,哪些中断源必须用软件清除?它们的中断程序入口地址分别为什么? 8、8031的扩展存储器系统中,为什么P0口要接一个8位锁存器,而P2口却不接? 9、8051在什么条件下可响应中断? 10、什么是中断矢量?若某个中断源的中断服务程序的字节数超过8个单元,应如何处理?程序题: 1. 若要完成以下数据传送,如何应用MCS-51指令予以实现? (1)外部RAM 0020H单元内容送内部RAM 20H单元: (2)外部ROM 2000H单元内容送内部 RAM 20H单元: 2.编写程序段,用三种方法实现累加器A与寄存器B的内容交换。 3.编程将片内20H单元开始的30个数传送到片外RAM 3000H开始的单元中。 解: MOV R7 , #30 ;传送字节数给R7 ;R0指向片内20H单元 ;DPTR指向片外3000H单元 LOOP ;取数 ;将数据转存入片外RAM ;R0指向片内下一单元 ;DPTR指向片外下一单元 DJNZ R7,LOOP ;数据传送完否? 4.编程,从串行口接受一个字符。 答: START: ;定时器T1工作于模式2 MOV TL1 , # 0E8H ;设置波特率为1200b/s MOV TH1,#0E8H ;启动T1 MOV SCON,#50H ;串行口工作于方式1,允许接收 L1: JNB RI , L1 ;等待接收数据,未接收到数据,继续等待 ;接收到数据,清RI

一个单片机小程序编写

一个单片机小程序编写 单片机在家用电器和工业系统中应用广泛,下面给大家介绍一个单片机小程序的编写。 1、设计任务: 如果开关合上,L1亮,开关打开,L1熄灭,如图1所示。监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态。 2、电路原理图: 图1 3、系统板上硬件连线:如图1所示,图中VCC = +5V。 4、程序设计内容: (1)开关状态的检测过程: 开关状态是从单片机的P3.0端口输入信号,当拨开开关K1拨上去(开关断开),即输入高电平;当拨动开关K1拨下去(开关闭合),即输入低电平。可以采用JB BIT,REL 指令来完成对开关状态的检测即可。 (2)输出控制: 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮。我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5、程序框图:如图2所示。

图2 6、汇编源程序的编写: ORG 00H START: JB P3.0,D1 CLR P1.0 SJMP START D1: SETB P1.0 SJMP START END 7、用“keil软件编”写好汇编程序,然后转换成HEX文件并保存。 8、用“增强型A51编程器”把刚才写好的HEX文件烧写入单片机中。 9、把已写入程序的单片机,装入图1的电路,然后通电。当拨动开关K1拨下去(开关闭合),发光二极管L1亮;拨开开关K1拨上去(开关断开),发光二极管L1灭。说明刚才编写的程序达到了我们的设计要求。

单片机-- 简易计算器汇编程序

NAME T11 单片机--简易计算器汇编程序 ;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7 ; T11 8279键盘显示接口实验二 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV DPTR,#00CFE9H ;8279命令字 MOV A,#0D1H ;清显示 MOVX @DPTR,A LOOP1: MOVX A,@DPTR ANL A,#0FH JZ LOOP1 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R1,A ;保存键值加个F MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#80H ;选中LED1 MOVX @DPTR,A MOV A,R1 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB MOVC A,@A+DPTR ;取段显码 MOV DPTR,#0CFE8H ;写显示RAM MOVX @DPTR,A MOV DPTR,#0CFE9H ;写显示RAM命令 LOOP2: MOVX A,@DPTR ;输入显示符号 ANL A,#0FH JZ LOOP2 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R2,A ;保存键值 MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#81H ;选中LED2 MOVX @DPTR,A MOV A,R2 ANL A,#0FH ;取后半字节

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

单片机简答题汇总

单片机简答题汇总 1、计算机经历了几个时代? 电子管、晶体管、集成电路、大规模集成电路和超大规模集成电路、智能计算机。 2、冯诺依曼设计思想? a.计算机包括运算器、存储器、输入/输出设备。 b.内部采用二进制表示指令和代码。 c.将编号的程序送入内存储器中,然后启动计算机工作,能够顺序逐条取出指令和执 行指令。 3、MCS-51的内部结构? 8位CPU、8位并行I/O口、128个字节的内部RAM、21个SFR、4KB的内部ROM、一个全双工串行I/O口、2个16位定时器/计数器、5个中断源,2个中断优先级、 4、ROM和RAM ROM:片内4KB,地址范围0000H – 0FFFH 片外扩展64KB 地址范围0000H - FFFFH 片内外统一编址方式复位后PC为0 RAM:片内256字节地址范围00H – FFH 低128字节为一般RAM区00H-7FH 00H – 1FH 工作寄存器区,4组通用寄存器区,一组8个寄存器 20H - 2FH 位寻址区,也可字节寻址 30H – 7FH堆栈区和数据缓冲区 高128字节为SFR地址范围为80H- FFH 实现各种控制功能 5、堆栈?堆栈指针? 一种按照“先进后出”为原则的线性表数据结构。 存放堆栈的栈顶地址的寄存器(8位),系统复位后SP为07H。 6、单片机正常工作的条件? a.电源正常 b.时钟正常 c.复位正常 7、C51外扩的ROM和RAM可以有相同的地址空间,但不会发生数据冲突,为什么? 访问外扩的ROM和RAM的指令不同,所发出的控制信号也不同。读外部RAM时,RD/信号有效,写外部RAM时,WR/有效,读外部ROM时,PSEN/有效。在程序执行的过程中只能有一个信号有效,因此即使有相同的地址也不会发挥数据冲突。 8、C51外部引脚EA/的作用? EA/是内外部RAM的选通信号 EA/ = 0 时,只选择外部ROM EA/ = 1 时,PC<0FFFH时,选择内部ROM PC>0FFFH时,选择外部ROM 9、位寻址区? 内部RAM的20H – 2FH为位寻址区,位寻址范围为00H – 7FH SFR中地址能被8整除的字节地址单元,地址范围是80H – FFH 10、中断?中断响应和中断返回? 由于内部或外部的某种原因,CPU必须终止当前的程序,转去执行中断请求的那个外设

单片机考试小程序

编程题 1,清零程序 将片外数据存储器中5000h~500ffh单元全部清零 ORG OOOOH MOV DPTR, #5000H MOV R0,#00H CLR A LOOP: MOVX @DPTR,A INC DPTR DJNZ RO,LOOP HERE: SJMP HERH 2.试着编写程序,查找在内部 RAM的20h~40h单元中出现00h这一数据的次数将查到的结果存入41h单元 ORG 0000H MOV R0,#20H MOV R1,#21H MOV 41H,#00H LOOP: CJNE @RO,#00H,NEXT INC 41H NEXT: INC R0 DJNZ RI,LOOP HERE: SJMP HERE 3查找在内部RAM的30h~50单元中是否有0AAH这一数据,若有则将51H单元置为01H;若未找到;则将51H单元置为00H. ORG 0000H MOV R0,#30H MOV R1,#21H LOOP: CJNE @R0,0AAH,NEXT MOV 51H,#01H SJMP HERE NEXT: INC R0 DJNZ R1,LOOP MOV 51H,#00H HERE: SJMP HERE 4编写程序功能为把1000H开始的外部RAM单元中的数据送到内部RAM50H开始的单元中,数据的个数存放在了内部RAM60H单元。 ORG 0000H MOV DPTR #1000H MOV R0,#50H MOV R1,60H LOOP: MOVX A,@DPTR MOV 50H,A INC DPTR INC R0

DJNZ RI,LOOP HERE: SJMP HERE 5.编写请将ROM3000H单元内容送R7. ORG 0000H MOV DPTR, #3000H CLR A MOVC A ,@A+DPTR MOV R7,A END 6.片外RAM2000H单元内容送到片外RAM1000H的单元中。 ORG 0000H MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,,#1000H\ MOVX @DPTR,A 7.锯齿形波: ORG 2000H START: MOV R0,#0FEH MOV A,#00H LOOP: MOVX @R0,A INC A SJMP LOOP 8三角形波 ORG 2000H START MOV R0,#0FEH MOV A,#00H UP: MOVX @R0,A INC A JNZ UP DOWN: DEC A MOVX @DPTR,A JNZ DOWN SJMP UP

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 矩阵键盘的扫描 —

》 图矩阵键盘图 如图所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。 《

单片机原理复习简答题答案

一、简述题 1.MCS-51单片机芯片包含哪些主要逻辑功能部件?(习题2-1) (1)中央处理器(CPU):运算器--用于实现算术和逻辑运算;控制器:产生计算机所需的时序,控制程序自动执行 (2)内部数据存储器:用于存放可读写的数据 (3)内部程序存储器:用于存放程序的机器代码和常数 (4)并行I/O口:实现数据的输入/输出 (5)定时/计数器:用于实现定时和计数功能 (6)串行口:一个全双工的口,可实现数据的串行传送 (7)中断控制:实现单片机的中断判优、中断响应、中断查询等控制 (8)时钟电路:为单片机提供时钟脉冲序列 2.程序计数器PC的作用是什么?什么情况下会使用PC的值?(习题2-4) 程序计数器PC是位于片内的一个16位的寄存器,它专门用来存放当前要执行的指令地址,且能够自动加1,具有特殊功能。是一个不可寻址的特殊功能寄存器。其低8位地址经P0口输出,高8为地址经P2口输出。 3.MCS-51单片机设置有四组工作寄存器,这样做的目的是什么?请举例说明。?? 如何选择MCS-51单片机的当前工作寄存器组?(习题2-7) MCS-51的当前工作寄存器组是由程序状态寄存器PSW中的RS1、RS2位的状态决定的。工作寄存器区的选择: RS1,RS0=00 则选择了工作寄存器组0区R0~R7对应的单元地址:00H~07H RS1,RS0=01 则选择了工作寄存器组1区R0~R7对应的单元地址:08H~0FH RS1,RS0=10 则选择了工作寄存器组2区R0~R7对应的单元地址:10H~17H RS1,RS0=11 则选择了工作寄存器组3区R0~R7对应的单元地址:18H~1FH 4.简述MCS-51单片机的位寻址空间。(习题2-11) MCS-51单片机的位寻址空间由两部分构成:一部分为内部RAM位寻址区的20-2FH的16个单元的128位,位地址范围:00~7FH;另一部分为单元地址尾数为0和8的SFR中的位构成的位寻址区,共83位,位地址范围是80~0FFH。 MCS-51单片机位寻址空间共有211个位,位地址范围:00H~0FFH 5.什么是时钟周期、机器周期、指令周期?如何计算机器周期?晶振频率为12M时,计 算时钟周期、机器周期。(习题2-9) 时钟信号的周期称为S状态,它是晶振周期的两倍,即一个时钟周期(TS)包含2个晶振周期;指令周期(TI):执行一条指令所用的时间; 机器周期(TM):CPU完成一个基本操作所用的时间。(每12个时钟周期为1个机器周期)当晶振频率为12MHz时,时钟周期TS=2/f=0.17μs,机器周期TM=12/f=1μs 6.简单说明MCS-51单片机PSW寄存器各标志位的含义。(习题2-15) CY(PSW.7) 进位/借位标志位;AC(PSW.6)半进位/借位标志位;F0(PSW.5) 用户标志位;RS1(PSW.4)、RS0(PSW.3) 工作寄存器组选择位;OV(PSW.2) 溢出标志位; PSW.1 未定义;P(PSW.0) 奇偶标志位

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

程序简洁的单片机6位数字钟

程序简洁的单片机6位数字钟 51单片机作的电子钟程序在很多地方已经有了介绍,对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分,计算部分,时钟调整部分构成,这样程序就有了一定的长度和难度。这里我们为了便于大家理解和掌握单片机,我们把时钟调整部分去除,从而够成了这个简单的电子钟程序。 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。 开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 电路原理图: 为了节省硬件资源,电路部分采用6位共阳极动态扫描数码管,数码管的段位并联接在51单片机的p0口,控制位分别由6个2N5401的PNP三极管作驱动接在单片机的p2.1,p2.2,p2.3,p2.4,p2.5,p2.6口。 从标号star开始把这些位全部清除为0,从而保证了开始时显示时间为0时0分0秒。 然后是程序的计算部分: inc a_bit(秒位),这里用到了一个inc指令,意思是加1,程序运行到这里自动加1。然后把加1后的数据送acc:mov a,a_bit (秒位),这时出现了一个问题,如果不断往上加数字不会加爆? 所以有了下面的一句话cjne a,#10,stlop; 如果秒位到10那么转到10秒处理程序。cjne是比较的意思,比较如果a等于10 就转移到10秒处理程序,实际上也就限定了在这里a的值最大只能为9,同时 mov a_bit,#00h,这时 a_bit(秒位)被强行清空为0,又开始下一轮的计数。 秒位处理完了到下面10秒的处理程序:inc b_bit,把10秒位b_bit加1,由于程序开始对各位的寄存器已经清0,这时10秒位就变成1 ,然后同样送到累加器ACC:mov a,b_bit 现在开始新一轮的10秒位计数cjne a,#6,stlop ;如果10秒到了6那么到分位处理程序。也就限

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.360docs.net/doc/5f5036369.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

单片机简答题整理

1.MSC-51单片机内部包含哪些主要逻辑功能部件? (1)一个8位微处理器CPU。 (2)数据存储器RAM和特殊功能寄存器SFR。(3)内部程序存储器ROM。(4)两个定时/计数器,用以对外部事件进行计数,也可用作定时器。(5)四个8位可编程的I/O(输入/输出)并行端口,每个端口既可做输入,也可做输出。(6)一个串行端口,用于数据的串行通信 内部结构特点: 1.内部程序存储器(ROM)和内部数据存储器(RAM)容量(如表2-1所示)。2.输入/输出(I/O)端口。 3.外部程序存储器和外部数据存储器寻址空间。4.中断与堆栈。5.定时/计数器与寄存器区。6.指令系统。 2.片机的EA,AL,PS EN信号个自动功能是什么? EA:为片外程序存储器选用端,该引脚有效(低电平)时,只选用片外程序存储器,否则单片机上电或复位后选用片内程序存储器。ALE:地址索存有效信号输出在访问片外程序存储器期间,ALE以每机器周期两次进行信号输出,其下降沿用于控制锁存P0输出的低8位地址;在不访问片外程序存储器期间,ALE端仍以上述频率(振荡频率f os c的1/6)出现,可作为对外输出的时钟脉冲或用于定时目的.端,PSEN:片外程序存储器读选通信号输出端,低电平有效. 3.80C51系列单片机有哪些信号需要芯片引脚以第二功能方式提供? ●p1.0:定时计数器2的计数脉冲输入端T2P1.1:定时计数器2的外部控制端T2EXP3.0:PxD串行口输入端P3.1:T xD 串行口输出端P3.2:INT0外部中断0请求输入端,低电平有效P3.3:INT1外部中断1请求输入端,低电平有效P3.4:T0定时/计数器0技术脉冲输入端P3.5:T1定时/计数器1技术脉冲输入端P3.6:W R外部数据存数器写选通信信号输出端,低电平有效P3.7:RD外部数据存数器读选通信信号输出端,低电平有效.4.51系列单片机的程序状态字PSW中存放 什么信息?其中的OV标志位在什么情况下 被置位?置位是表示什么意思? ●PSW是一个8位标志寄存器,它保存指令 执行结果的特征信息,以供程序查询和判别。 ●1)做加法时,最高位,次高位之一有进位 则OV被置位2)做减法时,最高位,次高 位之一借位则OV被置位3)执行乘法指令 MULA B,积大于255,OV=14)执行处罚 指令DIV AB,如果B中所放除数为0,OV=1 ●0V=1,置位反映运算结果超出了累加器的 数值范围. 5.MCS-51系列单片机的存储器可划分为几 个空间?其地址范围和容量是多少?在使用 上有什么不同? 1)MCS-51单片机的存储器从物理结构上分 为:片内和片外数据存储器,片内和片外程 序存储器。2)从逻辑上分别可划分为:片内 统一寻址的64K程序存储器空间 (0000H---FFFFH);64KB的片外数据存储 器空间(0000H---FFFFH);256B的片内数 据存储器空间(00H---FFH)。 6.片内RA M低128单元划分为哪几个区 域?应用中怎么样合理有效的使用? ●工作寄存器区,位寻址区,数据缓冲区① 工作寄存器区用于临时寄存8位信息,分成4 组,每组有8个寄存器,每次只用1组,其他 各组不工作②位寻址区(20H~2FH),这16 个单元的每一位都赋予了一个位地址,位地 址范围为00H~7FH,位寻址区的每一位都可 能当作软件触发器,由程序直接进行位处理。 ③由于工作寄存器区,位寻址区,数据缓冲 区统一编址,使用同样的指令访问,因此这 三个区的单眼既有自己独特的功能,又可统 一调度使用,前两个已未使用的单元也可作 为一般的用户RAM单元。 7.51系列单片机的堆栈与通用微机中的堆栈 有何异同?在程序设计时,为什么要对堆栈 指针sp重新赋值? ①堆栈是按先进后出或后进先出的远侧进行 读/写的特殊RAM区域51单片机的堆栈区 时不固定的,可设置在内部RAM的任意区 域内。 ②当数据压入堆栈时,s p的内容自动加1, 作为本次进栈的指针,然后再存取数据sp 的值随着数据的存入而增加,当数据从堆栈 弹出之后,sp的值随之减少,复位时,sp 的初值为07H,堆栈实际上从08H开始堆放 信息,即堆栈初始位置位于工作寄存器区域 内,所以要重新赋值。 8.MCS-51单片机有4个并行口,在使用上如 何分工?试比较各口的特点,并说明“准双 向口”的含义? 一般P0做数据口和地址的低八位。P2做地 址的高八位。如果没有外部扩展存储器可以 作为一般的I/O使用。P1一般作为普通I/O 用。P3有第二功能,所以一般做特殊情况使 用,比如串行通信,按键中断,定时中断等。 “准”就是“基本上的意思”,也就是“准双 向口”不是真正的双向口。正常的双向口通 过方向寄存器设置后要作输出可以直接向数 据寄存器写,做输入可以直接读。而51的结 构造成他不能正样用,输出直接用就可以了, 输入必须先写全1然后再读。 9.定时器/计数器定时与计数的内部工作有 何异同? 定时工作模式和技术工作模式的工作原理相 同,只是计数脉冲来源有所不同:处于计数 器工作模式时,加法计数器对芯片端子 T0(P3.4)或T1(P3.5)上的输入脉冲计数;处 于定时器工作模式时,加法计数器对内部机 器周期脉冲计数。

单片机简答题

简答题: 1.MCS51的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少? 答:MCS51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 2.已知单片机系统晶振频率为6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是多少?TMOD的值是多少?TH0=?TL0=?(写出步骤) 答:定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是1388H TMOD的值是00000001B,TH0=13H;TL0=88H。 3.MCS51系列单片机的内部资源有哪些?说出8031、8051和8751的区别。 答:MCS51系列单片机上有1个8位CPU、128B的RAM、21个SFR、4个并行口、1个串行口、2个定时计数器和中断系统等资源。8031、8051和8751的区别是8031内无ROM;8051内有4KB的掩膜ROM;8751内有4KB的EPROM。 1.如何正确使用P3口? 1.要点: (1)说明P3口有第一功能和第二功能的使用。 (2)P3口的第二功能各位线的含义。 (3)使用时应先按需要选用第二功能信号,剩下的口线才作第一功能I/O线用。 (4)读引脚数据时,必需先给锁存器输出“1”。 2.简述累加器的ACC的作用。 2.(1)8位专用寄存器。 (2)运算时存放一个操作数。 (3)运算后存放运算结果,所以称它为累加器。 3.简述寄存器间接寻址方式及其寻址范围。 3.(1)寄存器中存放的是操作数的地址,操作数是通过寄存器间接得到,这种寻址方式称为寄存器间接寻址方式。 (2)寻址范围: ①内部RAM低128单位,形式@Ri(i=0,1)。 ②外部RAM64K使用DPTR作间址寄存器,形式为@DPTR。 4.简述MCS-51单片机的中断入口地址。 4.中断入口地址为中断响应后PC的内容即中断服务的入口地址。 它们是:外部中断0 0003H 定时器T0中断000BH 外部中断1 0013H 定时器T1中断001BH 串行口中断0023H 5.简述串行数据传送的特点。 5.(1)传送按位顺序进行,速度慢。

单片机C语言小程序

单片机C语言小程序 #include #include #define V AR XBYTE[0x00] /*V AR为外部位址0000*/ #define read 0 /*93c46读取的识别码READ=0*/ #define write 2 /*93c46写入的识别码WRITE=2*/ #define ewen 4 /*93C46写致能的识别码EWEN=4*/ #define ewds 6 /*93C46写除能的识别码EWDS=6*/ #define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/ #define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/ #define di T0 /*93C46 DI接脚=8051 T1 P3.4*/ #define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/ #define LOW 0x49 /*存放测试温度的下限值*/ #define HIGH 0x51 /*存放测试温度的上限值*/ bit FLAG0=0; /*宣告TIMER0响应旗号*/ //外接工业专用温度传感器时,目前设置测量温度为0-99度: static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/ 0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/ 0xEA,0xEE}; /*100度,110度*/ //使用板上AD590温度传感器时,目前设置测量温度为0-99度: //static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/ // 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/ // 0xba,0xc0}; /*100度,110度*/ char data1[2]; char C,S,k=0; char MEP[7]; /*显示器值存放阵列*/ //MEP[0]=数码管最低位显示值,温度指示小数点后位 //MEP[1]=数码管次低位显示值,温度指示个位数 //MEP[2]=数码管高位显示值,温度指示十位数 //MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5 //MEP[4]= //MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中 unsigned char combuf[10]; unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1; char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0; void delay (unsigned int value) /*延时副程式*/ { while (value!=0) value--; /*10us延时*/ } void COMP(); /*宣告比较现在温度与设定温度副程式*/ void SET();

单片机程序的设计

单片机程序的设计 程序设计是单片机开发最重要的工作,程序设计就是利用单片机的指令系统,根据应用系统(即目标产品)的要求编写单片机的应用程序,其实我们前面已经开始这样做过了,这一课我们不是讲如何来设计具体的程序,而是教您设计单片机程序的基本方法。不过在讲解之前还是有必要先了解一下单片机的程序设计语言。一.程序设计语言这里的语言与我们通常理解的语言是有区别的,它指的是为开发单片机而设计的程序语言,如果您没有学过程序设计可能不太明白,我给大家简单解释一下,您知道微软的VB,VC吗?VB,VC就是为某些工程应用而设计的计算机程序语言,通俗地讲,它是一种设计工具,只不过这种工具是用来设计计算机程序的。要想设计单片机的程序当然也要有这样一种工具(说设计语言更确切些) 单片机的设计语言基本上有三类: 1.完全面向机器的机器语言机器语言就是能被单片机直接识别和执行的语言,计算机能识别什么?以前我们讲过--是数字"0"或"1",所以机器语言就是用一连串的"0"或"1"来表示的数字。比如:MOV A,40H;用机器语言来表示就是11100101 0100000,很显然,用机器语言来编写单片机的程序不太方便,也不好记忆,我们必须想办法用更好的语言来编写单片机的程序,于是就有了专门为单片机开发而设计的语言: 2.汇编语言汇编语言也叫符号化语言,它使用助记符来代替二进制的"0"和"1",比如:刚才的MOV A,40H就是汇编语言指令,显然用汇编语言写成的程序比机器语言好学也好记,所以单片机的指令普遍采用汇编指令来编写,用汇编语言写成的程序我们就叫它源程序或源代码。可是计算机不能识别和执行用汇编语言写成的程序啊?怎么办?当然有办法,我们可以通过"翻译"把源代码译成机器语言,这个过程就叫做汇编,汇编工作现在都是由计算机借助汇编程序自动完成的,不过在以前,都是靠手工来做的。 值得注意的是,汇编语言也是面向机器的,它仍是一种低级语言。每一类计算机都有它自己的汇编语言,比如:51系列有它的汇编语言,PIC系列也有

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机考试常见试题简答题,整理版

51单片机考试常见试题简答题,整理版 简答题部分 1、什么叫堆栈? 2、进位和溢出? 3、在单片机中,片内ROM的配置有几种形式?各有什么特点? 4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系? 5、MCS-51单片机通常内部包含哪些 主要逻辑功能部件? 6、MCS-51单片机的存储器从物理结构上可 划分几个空间? 7、存储器中有几个保留特殊功能的单元用做入口地址?分别 作什么作用? 8、MCS-51单片机片内256B的数据存储器可分为几 个区?分别起什么作用? 8、MCS-51单片机的P0~P3四个I/O端口在结构上有何异同? 使用时应注意的事项? 9、存储器空间在物理结构上可划分为几 个部分? 10、开机复位后,CPU使用是的哪组工作寄存器?它们的地址 是什么?CPU如何确定和改变当前工作寄存器组? 11、MCS-51的时钟周期、机器周期、指令周期的如何分配 的?当振荡频率为8MHz时,一个单片机时钟周期为多少微秒? 12、程序状态存储器PSW的作用是什么?常用状态标志有哪 几位?作用是什么? 13、EA/VPP引脚有何功用?8031的引脚应 如何处理?为什么?

14、单片机有哪几个特殊功能寄存器?各在单片机的哪些功能部件中? 15、什么是指令?什么是程序?简述程序在计算机中的执行过程。 16、什么叫寻址方式?MCS51有几种寻址方式? 17、 SJMP(短转移)指令和AJMP(绝对转移)指令的主要区别。 18、中断服务子程序与普通子程序有哪些异同之处? 19、MCS-51响应中断的条件是什么?CPU响应中断后,CPU要进行哪些操作?不同的中断源的中断入口地址是什么? 20、单片机对中断优先级的处理原则是什么? 21、MCS-51的外部中断有哪两种触发方式?他们对触发脉冲或电平有什么要求? 22、什么是中断和中断系统?其主要功能是什么? 23、MCS-51有哪些中断源? 24、说明外部中断请求的查询和响应过程 25、MCS-51响应中断的条件?。 26、简述MCS-51单片机的中断响应过程。 27、在执行某一中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求? 28、MCS-51单片机外部中断源有几种触发中断请求的方法?如何实现中断请求? 29、什么是中断优先级?中断优先级处理的原则是什么? 1

相关文档
最新文档