51单片机外部中断的C51编程

合集下载

简单的软硬兼施51单片机外部中断扩展

简单的软硬兼施51单片机外部中断扩展

你 烧 的 水 开 了等 等诸 如 此 类 的 事 件 , 有 部 中 断 的端 口 , 当 增加 外 部 中断 的 数量 。 次 统 需 要 外 部 中 断 可 以 无 限 的扩 展 下 去 。 其 而 事 件 产生 进 入 中 断 之 前 我们 必 须 先记 住 现 还 有软 件 法 , 用各 个 中断 的 优先 级 , 方 且 不 会 占 用 太 多 的 单 片 机 资 源 。以 利 该 在 看 书 的第 几 页 了 , 拿 一 个 书 签放 在 当 或
CD4 0 内部 有 两 个4 输 入 的或非 门 ( 图 02 端 如 是 固 定 的 。 算 机 中也 是 采 用 的这 种 方 法 , 法 。 计 比 如 利 用 专 用 的单 片 机 外 部 中断 扩 展 1 所示 ) 在输 入 端 输 入 一 个 高 电 压 , 相 应 , 在 我 们把 可 以 引 起 中断 的 称 之 为 中 断 源 , 单
29 与 片 机 中 也 有 一 些 可 以 引起 中 断 的 事 件 , 但 芯 片 8 5 A等 , 单 片 机 组 成 中 断 扩 展 系 单 片机 的 中 断 数 量 有 限 , 了 增 加 中断 个 统 , 片 机 的 外部 中断 个 数得 到显 著 增 加 , 为 单
的 输 出 端就 会 输 出一 个 低 电 压 给单 片 机 的 外 部 中断 端 口一 个 中断 信 号 。 对 与 专 用 相
作 原 理 简单 , 格 低 廉 , 装 多 样 , 用 不 价 封 适
同 电 路 焊 接 要 求 。 内 部 电 路 图 如 图 1 其 。
在 图2 中利 用4 按 钮 代 替 外 部 中 断 , 个 4 个l d 表 中断 控 制 的 设 备 。 个 按 钮 对 应 e代 每 个ld。 CD4 0 双 四或非 门 的一 个输 出 e 将 02

单片机原理及接口技术(C51编程)(第2版)-习题问题详解汇总情况

单片机原理及接口技术(C51编程)(第2版)-习题问题详解汇总情况

第1章思考题及习题1参考答案一、填空1. 除了单片机这一名称之外,单片机还可称为微控制器或嵌入式控制器2.单片机与普通微型计算机的不同之处在于其将CPU、存储器、和I/O口三部分,通过内部总线连接在一起,集成于一块芯片上。

3. AT89S51单片机工作频率上限为33MHz MHz。

4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低成本和提高可靠性二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便B.受器件的物理性能限制C.为了通用性D.为了提高运算速度2. 在家用电器中使用单片机应属于微计算机的。

A.辅助设计应用B.测量、控制应用C.数值计算应用D.数据处理应用3. 下面的哪一项应用,不属于单片机的应用范围。

A.工业控制 B.家用电器的控制C.数据库管理 D.汽车电子设备三、判断对错1. STC系列单片机是8051内核的单片机。

对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断源、1个定时器(且具有捕捉功能)。

对3. 单片机是一种CPU。

错4. AT89S52单片机是微处理器。

错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。

对6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。

对7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。

对8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP的长处。

对第2章思考题及习题2参考答案一、填空1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为2µs。

2. AT89S51单片机的机器周期等于12个时钟振荡周期。

3. 内部RAM中,位地址为40H、88H的位,该位所在字节的字节地址分别为28H和88H。

单片机c51汇编语言51单片机汇编语言

单片机c51汇编语言51单片机汇编语言

单片机c51汇编语言51单片机汇编语言单片机C51汇编语言单片机(C51)是指一种集成电路上只包含一个集中式控制器的微处理器,具有完整的CPU指令集、RAM、ROM、I/O接口等功能。

汇编语言是一种低级语言,是用于编写单片机指令的一种语言。

汇编语言能够直接操作单片机的寄存器和输入/输出端口,因此在嵌入式系统的开发中非常重要。

本文将介绍单片机C51的汇编语言编程。

一、了解单片机C51单片机C51是目前应用最广泛的一种单片机系列,广泛用于各种电子设备和嵌入式系统的开发。

C51指的是Intel公司推出的一种基于MCS-51架构的单片机。

该系列单片机具有较高的性能和低功耗的特点,可用于各种控制和通信应用。

二、汇编语言的基本概念汇编语言是一种低级语言,与机器语言紧密相关。

它使用助记符来代替机器指令的二进制表示,使程序的编写更加易读。

在单片机C51汇编语言中,每一条汇编指令都对应着特定的机器指令,可以直接在单片机上执行。

三、汇编语言的基本指令在单片机C51汇编语言中,有一些基本的指令用于控制程序的执行和操作寄存器。

以下是一些常用的指令:1. MOV指令:用于将数据从一个寄存器或内存单元复制到另一个寄存器或内存单元。

2. ADD指令:用于将两个操作数相加,并将结果存储到目的寄存器中。

