C51单片机基础学习教程(C语言)
C51语言入门

MCS-51单片机--C51基础陈茜茹Email:vickychenqian@ Email:vickychenqian@163com¾C51与标准C¾C51的数据类型和运算量¾C51的运算符¾程序结构¾函数¾其它数据类型•C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言了多种高级语言的特点并具备汇编语言的功能针对的语言日趋成熟成为的功能。
针对8051C语言日趋成熟,成为了专业化的实用高级语言。
很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等。
(1)C51中定义的库函数和标准C语言定义的库函数不同。
标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按MCS-51单片机相应情况来定义的;(2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS51单片机特有的数据类型;MCS-51(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与MCS-51单片机的存储器紧密相关;MCS51)与标准的输入输出处理不一样,中的输入输出是(4C51C C51通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。
基本数据类型类型符号关键字数的表示范围所占位数(signed)int 3276832767有(signed) int 16-32768~32767(signed) short 16-32768~32767(i d)l 3221474836482147483647整型(signed) long -2147483648~214748364716unsigned int 0~65535065535无320~4294967295unsigned long int unsigned short int 160~65535fl t 34383438实型有float 32 3.4e-38~3.4e38有double 64 1.7e-308~1.7e308h128127字符型有char 8-128~127无unsigned char80~255¾长度根据其所指向的变量有所变化,1~3字节¾存放的是另外一个数据的地址g¾定义方法:unsigned int *da;sfr:特殊功能寄存器定义sfr16:sfr的16位数据定义sbit:可位寻址字节或sfr中位的定义bit:位变量定义例:sfr SCON = 0X98;sfr16 T2 = 0xCC;sbit OV = PSW^2;sbit OV=PSW^2;定义变量例:数据类型变量名unsigned int var1; unsigned intbit flags;unsigned char vector[10];用typedef或#define定义数据类型别名例1:typedef unsigned int uint;typedef unsigned int uint;uint var;uint var;例2:#define uchar unsigned char;uchar temp;说明变量所处单片机的存储区域名存储空间位置长度数据范围data直接寻址片内RAM低128B8位0~255 data 直接寻址片内RAM低128B 8位0~255bdata 可位寻址片内RAM(20-2FH) 1位0/1idata 间接寻址片全部内RAM 8位0~255pdata片外RAM低256B8位pdata 片外RAM低256B 8位0~255xdata片外RAM全部64K16位0~65535 xdata 片外RAM全部64K 16位code 程序ROM64K 16位0~65535定义变量例:数据类型[存储类型]变量名unsigned int data var1; unsigned intbit bdata flags;unsigned char code vector[10];不同的存储模式对变量默认的存储器类型不一样1.SMALL模式:小编译模式。
51单片机及C语言入门教程

51单片机及C语言入门教程本教程将介绍51单片机及C语言的入门知识,帮助初学者快速掌握这两个方面的基本内容。
以下是本教程的详细内容:一、51单片机概述(200字)51单片机是由Intel公司推出的一种常见的单片机芯片,具有广泛应用的特点。
它采用了Harvard结构,具有8位数据总线和16位地址总线。
其主要特点是结构简单、易于学习、应用广泛,适用于各种嵌入式系统。
二、C语言基础(300字)C语言是一种高级编程语言,具有跨平台、可移植性强等特点,被广泛应用于各种软件开发和嵌入式系统中。
学习C语言的基础知识是学习51单片机编程的必要前提。
C语言基础知识主要包括数据类型、变量、常量、运算符、表达式、流程控制语句等内容。
这些知识是学习C语言和51单片机编程的基础,需要仔细理解和掌握。
三、51单片机编程入门(400字)1. 搭建开发环境:首先需要安装51单片机的开发工具,如KeilC51等。
然后,连接单片机开发板和电脑,确保硬件连接正确。
2.了解开发板:学习使用51单片机的开发板是学习51单片机编程的第一步。
具体包括开发板上各个接口的功能和使用方法。
3.编写第一个程序:根据教材或教程,编写第一个简单的程序,如让LED灯闪烁等。
学习如何通过C语言编写程序,将其烧录到单片机中,并运行和调试。
四、C语言与51单片机的应用(300字)在学习了C语言和51单片机的基础知识之后,可以进一步学习它们的应用。
1.输入输出操作:学习如何通过51单片机与外部设备进行输入输出操作,如控制LED灯的亮灭、读取按键输入等。
2.定时器和中断:学习如何使用51单片机的定时器和中断功能来实现定时任务和外部事件处理。
3.串口通信:学习如何通过51单片机的串口通信功能与其他设备进行数据交换和通信。
五、实例项目及拓展应用(200字)完成了基础学习后,可以尝试一些实例项目,如温度测量系统、遥控器、电子钟等。
同时,可以进一步学习其他相关知识,如LCD显示、SPI 通信等,以扩展自己的应用能力。
51单片机C语言编程入门(详讲版)

中国科学技术大学业余无线电协会编目 录§1 前言 (1)§2 单片机简介 (2)2.1 数字电路简介 (2)2.2 MCS-51单片机简介 (2)2.3 Easy 51 Kit Pro简介 (5)2.4 Easy 51 Kit Pro电路功能分析 (5)§3 MCS-51单片机的C语言编程 (8)3.1 汇编语言 (8)3.2 建立你的第一个C项目 (8)3.3 生成hex文件 (12)3.4 Keil C语言 (14)3.5 单片机I/O (18)3.6 中断 (25)3.7 定时器/计数器 (27)3.8 定时器的应用举例 (29)3.9 外部中断 (34)3.10 串行通信 (38)3.11 定时器2 (43)3.12 看门狗 (47)3.13 空闲模式和掉电模式 (50)§4 MCS-51单片机C语言编程应用进阶 (51)4.1 扫描式键盘 (51)4.2 EEPROM芯片AT93C46的读写 (55)4.3 Keil C的高级使用 (63)§5 编写高质量的单片机C程序 (64)5.1 文件结构 (64)5.2 程序的版式 (66)5.3 单片机程序命名规则与变量选择 (70)5.4 表达式和基本语句 (73)5.5 函数设计 (77)5.6 单片机程序框架 (79)附图:Easy 51 Kit Pro电路图(最小系统板) (80)附图:Easy 51 Kit Pro电路图(学习板) (81)§1 前言什么是单片机,目前还没有一个确切的定义。
普通认为单片机是将CPU、RAM、ROM、定时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。
简称为单片微机或单片机。
利用单片机程序,可以实现对硬件系统的小型化的智能控制。
51单片机C语言教程

新建一个 RunLED 的项目,主程序如下: #include //预处理文件里面定义了特殊寄存器的名称如 P1 口定义为 P1 void main(void) { //定义花样数据 const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF, 0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0, 0xE7,0xDB,0xBD,0x7E,0xFF}; unsigned int a; //定义循环用的变量 unsigned char b; //在 c51 编程中因内存有限尽可能注意变量类型的使用 //尽可能使用少字节的类型,在大型的程序中很受用 do{ for (b=0; b<32; b++)
8.sfr16 16 位特殊功能寄存器
sfr16 占用两个内存单元,值域为 0~65535。sfr16 和 sfr 一样用于操作特殊功能寄存 器,所不一样的 是它用于操作占两个字节的寄存器,如定时器 T0 和 T1。
9. sbit 可录址位
sbit 同样是 单片机 c 语言 中的一种扩充数据类型,利用它能访问芯片内部的 RAM 中的可寻址
5. 位标量,它的值是一个二进制。
转义字符 \o \n \r \t \b \f \ \" \\
含义 空字符(NULL) 换行符(LF) 回车符(CR) 水平制表符(HT) 退格符(BS) 换页符(FF) 单引号 双引号 反斜杠
C51单片机基础学习教程

C51单片机基础学习教程C51单片机是一种常用的8位单片机,广泛应用于工业控制、家用电器和电子产品等领域。
若想学习C51单片机,首先需要掌握C语言的基础知识。
以下是一个C51单片机基础学习教程,介绍了C语言的相关内容,并给出了一个简单的例子。
一、C语言基础1.数据类型:C语言中主要有整型、字符型、浮点型等数据类型。
可以使用关键字来定义变量并赋值。
示例:int num = 10;char ch = 'A';float f = 3.14;2.运算符:C语言中有算术运算符、逻辑运算符、关系运算符等。
可以用于对变量进行运算和比较。
示例:int a = 10, b = 5;int sum = a + b;int result = (a > b) ? a : b;3.控制语句:C语言中有顺序结构、分支结构和循环结构。
可以用于控制程序的执行流程。
示例:if (num > 0)printf("The number is positive.");} else if (num < 0)printf("The number is negative.");} elseprintf("The number is zero.");4.函数:C语言中可以使用函数将代码模块化,并且可以通过参数和返回值传递数据。
示例:int add(int a, int b)return a + b;二、C51单片机入门2. 创建新项目:在Keil软件中创建一个新的项目,并选择C51单片机作为目标芯片。
3. 编写程序:在新建的项目中打开main.c文件,编写C语言程序。
可以使用C语言的代码编写方式。
示例:#include <reg51.h>//定义LED端口sbit LED = P1^0;void mai//设置LED口为输出LED=0;while (1)//LED闪烁LED=~LED;//延时for (int j = 0; j < 100; j++)}}}5. 调试程序:在Keil软件中打开调试窗口,可以对程序进行单步调试,查看程序的执行流程和变量的值。
51单片机C语言入门教程

