您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C51单片机基础学习教程(C语言)
目录第1章初步了解单片机....................................1第2章了解uVision3与KeilC...........................7第3章Proteus入门及IO口..............................16第4章数码管显示应用...................................19第5章键盘的应用......................................29第6章定时/计数器......................................39第7章中断的应用......................................44第8章串行口应用......................................48第9章单片机学习板制作.................................54第10章AD转换器的应用.................................57第11章DA转换器的应用.................................65第12章液晶的应用仿真..................................731第1章初步了解单片机1.189C51的引脚封装图189C51的引脚封装总线型非总线型图289C2051的引脚封装1.1基本的51单片机结构图1.251单片机结构图1.2P0口的结构2下图为P0口的某位P0.n(n=0~7)结构图,它由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器和输出驱动电路及控制电路组成。从图中可以看出P0口既可以作为I/O用,也可以作为地址/数据线用。图1.3P0口的结构图P0口必须接上拉电阻;在读信号之前数据之前,先要向相应的锁存器做写1操作的I/O口称为准双向口。图1.4P0口的结构图1.3P0口作为普通I/O口(输出口)CPU发出控制电平“0”封锁“与”门,将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器与输出驱动场效应管T2栅极接通。故内部总线与P0口同通。由于输出驱动级是漏极开路电路,若驱动NMOS或其它拉电流负载时,需要外接上拉电阻。P0的输出级可驱动8个LSTTL负载。下面一个缓冲器用于读端口引脚数据,当执行一条由端口输入的指令时,读脉冲把该三态缓冲器打开,这样端口引脚上的数据经过缓冲器读入到内部总线。如果此时该端口的负载恰是一个晶体管基极,且原端口输出值为1,那么导通了的PN结会把端口引脚高电平拉低;若此时直接读端口引脚信号,将会把原输出的“1”电平误读为“0”电平。现采用读输出锁存器代替读引脚,图中,上面的三态缓冲器就为读锁存器Q端信号而设,读输出锁存器可避免上述可能发生的错读锁存器写锁存器内部总线读引脚P0.X锁存器DCLQQ_110&T1T2P0.X引脚VCCMUX地址/数据控制CR1VCC读锁存器写锁存器内部总线读引脚P0.X锁存器DCLQQ_110&T1T2P0.X引脚VCCMUX地址/数据控制C3误。图1.5P0口作为普通I/O口(输入口)图1.6P2口的结构图P2口作为普通I/O口CPU发出控制电平“0”,使多路开关MUX倒向锁存器输出Q端,构成一个准双向口。其功能与P1相同。图1.7P2口作为地址总线图在系统扩展片外程序存储器扩展数据存储器且容量超过256B时,CPU发出控制电平“1”,使多路开关MUX倒内部地址线。读锁存器写锁存器内部总线读引脚P2.X锁存器DCLQ10TP2.X引脚VCCMUX地址控制CR1读锁存器写锁存器内部总线读引脚P0.X锁存器DCLQQ_110&T1T2P0.X引脚VCCMUX地址/数据控制C读锁存器写锁存器内部总线读引脚P0.X锁存器DCLQQ_110&T1T2P0.X引脚VCCMUX地址/数据控制C4图1.8P2口作为数据总线图1.4P1口的内部结构P1口是80C51的唯一的单功能口,仅能用作数据输入输出口,它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口。同P2口相同,内部设有上拉电阻(约30KΩ)。图1.9P1口的内部结构图1.5P3口的内部结构图1.10P3口的内部结构图作为通用I/O口与P1口类似----准双向口(W=1)P1口是80C51的唯一的单功能口,仅能用作数据输入输出口,它由一个输出锁存器、三个输入缓冲器、一个与非门和输出驱动电路组成。同P2口相同,内部设有上拉电阻(约30KΩ)。P3第二功能各引脚功能定义:P3.0:RXD串行口输入读锁存器写锁存器内部总线读引脚P3.X锁存器DCLQTP3.X引脚VCCR&第二输出功能W(TXD、WR、RD)(RXD、INT0、INT1、T0、T1)第二输入功能______________读锁存器写锁存器内部总线读引脚P1.X锁存器DCLQQ_TP1.X引脚VCCR读锁存器写锁存器内部总线读引脚P2.X锁存器DCLQ10TP2.X引脚VCCMUX地址控制CR15P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制1.6单片机最小系统图1.11单片机最小系统原理图及元件实物图1.12单片机最小系统原理图晶振周期(即时钟周期)为最小时序单位,晶振信号经分频器后形成两相错开的信号P1和P2。P1和P2的周期也称为S状态,它是晶振周期的2倍。即一个S状态包含两个晶振周期。CPU以P1和P2为基本节拍指挥各个部件协调的工C230PC130PJZ11.0592R110K+C8C111223344K2P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST9P3.010P3.111P3.212P3.313P3.414P3.515P3.616P3.717XTAL118XTAL219GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE30EA31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40AT89C52123456789J5CON9P12P13P14P15P16P17P30P31P33P34P35P36P37P11P18P32P01P02P03P04P05P06P07P08EAP21P22P23P24P25P26P27P28ALEPSEVccR21kVcc6作,晶振信号经12分频后形成机器周期。当单片机的时钟系统工作正常的时候,在ALE引脚可以观察到稳定的脉冲信号,其频率为:晶振频率/6。图1.13单片机工作的基本时序图机器周期和指令周期(1)振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期.(2)状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。(3)机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。(4)指令周期:它是指CPU完成一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。MCS-51系统中,有单周期指令、双周期指令和四周期指令。1.7思考题1.STC89C52单片机内部程序存储器与数据存储器的容量各为多少?2.52系列单片机比51系列单片机多出的功能是什么?3.在DIP40封装的52系列单片机里,接地引脚、电源引脚、复位引脚和晶振引脚分别是那几个引脚。4.在12MHz时钟脉冲的52系列单片机系统里,一个机器周期是多长时间?5.在52系列单片机,那个引脚是控制使用内部程序存储器,还是外部程序存储器?晶振周期S状态S1S2S3S4S5S6机器周期TCYP1P280C51振荡器分频器7第2章了解uVision3与KeilC2.1KeiluVision3软件1.KeiluVision3软件操作步骤图2.1打开KeiluVision3软件图2.2建立新工程8图2.3建立一个test的工程图2.5选择单片机的型号AT89C52图2.6点击图中的1新建一个文件9图2.7在2区输入程序,再点击3保存图2.8将保存的test1.c加入工程10图2.9编译工程图2.10调试运行程序图2.11参数设置11图2.12选中CreateHEX产生HEX文件图2.13生成可烧写的HEX文件2.2KeilC语言的基本结构1.指定头文件#includereg52.h//加载头文件2.声明区unsignedint[自定义名]//定义一个0~65535的整形变量unsignedchar[自定义名]//定义一个0~255的字符变量。#define[代替名][原名]例:#defineuintunsignedint#defineTA0x253.Main函数格式:voidmain()12特点:无返回值,无参。任何一个C程序有且仅有一个main函数,它是整个程序开始执行的入口。例:voidmain(){总程序从这里开始执行;其他语句;}2.2数据类型1.C-51数据的存储类型例:数据类型变量名charmiao;bitflag;unsignedcharcodetable[]={};intled;注意:变量名不能用C语言中的关键字表示。2.C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr16:sfr的16位数据声明sbit:特殊功能位声明bit:位变量声明例:sfrSCON=0X98;sfr16T2=0xCC;sbitLED=P0^2;表1:数据的存储类型2.3C-51相比ASM-51的优点对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解;寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;方便实现规13范结构的模块化编程,已编好程序可容易地移植;提供的库包含许多标准子程序,具有较强的数据处理能力。ctype.h字符函数;stdio.h标准I/O函数;string.h字符串函数;stdlib.h标准库函数;math.h数学函数;absacc.h绝对地址访问函数intrins.h内部函数;stdarg.h变量函数表;setjmp.h全程跳转函数reg51.hreg52.h……标准寄存器定义表AT89X51.h……不同系列芯片的特殊寄存器定义表表2:存储器类型C51数据声明的一般格式:[类型说明符][修饰符]标识符[=初值]……例如:unsignedcharcodeFlag=0x0f;就是声明一个无符号的char型变量Flag,并给他赋初值为0x0f;并且声明他所在的存储空间在片内统一编址的ROM中。声明中,如果没有修饰符,则数据默认的存储空间为data型,也就是在片内RAM中。2.4KeilC的运算符+-*/(加减乘除)==(大于大于等于小于小于等于)==!=(测试等于测试不等于)&&||!(逻辑与逻辑或逻辑非)(位右移位左移)&|(按位与按位或)^~(按位异或按位取反)2.5C-51的运算符与基本语句if选择语句switch/case多分支选择语句while循环语句14do-while循环语句for循环语句2.5.1选择语句if(表达式){语句;}当表达式的结果为真时,则执行语句;执行完之后继续执行后续语句。当表达式为假的时候则跳过语句执行后续语句。if(表达式){语句1;}else{语句2;}当表达式为真时,执行语句1;执行完之后执行if语句后面的语句。当表达式为假时,执行语句2;执行完之后执行if语句后面的语句。2.5.2循环语句While(表达式){语句(内部也可为空)}特点:先判断表达式,后执行语句。原则:若表达式不是0,即为真,那么执行语句。否则跳出while语句。while(1){程序主体;}while(0==a){}while(1);For(表达式1;表达式2;表达式3)
本文标题:C51单片机基础学习教程(C语言)
链接地址:https://www.777doc.com/doc-5468647 .html