3. SUB指令:用于将第一个操作数减去第二个操作数,并将结果存储到目的寄存器中。

4. JMP指令:用于无条件跳转到指定的地址。

5. JZ指令:用于在条件为零时跳转到指定的地址。

6. DJNZ指令:用于将指定寄存器的值减一,并根据结果进行跳转。

四、编写单片机C51汇编程序的步骤编写单片机C51汇编程序需要按照以下步骤进行:1. 确定程序的功能和目标。

2. 分析程序的控制流程和数据流程。

3. 设计算法和数据结构。

4. 编写汇编指令,实现程序的功能。

5. 调试程序,并进行测试。

六、实例演示以下是一个简单的单片机C51汇编程序的示例,用于实现两个数的相加,并将结果输出到LED灯上:org 0H ; 程序的起始地址为0mov a, 05H ; 将05H赋值给累加器mov b, 07H ; 将07H赋值给B寄存器add a, b ; 将A寄存器和B寄存器的值相加mov P1, a ; 将相加结果输出到P1口end ; 程序结束在这个例子中,首先将05H赋值给累加器A,然后将07H赋值给B寄存器,接着使用ADD指令将A和B的值相加,将结果存储到累加器A中,最后将累加器A的值输出到P1口。

单片机原理与C51编程

单片机原理与C51编程

单片机原理与C51编程单片机原理与C51编程单片机(Microcontroller)也被称为微型控制器,是一种集成电路系统,具有微处理器核心、存储器、输入/输出设备以及其他外围设备,可以运行嵌入式程序并控制外部设备的工作。

C51是一种基于Intel MCS-51架构的单片机系列,该系列的主要代表是8051系列单片机,是最早问世的单片机系列之一,其设计简洁、功能强大,被广泛应用于嵌入式系统开发、工控领域等。

下面将详细介绍单片机原理和C51编程的相关知识。

一、单片机原理1. 单片机结构单片机由四个主要部分组成:中央处理器(CPU)、存储器、输入/输出(I/O)以及定时器/计数器。

其中,CPU是单片机的核心,负责指令执行和数据处理;存储器分为程序存储器和数据存储器,用于存储程序和数据;I/O提供与外部设备的交互能力;定时器/计数器用于时间控制和计数功能。

2. 单片机工作原理单片机的工作原理是通过执行存储在其存储器中的指令来完成各种任务。

单片机按照指令的顺序逐条执行,从而实现特定的功能。

每条指令包括操作码和操作数,操作码指示所需执行的操作,操作数则是操作码所需的数据。

单片机通过解析指令、读取数据、执行操作等步骤实现任务。

3. 单片机应用领域单片机广泛应用于各个领域,如家电、汽车、医疗设备、工业自动化等。

其应用范围越来越广泛,因为它具有体积小、功耗低、成本低、可靠性高等优点,且可以根据需求进行定制开发。

二、C51编程1. C语言与单片机编程C语言是一种通用的程序设计语言,由于其结构简单、表达能力强、可移植性好等特点,成为单片机编程的主要语言之一。

在C51编程中,可以使用C语言进行程序编写,然后通过编译、汇编和烧录等步骤将程序下载到单片机中执行。

2. C51编程特点C51编程具有以下特点:(1)具有结构化特点:C51编程可以通过函数、条件语句、循环语句等结构化的方式编写程序,使程序更加清晰、易读。

(2)具有丰富的库函数支持:C51提供了丰富的库函数,如串口通信、定时器控制等功能,可以方便地调用这些函数完成特定任务。

单片机C51语言及程序设计

单片机C51语言及程序设计
数据类型——被指向变量的数据类型,不能缺省 存储类型1——被指向变量所在的存储区类型,缺省时根据该变量的定义
语句确定 存储类型2——指针变量所在的存储区类型,缺省时根据C51编译模式的
默认值确定 指针变量名——按C51变量名的规则选取
举例说明C51指针定义的用法 (SMALL编译模式下)
例1 char xdata a = ‘A’; char * ptr = &a;
static char m, n; //定义m和n为2个位于data区中的有符号字符型静态变量。
2. C51的指针
标准C语言指针的一般定义形式为: ➢ 定数义据了类一型个*指指向针由变“量数名据;类型”说明的变量的指针变 量; ➢ 被指向变量和指针变量位于C编译器默认的内存区域 中例。如: int a =’A’;
二、C51的标识符与关键字
• 标识符即特定的字符或字符串,用来给变量、函数、符号 常量、自定义类型等命名。用标识符给C语言程序中各种对 象命名时,要用字母、下划线和数字组成的字符序列,并 要求首字符是字母或下划线,不能是数字。字母的大小写 是有区别的。
• 通常下划线开头的标识符是编译系统专用的,因此在编写C 语言源程序时一般不使用以下划线开头的标识符,而将下 划线用作分段符。C51编译器规定标识符最长可达255个字 符,但只有前32个字符在编译时有效,因此标识符的长度 一般不要超过32个字符。
FF00
D5H
D0^4
RRSS11
D4H
D0^3
RRSS00
D3H
D0^2
OOVV
D2H
D0^1
FF11
D1H
D0^0
PP
D0H
两种位地址表达形式:绝对位地址、相对位地址