51单片机C语言入门教程单片机是一种集成电路,可以完成各种功能。
C语言是一种高级编程语言,可以用来编写单片机的程序。
本文将介绍51单片机C语言的入门教程。
一、选择合适的开发环境选择合适的开发环境是学习51单片机C语言的第一步。
常用的开发环境有Keil C51、SDCC、IAR Embedded Workbench等。
这些开发环境都提供了开发工具和编译器,方便编写和调试代码。
二、了解51单片机的基本结构三、学习C语言的基本语法学习C语言的基本语法是学习51单片机C语言的基础。
C语言包括数据类型、变量、运算符、控制流语句等等。
学习C语言的基本语法可以参考相关的C语言教程。
四、掌握51单片机的特殊功能寄存器51单片机具有一些特殊功能寄存器,可以实现各种功能。
例如,P0是一个I/O口,可以用来控制外部设备的输入和输出;TMOD和TCON分别是定时器/计数器的模式和控制寄存器,可以实现定时和计数功能。
掌握这些特殊功能寄存器可以为后面的单片机编程做好准备。
五、编写第一个51单片机C语言程序编写第一个51单片机C语言程序可以帮助巩固前面学习的知识。
可以从简单的LED闪烁程序开始,逐步扩展到其他功能。
编写程序的过程中要注意语法的正确性和逻辑的合理性。
六、调试程序调试程序是保证程序正确运行的关键。
可以使用仿真器或者调试器对程序进行调试。
调试程序可以查看程序的运行状态、变量的值等等,帮助定位错误并进行修复。
七、深入学习更高级的C语言特性一旦掌握了基本的51单片机C语言编程,可以深入学习更高级的C语言特性。
例如,函数的使用、数组的应用、结构体和指针等等。
这些高级特性可以使程序更加模块化和灵活。
八、练习和实践练习和实践是巩固51单片机C语言编程知识的最好方法。
可以选择一些小项目或者例程进行练习,将理论知识应用于实际。
总结:通过以上的步骤,我们可以初步学习和掌握51单片机C语言的编程。
当然,这仅仅是入门级别的教程,还有很多更深入的知识需要进一步学习和探索。
(1小时学会C语言51单片机)C语言入门教程1

