单片机KEIL C51的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21 P20 22 P21 23 P22 24 P23 25 P24 26 P25 27 P26 28 P27
40 20 10 RXD 11 TXD 30 AL E 29 PSEN
10
11
12
13
14
15
16
9
5V
R 1K
8
7
6 P 07
5 P 06
4 P 05
3 P 04
2 P 03
1 P 02
P 01
float double char unsigned char
所占位数
数的表示范围
16
-32768~32767
16
-32768~32767
32
-2147483648~2147483647
16
0~65535
16
0~65535
32
0~4294967295
32
3.4e-38~3.4e38
64
1.7e-308~1.7e308
unsigned int unsigned short int unsigned long int
float double char unsigned char
所占位数
数的表示范围
16
-32768~32767
16
-32768~32767
32
-2147483648~2147483647
16
0~65535
C-51与ASM-51相比,有如下优点: 1. 对单片机的指令系统不要求了解,仅要求对 8051 的存贮器结构有初步了解; 2. 寄存器分配、不同存贮器的寻址及数据类型 等细节可由编译器管理; 3. 程序有规范的结构,可分成不同的函数,这 种方式可使程序结构化; 4. 具有将可变的选择与特殊操作组合在一起的 能力,改善了程序的可读性; 5. 提供的库包含许多标准子程序,具有较强的 数据处理能力; 6. 由于具有方便的模块化编程技术,使已编好 程序可容易地移植;
C D E F
无显示
P1 0
1
P1 1
2
P1 2
3
P1 3
4
P1 4
5
P1 5
6
P1 6
7
P1 7
8
INT1 13 INT0 12
T1
15
T0
14
31
19 18
9
RD 17 W R 16
U1 P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7
INT1 INT0
T1 T0
C51的数据声明的一般格式如下
[类型说明符][修饰符] 标识符[=初值]……
例如:unsigned char code Flag = 0x0f;
就是声明一个无符号的char型变量Flag,并给 他赋初值为0x0f;并且声明他所在的存储空间 在片内统一编址的ROM中。
声明中,如果没有修饰符,则数据默认的存 储空间为data型,也就是在片内RAM中。
MOV DPTR,#2000H
L11: MOVX A,@DPTR
CJNE A,#00H,L16 ;取出内容与00H相等吗?
INC R1
;取出个数加1
L16: INC DPTR
DJNZ R0,L11 ;未完继续
MOV DPTR,#2100H
MOV A,R1
MOVX @DPTR,A ;相同数个数送2100H
㈦ C-51的基本语句
与标准C语言基本相同:
if
选择语言
switch/case 多分支选择语言
while
循环语言
do-while
循环语言
for
循环语言
㈧ 中断服务程序
函数名()interrupt n
{}
㈨ I/O口定义
#include <absacc.h> #define prot xbyte[0x1000] 或 用指针定义
16
0~65535
32
0~4294967295
32
3.4e-38~3.4e38
64
1.7e-308~1.7e308
8
-128~127
8
0~255
C语言中的基本数据类型
类型 符号
关键字

整 型

实有 型有
字有
符 型

(signed) int (signed) short (signed) long
unsigned int unsigned short int unsigned long int
0 K1 4 K5
1 K2 5 K6
2 K3 6 K7
3 7
13 12
15 14
31
19 18
9
17 16
INT1 INT0
T1 T0
89C52
EA/VP
X1 X2
RESET
RD WR
P20 P21 P22 P23 P24 P25 P26 P27
VCC GND RXD TXD ALE/P PSEN
21 22 23 24 25 26 27 28
EA/VP
X1 X2
RE SET
RD WR
89C52
P0 0 P0 1 P0 2 P0 3 P0 4 P0 5 P0 6 P0 7
P2 0 P2 1 P2 2 P2 3 P2 4 P2 5 P2 6 P2 7
VC C GND RXD TXD AL E/P PSEN
39 P00 38 P01 37 P02 36 P03 35 P04 34 P05 33 P06 32 P07
math.h (定义常用数学运算);
㈥ C-51的运算符
与C语言基本相同:
+ - * / (加 减 乘 除)
> >= < <= (大于 大于等于 小于 小于等于)
== !=
(测试等于 测试不等于)
&& || !
(逻辑与 逻辑或 逻辑非 )
>> << &| ^~
(位右移 位左移) (按位与 按位或) (按位异或 按位取反)
㈡ C-51的程序结构
与一般C语言的结构相同,以main()函数为程序人 口,程序体中包含若干语句还可以包含若干函数。
C-51函数的一般格式
类型 函数名(参数表) {
数据说明部分 语句执行部分 }
㈢ C-51的数据类型
基本数据类型
类型 符号
关键字

整 型

实有 型有
字有
符 型