第3章_C51语言编程基础

第3章_C51语言编程基础
机器码
.
3
2、Keil C51语言简介
对于51单片机,目前广泛使用的是Keil C51语言,简称C51语言。
Keil C51语言是在标准C的基础上,针对51单片机的硬件特点进行 扩展,并向51单片机上移植的高效、简洁的实用高级语言。
与汇编语言相比的特点: (1)可读性好。 (2)可模块化开发。 (3)可移植性好。 (4)生成的代码效率较低。
unsigned char j ;
for(j=0; j<8; j++) {
buffer[j]=0; }
}
.
8
33
3、C51的基本运算 C51语言的基本运算与标准C类似,主要包括算术运算、关系运算、 逻辑运算、位运算和赋值运算及其表达式等。
1)算术运算符
.
34
2)关系运算符
关系表达式
int x=3; int y=6; int R;
bit的值可以是1(true),或0(false)。
格式: bit 变量名;
例如:
bit
flag;
flag = 0;
.
8
(2)特殊功能寄存器sfr 地址单元80H——FFH之间的片内数据存储区; “sfr” 数据类型占用一个内存单元; 利用它可以访问51单片机内部的所有特殊功能寄存器。 格式: sfr 寄存器变量名 = 字节地址常数;
01000000 | 11111111
00001000 << 3
.
38
【例】以字节操作方式对I/O口P1的P1.5清0 ,P1.1置为1, 其他位保持不变。
例如:
sfr
PSW = 0xd0;
//定义PSW寄存器地址为0xd0

单片机C51教程

单片机C51教程
4
例9-2 求三个数a、b、c的和。 #include“stdio.h” main() /*主函数*/ {int a,b,c,sum; /*定义变量*/ a=12;b=34;c=56; /*给变量赋值*/ sum=a十b十c; /*求和*/ printf(“sum is %d\n”,sum);/*显示结果*/ } 执行以上程序,可在屏幕上输出a、b、c的和,并显示: sum is 102
5
例9-3 从输入的两个数a,b中,求出较大的 数的程序。
#include“stdio.h” int max(int x,int y) /*定义max函数,函数返回 值为整型;x,y为形式参 数,整型*/ { int z; if(x>y) z=x; else z=y; return(z); /*将z的值返回到调用 处*/ }
19
2.逻辑运算符的优先级 2.逻辑运算符的优先级
符 优先顺序为 !(非) 算术运算符 &&和¦¦ 。最低为赋值运算符。 关系运算
3.逻辑表达式
用逻辑运算符将关系表达式或逻辑量连接起来 的式子称为逻辑表达式。逻辑表达式的值只能是 0(假)或1(真)。
例:已知a=2,b=3,求!a、a&&b、!a && b !a为0(假) a=2非0故为假 a&&b为1(真) !a&&b 为0(假) 先执行!a为0故!a&&b为0
定义存储类型
例:int data x , y ; 表示变量x , y 为16位整数并 指定存储在片内数据存储区。 1.若未定义存储类型,则C51编译器自动选择默 认存储类型如下表: 存储模式 SMALL COMPACT LARGE 默认的存储类型

c51单片机的定时器和中断

c51单片机的定时器和中断

二、方式1 方式
方式1结构 图6-5 T0 (或T1) 方式 结构 或
三、方式2 方式
TMOD 申请 TCON 中断 D7 TF1 TR1 TF0 TR0 T1引脚 溢出 TL1 重装初值控制 TH1 8位 &
≥1
0 1
M0 M1 C/T
D4
1
1 0
机器周期
GATE D7
1 INT1引脚
D0
方式2结构 图6-6 T0 (或T1) 方式 结构 或
图6-3 方波硬件设计和仿真波形
(2)源程序 ) //中断方式 中断方式 #include "reg51.h" #include "stdio.h" Uart_Init(); sbit P1_1=P1^1; void main() { TMOD=0X01; // T0工作在方式 工作在方式1 工作在方式 TL0=0xB0; //给TL0置初值 给 置初值 TH0=0x3c; //给TH0置初值 给 置初值 ET0=1; //开串行口中断 开串行口中断 EA=1; TF0=0; TR0=1; //启动 启动T0 启动 while(1) ; //设置断点处 设置断点处 } void Int_T0() interrupt 1 using 2 { TL0=0xB0; TH0=0x3c; //重赋初值 重赋初值 P1_1=!P1_1; //定时时间到 定时时间到P1_1取反 定时时间到 取反 printf("Timer1 overflow in Mode 1\n");/* 定时 溢出后, 器0溢出后,输出提示信息 */ 溢出后 }
计数器控制寄存器TCON 三、定时/计数器控制寄存器 定时 计数器控制寄存器
定时器控制字TCON的格式如下。 位地址 位符号 8FH TF1 8EH TR1 8DH TF0 8CH TR0 8BH IE1 8AH IT1 89H IE0 88H IT0

单片机原理及接口技术(C51编程)(第2版)-习题答案

单片机原理及接口技术(C51编程)(第2版)-习题答案

第6章思考题及习题6参考答案一、填空1.外部中断1的中断入口地址为。

定时器T1的中断入口地址为。