我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。
一般只须连接晶体、VCC、GND、RST即可,一般情况下,A T89C51的31脚须接高电平。
#include<reg51.h> //头文件定义。
或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。
//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。
因为我们把LED的正通过电阻接至VCC。
P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。
那么这样就能达到了我们预先的要求了。
while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。
如果我们要试着点亮其他的LED,也类似上述语句。
这里就不再讲了。
点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。
我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。
假设我们有8个LED分别接在P1口的8个引脚上。
硬件连接,在P1_1--P1_7上再接7个LED即可。
例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。
单片机C51教程

例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 默认的存储类型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
读引脚
图 1.6 P2 口的结构图 P2 口作为普通 I/O 口
CPU 发出控制电平“0” ,使多路开关 MUX 倒向锁存器输出 Q 端,构成一个 准双向口。其功能与 P1 相同。
地址
控制 C
VCC
读锁存器 R
内部总线 写锁存器
D
Q
P2.X
CL 锁存器
1 0 MUX
1 T
P2.X引脚
读引脚
图 1.7 P2 口作为地址总线图 在系统扩展片外程序存储器扩展数据存储器且容量超过 256B 时,CPU 发出控 制电平“1”,使多路开关 MUX 倒内部地址线。
2
误。
读锁存器
地址/数据
控制C &
1
内部总线 写锁存器
D
Q
CL
P0.X 锁存器
_ Q
1 0 MUX
VCC
T1 P0.X引脚
T2
器
地址/数据 1
控制C &
VCC
T1
内部总线
写锁存器
D
Q
P0.X CL 锁存器
_ Q
1 0 MUX
T2
P0.X引脚
第 1 章 初步了解单片机
1.189C51 的引脚封装
总线型
非总线型
图2 89C2051的引脚封装
图1 89C51的引脚封装
1.1 基本的 51 单片机结构
1.2 P0 口的结构
图 1.2 51 单片机结构图
1
下图为 P0 口的某位 P0.n(n=0~7)结构图,它由一个输出锁存器、一个转换开 关 MUX、两个三态输入缓冲器和输出驱动电路及控制电路组成。从图中可以看出 P0 口既可以作为 I/O 用,也可以作为地址/数据线用。
特点:无返回值,无参。
任何一个 C 程序有且仅有一个 main 函数,它是整个程序开始执行的入口。
例:void main()
{
总程序从这里开始执行;
其他语句;
}
2.2 数据类型
1.C-51 数据的存储类型
例:数据类型
变量名
char
miao;
bit
flag;
unsigned char code table[]={};
3
读锁存器
地址
控制 C
VCC
R
内部总线 写锁存器
D
Q
P2.X
CL 锁存器
1 0 MUX
1 T
P2.X引脚
读引脚
图 1.8 P2 口作为数据总线图 1.4 P1 口的内部结构
P1 口是 80C51 的唯一的单功能口,仅能用作数据输入输出口,它由一个输出 锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口。同 P2 口相同, 内部设有上拉电阻(约 30KΩ)。
目录 第 1 章 初步了解单片机.................................... 1 第 2 章 了解 uVision 3 与 Keil C ........................... 7 第 3 章 Proteus 入门及 IO 口 .............................. 16 第 4 章 数码管显示应用................................... 19 第 5 章 键盘的应用...................................... 29 第 6 章 定时/计数器...................................... 39 第 7 章 中断的应用 ...................................... 44 第 8 章 串行口应用 ...................................... 48 第 9 章 单片机学习板制作................................. 54 第 10 章 AD 转换器的应用 ................................. 57 第 11 章 DA 转换器的应用 ................................. 65 第 12 章 液晶的应用仿真.................................. 73
8
图 2.7 在 2 区输入程序,再点击 3 保存 图 2.8 将保存的 test1.c 加入工程
9
图 2.9 编译工程
图 2.10 调试运行程序 图 2.11 参数设置
10
图 2.12 选中 Create HEX 产生 HEX 文件
图 2.13 生成可烧写的 HEX 文件 2.2 Keil C 语言的基本结构 1.指定头文件 #include<reg52.h> //加载头文件 2.声明区 unsigned int [自定义名]
18 19 20
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 XTAL1 XTAL2 GND
AT89C52
VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA ALE PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
6
第 2 章 了解 uVision 3 与 Keil C
2.1 Keil uVision3 软件 1. Keil uVision3 软件操作步骤
图 2.1 打开 Keil uVision3 软件
图 2.2 建立新工程
7
图 2.3 建立一个 test 的工程 图 2.5 选择单片机的型号 AT89C52 图 2.6 点击图中的 1 新建一个文件
int
led;
注意:变量名不能用 C 语言中的关键字表示。
2.C-51 的数据类型扩充定义
sfr:特殊功能寄存器声明
sfr16:sfr 的 16 位数据声明
sbit:特殊功能位声明
bit:位变量声明
例:sfr SCON = 0X98;
sfr16 T2 = 0xCC;
sbit LED = P0^2;
表 1:数据的存储类型
&
R1
1
T1
内部总线 写锁存器
D
Q
P0.X CL 锁存器
_ Q
1 0 MUX
P0.X引脚 T2
读引脚
图 1.4 P0 口的结构图 1.3 P0 口作为普通 I/O 口(输出口)
CPU 发出控制电平“0”封锁“与”门,将输出上拉场效应管 T1 截止,同时 使多路开关 MUX 把锁存器与输出驱动场效应管 T2 栅极接通。故内部总线与 P0 口同通。由于输出驱动级是漏极开路电路,若驱动 NMOS 或其它拉电流负载时, 需要外接上拉电阻。P0 的输出级可驱动 8 个 LSTTL 负载。
地址/数据
控制C
VCC
读锁存器 &
1
T1
内部总线 写锁存器
D
Q
P0.X CL 锁存器
_ Q
1 0 MUX
P0.X引脚 T2
读引脚
图 1.3 P0 口的结构图 P0 口必须接上拉电阻;在读信号之前数据之前,先要向相应的锁存器做写 1 操作的 I/O 口称为准双向口。
地址/数据
控制C
VCC
VCC
读锁存器
作,晶振信号经 12 分频后形成机器周期。 当单片机的时钟系统工作正常的时候,在 ALE 引脚可以观察到稳定的脉冲
信号,其频率为:晶振频率/6。
机器周期TCY
S1 S2 S3 S4 S5 S6
振荡器
分 P1 频 80C51 器 P2
晶振周期
S状态
图 1.13 单片机工作的基本时序图 机器周期和指令周期
下面一个缓冲器用于读端口引脚数据,当执行一条由端口输入的指令时,读 脉冲把该三态缓冲器打开,这样端口引脚上的数据经过缓冲器读入到内部总线。 如果此时该端口的负载恰是一个晶体管基极,且原端口输出值为 1,那么导通了 的 PN 结会把端口引脚高电平拉低;若此时直接读端口引脚信号,将会把原输出 的“1”电平误读为“0”电平。现采用读输出锁存器代替读引脚,图中,上面的 三态缓冲器就为读锁存器 Q 端信号而设,读输出锁存器可避免上述可能发生的错
P3.0: RXD 串行口输入
4
P3.1: TXD 串行口输出 P3.2: INT0 外部中断 0 输入 P3.3: INT1 外部中断 1 输入 P3.4 T0 定时器 0 外部输入 P3.5: T1 定时器 1 外部输入 P3.6: WR 外部写控制 P3.7: RD 外部读控制 1.6 单片机最小系统
读锁存器
VCC
R
内部总线 写锁存器
D
Q
CL
P1.X 锁存器
_ Q
P1.X引脚 T
读引脚
图 1.9 P1 口的内部结构图 1.5 P3 口的内部结构
读锁存器
第二输出_功__能W___ (TXD、WR、RD)
VCC
R
内部总线 写锁存器
D
Q
P3.X
CL 锁存器
& T
P3.X引脚
读引脚
第二输入__功__能 ____ (RXD、INT0、INT1、T0、T1)
CON9
图 1.12 单片机最小系统原理图 晶振周期(即时钟周期)为最小时序单位,晶振信号经分频器后形成两相错 开的信号 P1 和 P2。 P1 和 P2 的周期也称为 S 状态,它是晶振周期的 2 倍。即一 个 S 状态包含两个晶振周期。CPU 以 P1 和 P2 为基本节拍指挥各个部件协调的工
5
//定义一个 0~65535 的整形变量 unsigned char [自定义名]