2021年51单片机学习总结_2_第1页
2021年51单片机学习总结_2_第2页
2021年51单片机学习总结_2_第3页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、51单片机学习总结1、什么是单片机在一片集成电路芯片上集成微处理器、存储器、i/o接口电路,从而构成了单芯片微型计算机,即单片机。intel公司推出了mcs-51系列单片机集成8位cpu、4k字节rom、128字节ram、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64k,并有控制功能较强的布尔处理器。2、单片机的作用用到单片机的项目经验介绍手持粮库温度寻检设备毕设答辩打分器电话台灯自动感应水龙头凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如atmel,stc,pic,avr,凌阳,80c51,arm等工业自动化数据采集、

2、测控技术。智能仪器仪表数字示波器、数字信号源、数字万用表、感应电流表等。消费类电子产品洗衣机、电冰箱、空调机、电视机、微波炉、手机、ic卡、汽车电子设备等。通讯方面调制解调器、程控交换技术、手机、小灵通等。武器装备飞机、军舰、坦克、导弹、航天飞机、鱼雷制导、智能武器等。等等.3、学习单片机之前预备知识(1)数字电路中只有两种电平高和低定义单片机为ttl电平高+5v低0v(2)rs232电平计算机的串口高-12v低+12v所以计算机与单片机之间通讯时需要加电平转换芯片(3)进制转换与逻辑、算术运算(4)c语言基础(5)80c51了解80c51是mcs-51系列中的一个典型品种;其它厂商以8051

3、为基核开发出的cmos工艺单片机产品统称为80c51系列。(6)总线(bus)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是cpu内部之间的连线。外部总线是指cpu与其它部件之间的连线。外部总线有三种:数据总线db(databus),地址总线ab(addressbus)和控制总线cbcontrolbus)。(7)cpu由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;ram用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;rom用以存放程序、一些原始数据和表格;i/o口四个8位并行i/o口,既可用作输入,也可用作输出;t/c两

4、个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工uart(通用异步接收发送器)的串行i/o口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。(8)c51数据存储类型例数据类型变量名charvar1;bitflags;unsignedcharvextor10;int;注意变量名不能用c语言中的关键字表示。(9)包含的头文件(可以在安装目录下inc目录下查看)通常有:reg5hreg5hmath.hctype.hstdio.hstdlib.habsacc.h常

5、用有:reg5hreg5h(定义特殊功能寄存器和位寄存器);math.h(定义常用数学运算);(10)中断服务程序的格式函数名()interruptnusingm函数内部实现.(11)i/o口定义sbitbeep=p23;(12)单片机的基本时序机器周期和指令周期(1)振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,tx实验板上为10592mhz。(2)状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。(3)机器周期:一个机器周期包含6个状态周期s1s6,也就是12个时钟周期。在一个机器周期内,cpu可以完成一个独立的操作。(4)指令周期:它是指cpu完成

6、一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。mcs-51系统中,有单周期指令、双周期指令和四周期指令。4、学习单片机目标最小系统能够运行起来的必要条件。电源晶振复位电路对单片机任意io口的随意操作输出控制电平高低输入检测电平高低。定时器重点掌握最常用的方式2中断外部中断、定时器中断、串口中断串口通信单片机之间、单片机与计算机间扩展阅读51单片机串口通信学习总结51单片机串口通信学习总结1近距离的单片机点对点通信如果两个51单片机系统之间的距离很短,可以通过将它们的自带串口直接相连的方法实现双机通信,连接时注意要将一方的txd和另一方的rxd引脚相连。2如果通信距离较远

7、,可以利用rs-232c接口延长通信距离,但必须将单片机的ttl电平和rs-232c标准电平进行转换,如常用的max232,。内部结构基本可分三个部分第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给rs-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(r1in)、12脚(r1out)、11脚(t1in)、14脚(t1out)为第一数据通道。8脚(r2in)、9脚(r2out)、10脚(t2in)、7脚(t2out)为第二数据通道。ttl/cmos数据从t1in、t

8、2in输入转换成rs-232数据从t1out、t2out送到电脑db9插头;db9插头的rs-232数据从r1in、r2in输入转换成ttl/cmos数据后从r1out、r2out输出。第三部分是供电。15脚gnd、16脚vcc(+5v)。硬件电路设计注意怎样连线单片机与max232同名相对,rr,ttmax232与db9异名相对,rt,tr串口通信主要包括串口数据发送和接收。发送实例:#include/单片机52头文件,存放着单片机的寄存器#defineuintunsignedint/宏定义#defineucharunsignedcharvoiddelay_ms(ucharms);/声明一个

9、ms级延时函数voiduart_init(void);/声明串口初始化函数voiduart_send_byte(ucharbyte);/声明串口发送单字节函数voidmain(void)/主函数uchari=0;/定义一个变量uart_init();/串口初始化while(1)/死循环uart_send_byte(i);/串口发送单字节数据delay_ms(500);/延时500msif(+i10)/i自加到10清0i=0;/定义delay_ms函数voiddelay_ms(ucharms)uchari;while(ms-)for(i=0;i接收实例1)#include/单片机52头文件,存放

10、着单片机的寄存器#defineuintunsignedint/宏定义#defineucharunsignedcharvoiduart_init(void);/声明串口初始化函数voiduart_send_byte(ucharbyte);/声明串口发送单字节函数voidmain(void)/主函数uchari=0;/定义一个变量uart_init();/串口初始化while(1)/死循环if(ri)/检测接收完成标志位置1ri=0;/清零接收完成标志位i=sbuf;/读取接收到的数据uart_send_byte(i);/串口发送单字节数据/定义uart_init函数voiduart_init(v