答:0013H;001BH2.若(IP)=00010100B,则优先级最高者为,最低者为。

答:外部中断1,定时器T13.AT89S51单片机响应中断后,产生长调用指令LCALL,执行该指令的过程包括:首先把的内容压入堆栈,以进行断点保护,然后把长调用指令的16位地址送入,使程序执行转向中的中断地址区。

答:PC、PC、程序存储器4.AT89S51单片机复位后,中断优先级最高的中断源是。

答:外部中断05.当AT89S51单片机响应中断后,必须用软件清除的中断请求标志是。

答:串行中断、定时器/计数器T2中断二、单选1.下列说法错误的是()。

A. 同一级别的中断请求按时间的先后顺序响应B. 同一时间同一级别的多中断请求,将形成阻塞,系统无法响应C. 低优先级中断请求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求D. 同级中断不能嵌套答:B2.在AT89S51的中断请求源中,需要外加电路实现中断撤销的是()。

A. 电平方式的外部中断请求B.跳沿方式的外部中断请求C.外部串行中断D.定时中断答:A3.中断查询确认后,在下列各种AT89S51单片机运行情况下,能立即进行响应的是()。

A.当前正在进行高优先级中断处理B.当前正在执行RETI指令C.当前指令是MOV A,R3D.当前指令是DIV指令,且正处于取指令的机器周期答:C4.下列说法正确的是()。

A. 各中断源发出的中断请求信号,都会标记在AT89S51的IE寄存器中B. 各中断源发出的中断请求信号,都会标记在AT89S51的TMOD寄存器中C. 各中断源发出的中断请求信号,都会标记在AT89S51的IP寄存器中D. 各中断源发出的中断请求信号,都会标记在AT89S51的TCON、SCON寄存器中答:D三、判断对错1.定时器T0中断可以被外部中断0中断。

填空题

填空题

1、十进制数85转化成十六进制数为_____。

2、除了单片机和电源外,单片机最小系统包括____________和______________。

3、MCS-51的中断系统由、、、等寄存器组成。

4、MCS-51系列单片机的T1用做计数方式时,用工作方式1(16位),则工作方式控制字为。

5、MCS-51系列单片机的4个并行I/O端口作为通用I/O端口使用,在输出数据时,必须外接上拉电阻的是___________。

6、C51中定义一个可位寻址的变量b访问P3口的P3.2引脚的方法是___________________________。

7、按照串行数据的时钟控制方式,串行通信可分为____________和____________两类。

8、单片机上电复位后,P0-P3的的状态是_________。

9、当振荡脉冲频率为6MHz时,一个机器周期为___________。

10、指针定义的一般形式是________________________。

11、外部中断1的中断类型号为。

12、用C51编程访问MCS-51单片机的并行I/O端口时,可以按_______寻址操作,还可以按______操作。

13、如果定时器控制寄存器TCON中的IT1和IT0位为0,则外部中断请求信号方式为_____________________。

14、下面的while循环执行了_________次空语句。

i=5;while(i!=0);15、十六进制数c转换为二进制数为。

16、当振荡脉冲频率为12MHz时,一个机器周期为。

17、MCS-51系列单片机的4个并行I/O端口作为通用I/O端口使用,在输出数据时,必须外接上拉电阻的是。

18、MCS-51的中断系统由 SCON 、、、等寄存器组成。

19、下面的while循环执行了次空语句。

i=5;while(i--);20、除了单片机和电源外,单片机最小系统包括和。

21、CPU响应中断的条件是:①有中断源发出中断请求、②、③。

单片机c51程序设计

单片机c51程序设计

单片机c51程序设计单片机C51程序设计是一门结合了硬件知识和软件编程技能的学科,它广泛应用于自动化控制、智能设备、嵌入式系统等领域。

C51单片机是指使用C语言进行编程的8051系列单片机,它具备丰富的指令集和灵活的编程方式。

下面将从单片机的基本概念、C51编程基础、程序设计步骤以及实例分析等方面进行介绍。

单片机的基本概念单片机,又称微控制器,是一种集成了处理器核心、存储器、输入/输出接口等的微型计算机系统。

它具有体积小、功耗低、成本低、可靠性高等特点。

C51单片机是基于Intel 8051微控制器架构的,具有8位数据总线和16位地址总线,支持多种外设接口。

C51编程基础1. C语言基础:熟悉C语言的基本语法,如变量声明、条件语句、循环语句、函数等。

2. 数据类型:了解C51单片机支持的数据类型,包括特有寄存器位操作。

3. 内存结构:掌握C51单片机的内存结构,包括内部RAM、外部RAM、程序存储器等。

4. 中断系统:理解中断的概念和中断服务程序的编写。

5. 定时器/计数器:了解如何使用单片机的定时器/计数器进行时间控制和事件计数。

程序设计步骤1. 需求分析:明确程序设计的目标和功能需求。

2. 系统设计:设计系统的整体架构,包括硬件连接和软件模块划分。

3. 编写代码:根据设计编写C51程序代码,包括初始化代码、主函数、中断服务程序等。

4. 调试:使用仿真软件或实际硬件对程序进行调试,确保程序正确运行。

5. 优化:根据调试结果对程序进行优化,提高效率和稳定性。