(signed) int (signed) short (signed) long
for(i=0;i<256;i++) {*p=0; p++;} /*清零2000H-20FFH单元*/ }
例:查找零的个数(在2000H--200FH中查出有 几个字 节是零,把个数放在2100H单元中)
★ 汇编语言程序
ORG 0000H
L00: MOV R0,#10H ;查找16个字节
MOV R1,#00H
液晶LCD(Liquid Crystal Display)显示器、CRT显示器 等。LED、LCD显示器有两种显示结构:段显示(7 段、米字型等)和点阵显示(5×8、8×8点阵等)。
3. LED数码显示方式及电路
(1)静态显示方式 LED显示器工作方式有两种:静态显示方式和动态显 示方式。静态显示的特点是每个数码管必须接一个8位锁 存器用来锁存待显示的字形码。送入一次字形码显示字 形一直保持,直到送入新字形码为止。这种方法的优点 是占用CPU时间少,显示便于监测和控制。缺点是硬件 电路比较复杂,成本较高。
单片机KEIL C51的应用
㈠ C-51的特点
C语言作为一种非常方便的语言而得到广泛的支持, 国内最通用的是Keil C51.
C语言程序本身不依赖于机器硬件系统,基本上不 作修改就可将程序从不同的单片机中移植过来。
C提供了很多数学函数并支持浮点运算,开发效率 高,故可缩短开发时间,增加程序可读性和可维护 性。
40 20 10 11 30 29
P12 K8 P13 K12
P14 P15 P16 P17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
单片机I/O口的使用
对单片机的控制,其实就是对I/O口的控制, 无论单片机对外界进行何种控制,亦或接 受外部的控制,都是通过I/O口进行的。单 片机总共有P0、P1、P2、P3四个8位双向输 入输出端口,每个端口都有锁存器、输出 驱动器和输入缓冲器。4个I/O端口都能作 输入输出口用,其中P0和P2通常用于对外 部存储器的访问。
例:
数据类型 存储类型 变量
char data var1; bit data flags; unsigned char xdata vextor[10];
㈤ C-51的包含的头文件
通常有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h
常用有:reg51.h (定义特殊功能寄存器和 位寄存器);
例:清零程序 (将2000H—20FFH的内容清零)
★ 汇编语言程序
ORG 0000H
SE01: MOV R0,#00H
MOV DPTR,#2000H ;(0000H)送DPTR
LOO1: CLR A
MOVX @DPTR,A ;0送(DPTR)
INC DPTR
;DPTR+1
INC R0
;字节数加1
g f GNDa b a
a
b
c
f
b
g
d
e
c
e
d ·dp
f g
dp e d GND c dp
(a)
+5V
a b c d e f g dp
(b)
七段LED显示器
使用LED显示器时,要注意区分这两种不同的接法。为了显
示数字或字符,必须对数字或字符进行编码。七段数码管加上一
个小数点,共计8段。因此为LED显示器提供的编码正好是一个字
名 存储空间位置 长度 数据范围
data 直接寻址片内RAM 8位 0~255
bdata 可位寻址片内RAM 1位 0/1
idata 间接寻址片内RAM 8位 0~255
pdata 片外页RAM
8位 0~255
xdata 片外RAM
16位 0~65535
code 程序ROM
16位 0~65535
㈣ C-51数据的存储类型(续)
(2)动态显示
动态显示的特点是将所有位数码管的段选线并联在 一起,由位选线控制是哪一位数码管有效。这样一来, 就没有必要每一位数码管配一个锁存器,从而大大地简 化了硬件电路。选亮数码管采用动态扫描显示。所谓动 态扫描显示即轮流向各位数码管送出字形码和相应的位 选,利用发光管的余辉和人眼视觉暂留作用,使人的感 觉好像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于静态 显示电路中的。
CJNE R0,#00H,LOO1 ;不到FF个字节再清
LOOP: SJMP LOOP
清零程序 (将2000H—20FFH的内容清零) ★ C-51程序
#include <reg51.h> main( )
{ int i; unsigned char xdata *p=0x2000;
/* 指针指向2000H单元 */
P 20
LED
U1
P10 P11 P12 P13 P14 P15 P16 P17
1 2 3 4 5 6 7 8
P10 P11 P12 P13 P14 P15 P16 P17
P00 P01 P02 P03 P04 P05 P06 P07
39 38 37 36 35 34 33 32
K0
P10
K4
P11
节。用共阴LED显示器显示16进制数的编码已列在下表。
共阴数码管码表
0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
01
23 4 5
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
67
89 A B
0x39 , 0x5e , 0x79 , 0x71 , 0x00
8
-128~127
பைடு நூலகம்
8
0~255
㈢(续) C-51的数据类型扩充定义
sfr:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位声明 bit:位变量声明 例:sfr SCON = 0X98;
sfr16 T2 = 0xCC; sbit OV = PSW^2;
㈣ C-51数据的存储类型
p++;
/* 指针指向下一单元 */
}
p=0x2100;
/* 指针p指向2100H单元 */
*p=n;
/* 把个数放在2100H单元中 */
}
KEIL的使用
掌握KEIL工程的建立和软件的开发; 掌握KEIL中软件仿真的基本应用;
显示器及其接口
单片机系统中常用的显示器有: 发光二极管LED(Light Emitting Diode)显示器、
L1E: SJMP L1E
★查找零的个数C-51程序
#include <reg51.h>
main ( )
{ unsigned char xdata *p=0x2000;/*指针p指向2000H单元*/
int n=0,i;
for(i=0;i<16;i++)
{ if(*p==0) n++; /* 若该单元内容为零,则n+1 */
P 00
P 07
11 0 P 0 6
2 P 05
4 P 04
7 P 03
P 02
11 P 01
P 00
3
5
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
d
d
dp
dp
dp
dp
C3
C2
C0
DPY 4- LED
12 C4
9
8
6
P 23
P 22
P 21
相关文档
最新文档