11、oid)scon=0x50;/设定串行口工作方式,8位数据位,允许接收t2con=0x34;/设置定时器2,作为波特率发生器rcap2l=0xd9;/9600波特率的低8位rcap2h=0xff;/9600波特率的高8位/定义uart_send_byte函数voiduart_send_byte(ucharbyte)sbuf=byte;/缓冲区装载要发送的字节数据while(ti=0);/等待发送完毕,ti标志位会置1ti=0;/清零发送完成标志位2)#include/单片机52头文件,存放着单片机的寄存器#defineuintunsignedint/宏定义#defineucharunsigne

12、dcharvoiduart_init(void);/声明串口初始化函数voiduart_send_byte(ucharbyte);/声明串口发送单字节函数voidmain(void)/主函数uart_init();/串口初始化while(1)/死循环/定义uart_init函数voiduart_init(void)scon=0x50;/设定串行口工作方式,8位数据位,允许接收t2con=0x34;/设置定时器2,作为波特率发生器rcap2l=0xd9;/9600波特率的低8位rcap2h=0xff;/9600波特率的高8位es=1;/允许串口中断ea=1;/允许总中断/定义uart_send_

13、byte函数voiduart_send_byte(ucharbyte)sbuf=byte;/缓冲区装载要发送的字节数据while(ti=0);/等待发送完毕,ti标志位会置1ti=0;/清零发送完成标志位uchari=0;/定义一个变量/串口中断服务程序voiduart(void)interrupt4if(ri)/检测接收完成标志位置1ri=0;/清零接收完成标志位i=sbuf;/读取接收到的数据uart_send_byte(i);/串口发送单字节数据重点说明51单片机可以通过sbuf寄存器对串行接收或发送寄存器进行访问,两个寄存器共用一个地址99h,但在物理上是两个独立的寄存器,有指令操作决

14、定访问哪一个。eg接收时,我们写“a=sbuf;”发送时,我们写“sbuf=a;”实例一#include/单片机52头文件,存放着单片机的寄存器#defineuintunsignedint/宏定义#defineucharunsignedcharucharuart_flag,a,i;ucharcodetable=;voiduart_init(void);/声明串口初始化函数voiduart_send_byte(ucharbyte);/声明串口发送单字节函数voidmain(void)/主函数uart_init();/串口初始化while(1)/死循环if(uart_flag=1)/接收到es=0

15、;/关串口中断for(i=0;iuart_send_byte(a);/发送接收到的字符es=1;/允许串口中断uart_flag=0;/中断标志位置0/定义uart_init函数voiduart_init(void)scon=0x50;/设定串行口工作方式,8位数据位,允许接收t2con=0x34;/设置定时器2,作为波特率发生器rcap2l=0xdc;/9600波特率的低8位rcap2h=0xff;/9600波特率的高8位es=1;/允许串口中断ea=1;/允许总中断/定义uart_send_byte函数voiduart_send_byte(ucharbyte)sbuf=byte;/缓冲区装

16、载要发送的字节数据while(ti=0);/等待发送完毕,ti标志位会置1ti=0;/清零发送完成标志位/串口接收中断服务程序voiduart(void)interrupt4if(ri)/检测接收完成标志位置1ri=0;/清零接收完成标志位a=sbuf;/读取接收到的数据uart_flag=1;/中断标志位置1实例二#include/单片机51头文件,存放着单片机的寄存器#include/为了使用空指令加载的头文件#include#defineucharunsignedchar#defineuintunsignedintsbitsmg1=p26;/数码管位选sbitsmg2=p25;/数码管位

17、选sbitsmg3=p24;/数码管位选ucharflag_uart;/串口中断标志ucharflag_time;/1s钟标志ucharflag_on;/ad运行标志uchara;uchari;uchart0_num;/t050ms定时标志ucharad_val;/ad采集得到的值(二进制表示)floatad_vo;/实际电压标准值unsignedcharcodetable10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/数码管段选显示0-9sbitcs=p33;/ad的cs控制管脚定义sbitwr=p35;/ad的wr控制管脚定义sb

18、itrd=p34;/ad的rd控制管脚定义voiddelay(uintcount)/delayuinti;while(count)i=200;while(i0)i-;count-;voidinit(void)tmod=0x21;/定计0工作方式1,定计1工作方式2th0=(65536-50000)/256;/定计0赋初值tl0=(65536-50000)%256;th1=0xfd;/定计1赋初值tl1=0xfd;tr1=1;/开定计1et0=1;/开定计0中断scon=0x50;/串口控制寄存器sm0=0,sm1=1,ren=1ea=1;/开总中断es=1;/开串口中断unsignedchar

19、adc0804(void)/读ad0804子程序unsignedcharaddata,i;rd=1;wr=1;/int1=1;/读adc0804前准备p1=0xff;/p1全部置一准备cs=0;wr=0;wr=1;/启动adc0804开始测电压rd=0;/开始读转换后数据i=i;i=i;/无意义语句,用于延时等待adc0804读数完毕addata=p1;/读出的数据赋与addaterd=1;cs=1;/读数完毕return(addata);/返回最后读出的数据voiddisplay(inttemp)smg3=1;smg2=1;delay(1);p0=tabletemp/100;/显示百位smg

20、1=0;delay(1);smg1=1;smg3=1;p0=tabletemp%100/10;/显示十位smg2=0;delay(1);smg2=1;smg1=1;p0=tabletemp%10;/显示个位smg3=0;delay(1);smg3=1;voidmain(void)init();/初始化while(1)if(flag_uart=1)/接收到数据flag_uart=0;/串口中断标志置0es=0;/关串口中断,若不关闭,每发送一个字节,程序就会申请进入串口中断,从而导致程序出错ti=1;/发送标志置1switch(flag_on)case0:puts(turnonad!);tr0=1;break;case1:puts

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论