6. 测试:进行全面的测试,确保程序在各种条件下都能稳定运行。

实例分析以一个简单的LED闪烁程序为例,介绍C51程序设计的基本流程:```c#include <reg51.h>// 定义LED连接的端口#define LED_PORT P1void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);}void main() {while (1) {LED_PORT = 0xFF; // 关闭所有LED灯delay(500); // 延时500msLED_PORT = 0x00; // 打开所有LED灯delay(500); // 延时500ms}}```在这个例子中,我们首先包含了8051单片机的寄存器定义文件`reg51.h`,定义了LED灯连接的端口为P1。

51单片机外部中断实验

51单片机外部中断实验

实验6 外部中断实验(仿真部分)一、实验目的1. 学习外部中断技术的基本使用方法。

2. 学习中断处理程序的编程方法。

二、实验内容在INT0和INT1上分别接了两个可回复式按钮,其中INT0上的按钮每按下一次则计数加一,其中INT1上的按钮每按下一次则计数减一。

P1.0~ P1.3接LED 灯,以显示计数信号。

三、实验说明编写中断处理程序需要注意的问题是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。

2.必须在中断处理程序中设定是否允许中断重入,即设置EX0位。

3.INT0和INT1分别接单次脉冲发生器。

P1.0~ P1.3接LED 灯,以查看计数信号.四、硬件设计利用以下元件:AT89C51、BOTTON 、CAP 、CAP-POL 、CRYSTAL 、RES 、NOT 、LED-Yellow 。

设计出如下的硬件电路。

晶振频率为12MHz 。

五、参考程序框图主程序框图 INT0中断处理程序框图开始 设置有关中断控制寄存器开外中断INT0、INT1 设置P1.0~ 3初始状态 显示循环等待中断 INT0中断入口 计数加一 保护现场 恢复现场 中断返回实验6 外部中断实验(实验箱部分)1.实验目的认识中断的基本概念学会外部中断的基本用法学会asm和C51的中断编程方法2.实验原理图按键中断【硬件接法】P1.1控制LED,低电平点亮P3.3/INT1接按键,按下时产生低电平【运行效果】程序工作于中断方式,按下按键K2后,LED点亮,1.5秒后自动熄灭。

8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。

/INT0和/INT1中断的入口地址分别是0003H和0013H。

TCON寄存器(SFR地址:88H)中的IT0和IT1位分别决定/INT0和/INT1的触发方式,置位时为下降沿触发,清零时为低电平触发。

第3章51单片机P0P3口的C51编程

第3章51单片机P0P3口的C51编程

【例3-2】位操作。编程实现P1.3所接的 发光二极管亮、灭闪烁
• • • • • • • • • • #include<reg51.h> sbit LED3=P1^3; void delay(unsigned int d) { while(--d>0); } void main( ) { while(1) { LED3=0; delay(50000); LED3=1; delay(50000); } }
• void main( ) • { while(1) • { K0=1;K1=1;K2=1;K3=1; • LED0=K0; LED1=K1; • LED2=K2; LED3=K3; • } • }
• • • • •
思考: 为什么在读键状态之前要先置1? 修改: (1)开关闭合时灯灭。 (2)K0控制LED3,K1控制LED2,K2控 制LED1,K3控制LED0。
3.1 识
读锁存器 内部总线 写锁存器 D
51单片机的P0~P3口基础知
地址/数据 控制 2 锁存器 CP Q 1 Q MUX V1 & VCC V2
读锁存器
2
PO.X
VCC 内部上拉电阻 Q V1 P1.X
内部总线 写锁存器 D 锁存器 CP Q
1
1
读引脚
读引脚
读锁存器 2 内部总线 写锁存器 D CP 锁存器 1 读引脚 第二功能输入
4、8段LED动态显示技术
• 【例3-6】利用51单片机的并行口作为动 态显示的段口与位口的示例。
3.3
输入操作
• 作为51单片机片内并行I/O口输入信号 ,是属于数字信号的“高、低电平”或 脉冲信号的“上升沿、下降沿”两大类 ,这两类信号可以通过: • “闸刀型开关”、“按钮型开关”两类 开关来模拟。

第3,4章--C51

第3,4章--C51

3.1 MCS51的编程语言
(3) C语言本身不依赖于机器硬件系统,易于将程序从不同的 单片机系统中进行移植。 3. Keil C51与ASM51相比,有如下优点:
(1)对单片机的指令系统不要求了解,仅要求对8051 的存贮 器结构有初步了解; (2)寄存器分配、不同存贮器的寻址及数据类型等细节可由编 译器管理; (3)程序有规范的结构,可分成不同的函数,这种方式可使程 序结构化; (4)具有将可变的选择与特殊操作组合在一起的能力,改善了 程序的可读性; (5)提供的库包含许多标准子程序,有较强的数据处理能力; (6)由于具有方便的模块化编程技术,已编的程序容易移植。
3.2 Keil C51编程语言
5. C51的运算符和控制语句(与C语言相同)
运算符:

算术运算: +
- *
/ % (加 ,减, 乘, 除,求余) (测试等于, 测试不等于) (逻辑与, 逻辑或 , 逻辑非 ) (位右移, 位左移) (按位与, 按位或)
关系运算: > >= < <= (大于,大于等于,小于,小于等于) == != 逻辑运算: && || ! 移位: 位逻辑 >> << & |

char data x1[4],x2=0,x3; //定义char型 x1数组、变量x2(初值=0) 和x3,位于片内RAM。
Unsigned int xdata parm1,xArry[4]={0x1234,1234,0xa22,0xb33,};

定义无符号整型变量parm1、xArry数组并赋初值,变量位于片外RAM。
void Delayms (uint x) {unsigned int n; for( ;x > 0; x--) { for(n=0;n<123;n++) { ; } } } //延时函数

c51单片机考试题库及答案

c51单片机考试题库及答案

c51单片机考试题库及答案一、选择题1. C51单片机中,以下哪个寄存器是用于存储程序计数器的?A. SPB. PCC. DPTRD. ACC答案:B2. 在C51单片机中,下列哪个指令是无条件跳转指令?A. SJMPB. AJMPC. LJMPD. CJNE答案:A3. C51单片机的定时器/计数器有几种工作模式?A. 2种B. 3种C. 4种D. 5种答案:C4. C51单片机的外部中断有几个?A. 2个B. 3个C. 4个D. 5个答案:A5. 在C51单片机中,以下哪个指令是用于累加器清零的?A. CLR AB. MOV A, #0C. SUBB A, AD. CJNE A, #0, REL答案:A二、填空题1. C51单片机的内部RAM共有______字节。

答案:1282. C51单片机的外部中断0的中断标志位是______。

答案:IE03. C51单片机的定时器/计数器0和1的计数器溢出时,会自动向______寄存器送入中断标志。

答案:TF04. 在C51单片机中,使用______指令可以实现累加器与立即数之间的数据传送。

答案:MOV5. C51单片机的串行通信可以工作在______种模式。

答案:4三、简答题1. 简述C51单片机的串行通信波特率的计算公式。

答案:波特率 = 机器周期× 32 × (256 - SMOD) / 122. 描述C51单片机的看门狗定时器的作用。

答案:看门狗定时器用于防止程序运行时的死循环,确保系统稳定运行。

四、编程题1. 编写一个C51单片机的程序,实现将累加器A的内容与内部RAM的20H地址单元的内容进行比较,如果A的内容大于20H地址单元的内容,则将P1.0置1,否则置0。

答案:```cORG 00HMOV A, 20HCJNE A, #20H, NEXTSETB P1.0SJMP EXITNEXT:CLR P1.0EXIT:END```2. 编写一个C51单片机的程序,实现定时器0的初始化,使其工作在模式1,初值设置为0x3C。

单片机的C51语言

单片机的C51语言

C51变量定义的四个要素:
【存储种类】 数据类型 【存储类型】 变量名
存储地址(标准C) 存储空间 (C51特有) 数据格式 (C51扩充) 作用范围(标准C)
* 方括号项——可以缺省
存储种类
【存储种类】 数据类型 【存储类型】 变量名
① 自动变量(auto)——在函数内部定义的变量,退出函 数后,分配给该变量的存储单元即自行消失(局部变量)。
因为Cx51使用默认的寄存器组来传递参数,1 个工作寄存器组就是8个单元字节。你至少失去了8 个字节。另外要定义足够大的堆栈空间。当你的内 部堆栈溢出的时候,你的程序会莫名其妙地复位, 实际原因是8051系列微处理器没有硬件报错机制, 堆栈溢出只能以这种方式表示出来。
(2)bdata区
可以在data区的位寻址区定义变量,这个变量 的每个位就可进行位寻址。
序号 特殊功能寄存器名称
符号 字节地址
位地址
3)sbit bit_name = sfr字节地址 ^ 位位置; 将SFR字节地址的相对位地址定义为位变量名。 例如: sbit CY = 0xD0^7;
序号 特殊功能寄存器名称
符号 字节地址
位地址
C51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit变量。
这对状态寄存器来说是十分有用的,因为它需 要单独地使用变量的每一位。
不一定要用位变量名来引用位变量,下面是一 些在bdata段中声明变量和使用位变量的例子:
unsigned char bdata status_byte; unsigned int bdata status_word; unsigned long bdata status_dword; sbit stat_flag=status_byte^4;

C51语言编程基础

C51语言编程基础

