51单片机知识点总结

时间:2024.4.20

51单片机知识点总结

第二章:

存储器空间组成,各区间特点及访问方式,工作寄存器区的设定,程序状态字的位结构及其功能,堆栈的操作,P0-P3各端口的功能,特点,使用方法,单片机复位信号的产生及复位之后的状态,振荡周期、状态周期、机器周期及指令周期的关系及计算方法。

第三章:

寻址方式,各类指令(如一般传送类指令五种操作数之间的数据传递,特殊传送类指令的使用方法,算术运算类指令对PSW各标志位的影响,逻辑运算类指令的功能及其使用,控制转移类指令的转移范围等),简单程序的编写与识读(如数据块的搬移,延时程序的实现及如何设定循环次数,查表程序),包括简单C语言程序的识读(如数据传送,数据排序等)。

第四章:

中断系统:包括中断源有哪些,如何进行中断允许控制,中断优先级控制,各自的中断入口地址是多少,中断得到CPU服务(即中断响应)的基本条件,中断响应延迟的原因。

定时器:定时器的各种工作方式及其使用方法,定时器的初始化,如何使用定时器实现周期信号的输出。以及相应的简单编程。

串行口:串行口的各工作方式及其使用,接收如何使能,多机通信

第五章:

三总线结构及其实现,片外扩展芯片的编址方式及其特点,片外程序及数据存储器的扩展实现并分析其地址区间,片外IO扩展的实现及其器件编址,简单编程。

第六章:

键盘,主要是行列式编码键盘的实现方法,识别方法,扫描法的工作原理,按键去抖动。LED段码实现方法,动态LED显示与静态LED显示的比较。


第二篇:51单片机控制的遥控车制作过程总结和体会


我于2010/7/16日才正式决定做遥控车。到2010/7/31中午正式全部完成。

首先 我做的遥控车目前的功能有:前进,后退,开始,停止,加速,减速,左转,右转

用的无线发送接收方式,用pt2262编码,pt2272解码!

1,  测速模块(虽然最后没用上,还是说说),测速的方式有很多很多,我们选择的方式有红外测速,光敏测速。最后查完资料决定用光敏测速,我是在机械鼠标上拆的光敏三极管,通过计固定时间内的低电平次数,就可以测出转速,但是使用时出了问题,几乎三极管集电极电压保持在1.7伏左右,主要是因为受自然光影响,随后对其进行密封,只留个很小的进光孔,效果还不错

2,  电机驱动部分。网上流传甚广的是如下电路图

1_070321124025.jpg

11脚出现高电平时,使左边的9014导通,从而左边的8050和右边的8550导通,经实验,确实没问题,但是如果第11和10同时为高呢?因为单片机通电的各引脚瞬间是高电平,将导致两边8550,8050没经过电机而导通。其二,我实验的时候,反正经常出现控制不了的状况,即让左边9014导通,而电机不能正常转动,其三,当电机整个驱动电压为7.6V时,9014门极控制为4.5V,发现电机转动的很慢,而流过电机的电流才0.4A

,而电机端电压居然高达十几伏,最后还不慎将整个电路烧毁了

最后我在网上找到了这个电路:

其中A,B点是接电机的。

这个电路就非常好,好在哪儿?

首先:两控制端同为低,或同为高,电机都不转,8050,8550均未全部导通,那么就不存在短路的情况,其二只有两个引脚一高一低的时候,电机才会正常运转。

而这个电路的驱动能力是相当的好,即使是4.5V的干电池都能轻而易举的让电机快转。但是当把控制端接到单片机上去之后,让单片机输出口输出“1”,而电机并未转动,IO口电压很低,最后我想到了可能是单片机的IO驱动能力不够,因为单片机的IO只能驱动八个TTL电路,最后我在电机控制的各引脚接了13K的上拉电阻(太大太小都不行),然后OK了,电机完全在控制之中了。

3:无线接收模块:

         pt2262和pt2272—M4(瞬态型)的地址端设成一样之后,2262发号,2272接收,接收时VT会输出一个高脉冲,我将其接个非门,目的是能产生中断,因为后面我还打算把语音部分加上,当然你想简单点则可以不加,只是程序要稍作改动。未接单片机时,接收效果非常好,很远都能接收到,但是接上单片机之后发现,2272低电平为0V,高电平却为0.65V,网上说可能是单片机的端口设置成了输出,我检查了一遍,发现并不是这个问题。我想可能和2272的地址设置有关系,因为D0和A11为同一引脚,而单片机的各引脚初始状态为1,你把它改成0 也不对,数据端结果误认为成了地址控制了,所以我索性将各个2272(D0---D3)数据端口接个反相器74HC04;一下子,能够收号了,完全正确。