图6 完成新建工程文件
21
KEIL C51快速入门
下面可以编写程序。 5、在图2-7中,单击“File”菜 单,再在下拉菜单中单击“New”选 项。
新建文件后屏幕如图8所示。
图7 新建文档
图8 完成 新建文档
22
KEIL C51快速入门
此时光标在编辑窗口里闪烁,这时可以键入应用程序了,建议首先保 存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As” 选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使 用的文件名,用C语言编写扩展名为(.c)如果用汇编语言编写扩展名必须 为(.asm)。然后,单击“保存”按钮。 如图8所示。
图10 添加文档
25
KEIL C51快速入门
选中main.c,然后单击“Add ”屏幕如下图所示。
图10 完成添加文档
注意到“Source Group 1”文件夹中多了一个子项“main.c”子 项的多少与所增加的源程序的多少相同。
7、现在便可输入程序了,输入完毕进行调试便可运行。
26
Proteus 快速入门
一些例程来介绍C51的程序设计思想。
1
单片机入门主要掌握以下知识和应用
最小系统能够运行起来的必要条件。 1.电源 2.晶振3.复位电路
对单片机任意IO口的随意操作
1.输出控制电平高低2.输入检测电平高低。 定时器:重点掌握最常用的方式2 中断:外部中断、定时器中断、串口中断 串口通信:单片机之间、单片机与计算机间
3
使用C语言的优点
C 语言具有结构化和模块化特点,便于阅读和维 护。
C 语言可移植性好,很多微控制器都支持C 编译 器。功能化的代码能够很方便的从一个工程移植 到另一个工程,从而减少了开发时间。 提供的库函数包含许多标准子程序,具有较强的 数据处理能力。

单片机C语言-第3章51单片机P0-P3口的C51编程3

单片机C语言-第3章51单片机P0-P3口的C51编程3
(3)键值表:用户在设计键盘程序时,将所有按 键的键值,按照一定的顺利,在code区建立一 个表格,该表格称为键值表。
3.3.3 多个按钮型开关—键盘
2.独立式键盘接口技术
当按键的数量比较少(≤8)时,可采用独立式按键硬 件结构。独立式按键是指直接采用一根 I/O口线构成的 单个按键电路。每个独立式按键单独占用一根I/O口线, 每根I/O口线上的按键的工作状态不会影响其他I/O口线 的工作状态。
• 分析:
• 相当于S1为一个控制开关,控制着 灯的亮、灭闪烁;
• 与例题3-8不同。定义一个位单元, 按键每动作一次,该位单元取反:该单 元为0时,灯全亮,该单元为1时,灯闪 烁。
• include<reg51.h> • #define uchar unsigned char • #define uint unsigned int • sbit S1=P3^2; • bit key=0; //定义一个位,存储按键的动作(偶、奇) • void dlxms( uint xms) • { uint t1, t2; • for( t1=0; t1<xms; t1++) • for( t2=0; t2<110; t2++); •}
• #define uint unsigned int
• uchar data keycode=8;
//键值的初值设为8
• uchar data dir_buf;
//显示缓冲区
• code uchar dirtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xbf};//显 示的代码表
• sbit K2=P1^6;

单片机C语言第3章51单片机P0P3口的C51编程1课件

单片机C语言第3章51单片机P0P3口的C51编程1课件
P0~P3口都可作为准双向通用I/O口,其中只有P0口 需要外接上拉电阻;在需要扩展片外设备时,P2口可作为 其地址线接口,P0口可作为其地址线/数据线复用接口,此 时它是真正的双向口。
1. 结构
P0
P1
P2
P3
D锁存器




MUX开关 ★

输出控制 ★


内部上拉电阻