至此我的小车就做出来了,看着简单,做的时候才知道“锅儿是铁倒的,馍馍是面做的”。

发射部分程序:51单片机控制,因为后面准备做语音部分,所以用单片机发送,容易控制和实现半智能化;电路图看程序即可看出;

#include "reg51.h"

sbit start=P3^3;

sbit stop=P3^4;

sbit qianj=P1^2;

sbit hout=P1^1;

sbit zuoz=P1^0;

sbit youz=P1^3;

sbit jias=P3^1;

sbit jians=P3^2;

sbit fashe=P2^4;

void delay_ms(unsigned char nn)

{

         unsigned char i,j,k;

         for(i=nn;i>0;i++)

                   for(j=2;j>0;j--)

                            for(k=248;k>0;k--);

}

void main()

{

         fashe=0;

         while(1)

         {

         if(qianj==0)

                   {

                   delay_ms(10);

                   if(qianj==0)

                            {

                            while(!qianj);

                            P2=0x08;//前进

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

        

         if(hout==0)

                   {

                   delay_ms(10);

                   if(hout==0)

                            {

                            while(!hout);

                            P2=0x04;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

         if(zuoz==0)

                   {

                   delay_ms(10);

                   if(zuoz==0)

                            {

                            P2=0x02;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

         if(youz==0)

                   {

                   delay_ms(10);

                   if(youz==0)

                            {

                            P2=0x01;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

         if(jias==0)

                   {

                   delay_ms(10);

                   if(jias==0)

                            {

                            P2=0x0c;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

                  

                  

         if(jians==0)

                   {

                   delay_ms(10);

                   if(jians==0)

                            {

                            P2=0x03;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

         if(start==0)

                   {

                   delay_ms(10);

                   if(start==0)

                            {

                            P2=0x0a;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

         if(stop==0)

                   {

                   delay_ms(10);

                   if(stop==0)

                            {

                            P2=0x05;

                            fashe=1;

                            delay_ms(50);

                            fashe=0;

                            }

                   }

                  

        

         }

}

接收部分程序:

#include "reg52.h"

#include "intrins.h"

sbit zuo=P2^2;

sbit you=P2^3;

sbit qianj=P2^0;

sbit hout=P2^1;

sbit p32=P3^2;

unsigned char p_time=0;

unsigned char pwmh=200;

bit flag1=0;    //收号标志

bit qh=0;

/*

void delay_ms(unsigned char nn)

{

         unsigned char i,j,k;

         for(i=nn;i>0;i++)

                   for(j=2;j>0;j--)

                            for(k=248;k>0;k--);

}

*/

void delay_us(unsigned char nn)

{

         unsigned char m;

         unsigned char n;

         for(m=0;m<=nn;m++)

                   for(n=0;n<=33;n++)

                   ;

}

void jiasu(void)

{

          if(pwmh+5>100)

          pwmh=100;

          else pwmh+=5;

}

void jiansu(void)

{

          if(pwmh<=30)

          pwmh=30;

          else pwmh-=5;      

}

void zuoz(void)

{

                   zuo=1;you=0;

                   delay_us(30);

                   zuo=0;you=0;

}

void youz(void)

{

                   you=1;zuo=0;

                   delay_us(30);

                   you=0;zuo=0;

}

void start(void)

{

         TR0=1;

         pwmh=30;

         qh=0;

}

void stop(void)

{

         TR0=0;

         pwmh=0;

}

int0()interrupt 0 using 1{

flag1=1;

}

timer0()interrupt 1 using 1{

         p_time++;

         if(qh==0)

         {

                   if(p_time<=pwmh)

                             {qianj=1;hout=0;}

                   else {qianj=0;hout=0;}

         }

         if(qh==1)

         {

                   if(p_time<=pwmh)

                             {hout=1;qianj=0;}

                   else {hout=0;qianj=0;}     

         }

         if(p_time==255)

                   p_time=0;

}

void jieshou(void)

{

                   unsigned char js;

                   if(flag1==1)

                   {

                            flag1=0;

                            _nop_();

                            _nop_();

                            _nop_();

                            _nop_();

                            _nop_();                                       

                            js=P2&0xf0;

                            switch(js)

                            {

                                     case 0x00: break;

                                     case 0xf0: break;

                                     case 0xa0: jiasu();    break;

                                     case 0x50: jiansu();break;

                                     case 0x70: zuoz();    break;

                                     case 0xd0: youz();    break;

                                     case 0xe0: qh=0;      break;       //前后标志位为0,则表示前进

                                     case 0xb0: qh=1;      break;       //前后标志位为1,则表示后退

                                     case 0x60: start();   break;

                                     case 0x90: stop();    break;

                                     default:   break;

                            }

                   }

}                                                                                                                                                                                                                                                   

void init()

{

         TMOD=0x02;   //只产生pwm

         TH0=0x38;

         TL0=0x38;

         ET0=1;

         EA=1;

         EX0=1;

         IT0=1;               

}

void main()

{

         init();

         while(1)

         {       

         jieshou();

         }

                  

}

更多相关推荐:
单片机知识点总结(1)

单片机知识点总结第一章:微型计算机基础1、微型计算机数制及他们之间的相互转换2、微型计算机码制和编码第二章:MCS-51单片机结构和时序1、单片机的内部结构第三章:MCS-51单片机指令系统1、指令及其表示方法…

单片机知识点总结

单片机考点总结1.单片机由CPU、存储器及各种I/O接口三部分组成。2.单片机即单片微型计算机,又可称为微控制器和嵌入式控制器。3.MCS-51系列单片机为8位单片机,共40个引脚,MCS-51基本类型有803…

单片机个人知识点总结

波特率公式TH1256f波特率12322SMODMCS51系列单片机内部有哪些主要的逻辑部件答案一个8位的CPU一个布尔处理机一个片内振荡器128B的片内RAM21个特殊功能寄存器4个8位并行IO接口一个全双工...

单片机重点总结

第1章1、微型计算机通常由哪些部分组成?各有哪些功能?答:微型计算机通常由控制器、运算器、存储器、输入/输出接口电路、输入设备和输出设备组成。控制器的功能是负责从内部存储器中取出指令并对指令进行分析、判断、并根…

单片机知识点总结 考试大题

单片机考点总结及考试大题1234单片机由CPU存储器及各种IO接口三部分组成单片机即单片微型计算机又可称为微控制器和嵌入式控制器MCS51系列单片机为8位单片机共40个引脚MCS51基本类型有80318051和...

单片机知识点总结

第一部分硬件基础1单片机的组成2单片机的并行IO口在使用时有哪些注意的地方3单片机的存储器程序存储器和数据存储器的寻址范围地址总线和数据总线的位数数据存储器内存空间的分配特殊功能寄存器区4时钟及机器周期5单片机...

51单片机初学知识点总结

51单片机初学知识点总结经过这半个月的学习我对于单片机的定时器对IO口的随意操作输入检测中断定时器的中断单片机的外部中断串口通信等几大学习模块有了一定了解和掌握1软件我主要是在keiluvision3实现用C语...

单片机期末复习重点总结

1一单片机就是在一片半导体硅片上集成了中央处理单元存储器并行接口IO串行IO口定时器计数器终端系统系统时钟电路及系统总线的微型计算机二单片机的硬件结构8位微处理器数据存储器128B程序存储器4个8位可编程并行I...

单片机知识点

单片机就是一片半导体硅片上集成了中央处理单元CPU存储器RAMROM并行IO串行IO定时器计数器中断器系统时钟电路及系统总线的用于测控领域的微型计算机简称单片机何谓单片机单片机与一般微型计算机相比具有哪些特点答...

单片机相关知识点

三总线包括数据总线DC控制总线CB地址总线AB主机的组成部分CPU内存硬盘主板接口单片机的组成部分中央处理器RAMROM中断系统定时器计数器IO接口片机的特点1体积小重量轻价格便宜2两极分化3运行速度快4低电压...

单片机考试复习知识点

1什么是单片机51单片机内部程序数据存储器为多少80318051875189S51是什么有何不同答1单片机集成在一个芯片上的微型计算机内部程序4KB数据存储器128字节2单片机38031内部没有程序存储单元80...

单片机知识点

振荡周期时钟周期Tc晶振频率fosc或外加频率的倒数状态周期Ts2个时钟周期Tc很少用到此概念机器周期Tm6个状态周期Ts12个振荡周期Tc指令周期Ti执行一条指令所需的机器周期Tm数牢牢记住振荡周期晶振频率f...

单片机知识点总结(27篇)