2. 功能
P0
P1
P2
读引脚
VCC
2
P1.N锁存器
D
Q
CLK
Q
R V
P1.N
1
(1)输出方式:数据经内部总线送入锁存器存储,某位数 据为1,则Q=1,Q=0,VT1截止,引脚P1.N上出现高电 平;反之,数据为0,则Q=0,Q=1,VT1导通,引脚 P1.N上出现低电平。
(2)读引脚方式:读引脚时,控制器打开三态门1,引脚 P1.N上的数据经三态门1进入芯片的内部总线,再送到 累加器A,输入时无锁存功能。
1、P0口具有通用I/O口方式,可实现输出、读引脚(输入) 和读锁存器三种功能;
2、作为通用I/O口方式时,需要外接上拉电阻;
3、P0口具有地址/数据分时复用方式,可实现地址/数据输 出、数据输入两种功能;
4、地址/数据分时复用方式时无需外接上拉电阻;
5、分时复用方式的数据输入时无需程序写1操作。
P0~P3小结
V
P0.n的通用I/O口工作方式:输出、读引脚、读锁存器
读锁存器 2
VCC
外接上拉电阻
内部总线 写锁存器
P0.N锁存器
D
Q
V
CLK
Q
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//-------------------------------------------------
void key_scan() interrupt 0 //使用了外部中断0的键盘扫描子函数
{ if(k0==0) //有键按下吗?(k0=0 ?)
{ delay_ms(10); //延时消抖
}
if(k3==0) //有键按下吗?(k3=0 ?)
{ if(k1==0) //有键按下吗?(k1=0 ?)
{ delay_ms(10); //延时消抖
if(k1==0) //确实是有键按下,则:
{P0=~P0; //翻转8个灯的状态
while(!k1);} //等待按键放开
}
}
void key_scan_2() interrupt 2 //使用了外部中断1的键盘扫描子函数
//=================================================
void main()
{
led=1; //上电初始化,led灯不亮
while(1)
{
key_scan();
delay_ms(3000);
}
}
//=================================================
sbit k2=P2^2;
sbit k
3=P2^3;
sbit k4=P2^4;
sbit k5=P2^5;
sbit k6=P2^6;
sbit k7=P2^7;
sbit led0=P0^0; //接在P0脚上的8个LED灯,分别受控于上述8个按键
//外部中断基本例程-3 (单个键盘的外部中断1扫描处
理)
//功能跟上例一样,都是用一个按键控制一个灯的亮灭,但是使用的是外部中断1
//注意与前例写法上的不同之处
//广西民大物电学院 李映超 2010年4月12日
sbit led=P2^7;
void delay_ms(unsigned int xms); //ms级延时子程序
//=================================================
void main()
{
P0=0xff; //上电初始化,P0全灭
led=1; //上电初始化,led灯不亮
void delay_ms(unsigned int xms) //ms级延时子程序
{ unsigned int x,y;
for(x=xms;x&gt;0;x--)
for(y=130;y&gt;0;y--);}
//-------------------------------------------------
if(k0==0) //确实是有键按下,则:
{led0=!led0; //翻转灯的状态
while(!k0);} //等待按键放开
}
if(k1==0) //有键按下吗?(k1=0 ?)
{ delay_ms(10); //延时消抖
if(k1==0) //确实是有键按下,则:
相关知识:
1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;
2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0;
//八个按钮通过8个二极管接到外部中断0脚进行中断扩展,
//从而解决外部中断口不够用的问题
//广西民大物电学院 李映超 2010年4月12日
#include &lt;reg52.h&gt;
sbit k0=P2^0; //八个按键分别接到P2口各个脚上,
sbit k1=P2^1; //同时还通过二极管连接到外部中断0脚(P3.2)
3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高;
4、使用外部中断0和1,必须TCON寄存器设置其触发方式是低电平触发(0)还是下降沿触发(1);
5、使用前必须通过IE寄存器打开总中断和自己的中断;
//外部中断基本例程-1(未使用中断,键盘扫描为一般端口扫描)
//这是特意安排的一个例程,以便和使用外部中断的例程2进行对比
}
}
//外部中断基本例程-4 (同时使用外部中断0和外部中断1)
//用一个键控制接在P0口的八个灯的亮灭,另外一个按键控制一个灯的亮灭
//广西民大物电学院 李映超 2010年4月12日
#include &lt;reg52.h&gt;
sbit k1=P3^2;
sbit k2=P3^3; //
{ if(k2==0) //有键按下吗?(k1=0 ?)
{ delay_ms(10); //延时消抖
if(k2==0) //确实是有键按下,则:
{led=!led; //翻转单个灯的状态
while(!k2);} //等待按键放开
}
}
//外部中断扩展应用例程-5(8个按钮分别去控制8个灯的亮灭)
void key_scan() interrupt 2 //使用了外部中断1的键盘扫描子函数
{ if(k2==0) //有键按下吗?(k1=0 ?)
{ delay_ms(10); //延时消抖
if(k2==0) //确实是有键按下,则:
{led=!led; //翻转灯的状态
while(!k2);} //等待按键放开
//=================================================
void main()
{
//上电初始化,led灯不亮
TCON=0x01; //打开外部中断0,并设置为下降沿触发
IE=0x81; //开总中断
while(1)
{
delay_ms(3000);
{led1=!led1; //翻转灯的状态
while(!k1);} //等待按键放开
}
if(k2==0) //有键按下吗?(k2=0 ?)
{ delay_ms(10); //延时消抖
if(k2==0) //确实是有键按下,则:
{led2=!led2; //翻转灯的状态
while(!k2);} //等待按键放开
#include &lt;reg52.h&gt;
sbit k2=P3^3; //
sbit led=P2^7;
void delay_ms(unsigned int xms); //ms级延时子程序
//=================================================
}
}
//=================================================
void delay_ms(unsigned int xms) //ms级延时子程序
{ unsigned int x,y;
for(x=xms;x&gt;0;x--)
for(y=130;y&gt;0;y--);}
void key_scan() //键盘扫描子函数
{ if(k1==0) //有键按下吗?(k1=0 ?)
{ delay_ms(10); //延时消抖
if(k1==0) //确实是有键按下,则:
{led=!led; //翻转灯的状态
while(!k1);} //等待按键放开
}
#include &lt;reg52.h&gt;
sbit k1=P3^2;
sbit led=P2^7;
void delay_ms(unsigned int xms); //ms级延时子程序
void key_scan() interrupt 0 //使用了外部中断0的键盘扫描子函数。也可放在主函数而不需要预先声明
void delay_ms(unsigned int xms) //ms级延时子程序
{ unsigned int x,y;
for(x=xms;x&gt;0;x--)
for(y=130;y&gt;0;y--);}
//-------------------------------------------------
}
//-------------------------------------------------
//外部中断基本例程-2 (单个键盘的外部中断0扫描处理)
//用一个按键控制一个灯的亮灭
//开始不亮,按一下则点亮,再按一下灭掉,再按又亮........
//广西民大物电学院 李映超 2010年4月12日
void main()
{
led=1; //上电初始化,led灯不亮
TCON=0x04; //打开外部中断1,并设置为下降沿触发
IE=0x84; //开总中断和外部中断1
while(1)
{
delay_ms(3000);
}
}
//=================================================
void main()
{
led=1; //上电初始化,led灯不亮
TCON=0x01; //打开外部中断0,并设置为下降沿触发
IE=0x81; //开总中断
相关文档
最新文档