单片机
2013-06-09 22:18:00 a379039233 阅读数 3909

      单片机就是一个小的计算机,不过他没有计算机那么好,方便的输入输出设备,计算机的输入设备就是鼠标,键盘等,方便的很,输出设备就是显示器,将输出非常清晰的显示在屏幕上。但是单片机的输入输出都是他的引脚,需要通过编程控制。

       单片机和PC机相同的地方就是都有CPU(我把单片机的微控制器核也叫CPU),内存(单片机的ROM,RAM,FLASH等),时钟系统,中断系统,定时器等等。

      一, 单片机最小系统就是单片机能够运行起来的必要条件:

   1.电源 2.晶振 3.复位电路  没有电源就没有能源,就不能工作;没有晶振,就没有时钟电路,就没有节拍,指令就不能按一定的步调运行;没有复位电路,单片机就很不可靠,会出现“死机”、“程序走飞(PC)”等现象。
   
   二,一些重要概念
    1. 我们对单片机编程不过就是设置单片机内部的寄存器和端口引脚以便输出高低电平控制其他(连接在单片机上)器件而已。
    2. 编程中最重要的是1:配置时钟,2:配置IO口,3:配置复位方式,看门狗设置等等
       次要的是:中断(外部,定时器,串口),串口,ADC,XRAM读写,内部FLASH等。   
    3. 1个机器周期 =12个时钟周期(晶振的振荡周期)   
    4. while(1);让单片机一直工作,等待中断!防止程序跑飞等。
    5. 51单片机共111条汇编指令,
7种寻址方式:
1.立即寻址 MOV A,#01H
2.直接寻址 MOV A,20H
3.寄存器寻址 MOV A,R3(A,B,Cy,DPTR)

4.寄存器间接寻址 MOVA,@R0  R1
5.变址寻址 MOVC  A, @A+DPTR
6.相对寻址 SJMP   rel; (PC)←(PC) + 2(指令长度) +  rel
7.位寻址 位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。
MOV 00h,C,MOV  20H.0, C  ,PSW.6
 
     6. XRAM(分内外)读写 
      1> XBYTE[address]=data   写数据
         data=XBYTE[address]   读数据;
   2>char xdata *mydat;
      ......
      mydat=(char xdata*)0x0030;
      *mydat=31;
   3>汇编方式
	mov dptr,#1000h
	mov a,#55h
	movx @dptr,a
      7.  读端口信号是必须先向端口写“1”,然后再读,这就是单片机口信号的准双向的含义。切记!
      8.  模拟输入或数字I/O,推挽(强)或漏极开路输出(IO,inout)
9. 一些寄存器默认设置即可,配置了可能会有警告。usb clock.clksel=1  10. Keil C 里面Lib库文件的生成与调用,可以自己做lib。
11. ram高128位只能间接寻址。idata,一些人可能没有用到idata,发现data不够用。
12 1s=1000ms=1000000us=1000000000ns.
13.
x M晶振定时 y ms: TH1 = (65536 - (x/12)*y*1000) / 256;     TL1 = (65536 - (x/12)*y*1000) % 256;16位的哦,亲!
假设C8051F020单片机的晶振是22114800Hz,测每秒计22114800个数 经过12分频后,每秒计22114800÷12=1842900个数,如果设置计数器初值是 0xfe90(即十进制65165),则需要计的数的个数为65535-65165=360,那么定时器的 时间为(360÷1842900)(S)≈0.195ms,即0.2ms。
#define uchar unsigned char #define uint  unsigned int #define ulong unsigned long #define bool  bit
 
#include<C8051F330.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //引脚定义 sbit In1= P0^3; sbit In2= P0^7; sbit In3= P1^3; sbit In4= P1^7; sbit Out1= P0^3; sbit Out2= P0^7; sbit Out3= P1^3; sbit Out4= P1^7; //----------------------------------------------------------------------------- //功能:延时 //入口参数:yc //出口参数:无 //----------------------------------------------------------------------------- void delay(uint time) {   while(--time); } //----------------------------------------------------------------------------- //功能:单片机C8051F330初始化 //入口参数:无 //出口参数:无 //----------------------------------------------------------------------------- void Mcu_Init(void)   PCA0MD&=~0x40;                 //禁止内部看门狗     OSCICN = 0x83;                 //内部振荡控制寄存器,使能H-F,八分频   OSCICL = 0x00;                 //期望输出频率也是24.5MHz   CLKSEL = 0x00;                  //系统时钟取自内部高频振荡器   RSTSRC = 0x04;                 //检测到时钟丢失时允许系统复位 } //----------------------------------------------------------------------------- //功能:MCU I/O口配置 //入口参数:无 //出口参数:无 //----------------------------------------------------------------------------- void PORT_Init (void)    P0MDOUT  = 0x88;                         //P0.3,P0.7推挽输出    P1MDOUT  = 0x88;                  //P1.3,P1.7推挽输出    XBR0     = 0x00;    XBR1     = 0x40;                  //使能交叉开关和弱上拉 } //----------------------------------------------------------------------------- // 功能:所有设备初始化 //----------------------------------------------------------------------------- // 入口参数:无 // 出口参数:无 //----------------------------------------------------------------------------- void Init_Device (void) {    Mcu_Init();    PORT_Init(); } void main() {
     Init_Device();      delay(10);                while(1){            } }
2017-10-24 22:59:33 randaodao 阅读数 11389

作为一个大三老狗,才开始单片机入门,晚是晚了点,但是由于知识体系比大一大二稍加完善,所以看问题也相对于更加全面,所以写下学习笔记作为分享,当然,知识水平有限,希望大神们能够给出修改意见。

学习参考书:51单片机C语言教程(郭天祥)
学习芯片:STC89C52

第一篇
单片机入门知识:
基础知识整合:

  1. 单片机概念:
    单片机就是指的一块集成芯片,上面集成了微处理器、存储器及各种输入/输出接口。

  2. 单片机的控制原理:
    通过控制单片机的40个引脚输出的高低电平进行控制,最后达到控制内外资源的运行的目的,因为其中为一些晶体管,可以通过控制晶体管的导通状态而组成不同的逻辑电路,达到不同功能。

  3. 单片机的标号及代表意义:

STC–前缀,表示芯片的生产公司
8–表示芯片为8051内核
9–(可不掌握)
C–该器件为CMOS器件
5–
2–芯片内部的存储空间,1=4KB 2=8KB……
40–芯片外部晶振最高可接入40MHz
C–商业级 (0~70℃)
PDIP–双列直插式
图中为经典的PDIP封装的引脚图

4.引脚分类:

I/O口:P0,P1,P2,P3均为8位I/O口

电源和时钟引脚:Vcc、GND、XTAL1、XTAL2
编程控制引脚:RST、PSEN、ALE/PROG、EA/Vpp
注意:四组I/O口的区别和常见用法
P3每一个引脚都有第二功能!
第二功能定义

5.电平特性
在我们想将编写的C程序放在单片机上执行需要几个步骤:
1):编写C程序
2):用keil生成.hex文件
3):烧录程序到单片机
在其中的第二步,需要安装keil软件
在其中的第三步,不仅需要STC-ISP烧录软件,还需要CH340/CH341转USB串口驱动,其中就牵涉到了RS-232C的电平转换。RS232C为负逻辑电平,高电平为-12V,低电平为+12V。电脑与单片机的通信必须要有这个转USB的驱动才能成功烧录程序完成计算机和单片机的通信。

2019-07-24 17:20:09 weixin_42976659 阅读数 815

其中一种,其它的都可以触类旁通,快速上手了。如果你这些条件都没有,那就跟着我学吧,我建议你学习51 单片机。

为什么要学习51单片机:
虽然现在单片机种类和型号非常多,每个型号都有一定的市场份额,但是哪个型号也没有早期 51单片机那般风光和火爆,虽然现在地位不是那么高了,但是因为 51 单片机积累的资料非常多,大家学起来就会拥有众多的参考资料,所以上手肯定比其他型号的要快一些。如果你学习稍微偏门的单片机,可能一个简单的软件问题就 要折腾你好长时间,不仅仅浪费了你的学习时间,更重要的是打击了学习单片机的信心。
那么是不是每种单片机我们都要学一遍呢?答案当然是否定的。大家跟着我来学习 51单片机,必须得跟着学会举一反三和融会贯通的能力。单片机型号那么多,挨个学下来估计头发白了也学不完,所以大家跟着我学 51 单片机,不能仅仅当做 51 来学习,更重要的是要当做“单片机”来学,要通过我们的这个教程,把所有的单片机的内部资源都搞清楚弄明白,每个内部模块的用法理解透彻,这样当你遇到一 个从没有用过的单片机,也就知道如何下手去使用它进行开发了。

如何学习单片机:
前边提到过,单片机是一门实用技术,我们学习它已经不是为了应付考试了,我给大家总结了单片机的学习方法是:一个要领,四个步骤。
学习单片机的要领就是:在实践中成长。
可为什么那么多人学单片机的时候,总是只抱着一本书看呢。第一, 我们小学中学甚至大学的学习模式都是如此,学什么东西主要都是靠看书,应付书面考试;第二,很多人想实践却不太清楚该怎么去实践。
遇到问题查下书比直接看书的效果要好过百倍。不是不让大家看书,而是看了一点以后,要马上去实践验证,然后再回头结合实践的结果,理解书上的内容。从这个 地方,大家要得出一个结论来,就是在学实际技术的过程中,和应付考试不同,书上的内容不需要你去硬性记忆,书是用来查的,不是用来背的。

下面是学习单片机的四个步骤。

1)鹦鹉学舌

大家刚开始接触单片机的时候,属于单片机行业的新生儿。单片机的样子,单片机外围的各种器件,单片机内部的各种结构,单片机使用C语言的编程方法,初学者可能都没有见过,脑子里全无概念。没关系,有些概念和方法你不理解也没有关系,甚至不需要你去理解,你只需要跟着我去鹦鹉学舌似的学习。对于程序,大家就可以完全跟着抄下来,甚至抄两三遍,过一段你会发现,好多东西你也认识了,好多概念你也慢慢的理解清 楚了,你也能大概看懂别人的小程序了,切忌觉得自己看会了,而简单复制粘贴。

2)照葫芦画瓢

很多同学学习的时候喜欢看别人做的视频,看别人的程序,都能看懂,觉得自己就会了,等到自己写程序的时候,不知道从哪里下手了,这是初学者很容易犯的“眼高手低”的毛病。

每一位同学,在学完了当前课的内容,然后关掉视频教程,关掉源代码,自己通过看电路图和查找非源代码的其他任何资料,把当节课原程序代码重新默写出来,边写边多少理解那么一点点,不是纯粹的背诵,应该说是背诵加理解的结合体。甚至学过几节课以后,可以回头把前边曾经 这样实现过的课程,再按照这种方法做一遍。千万不要认为这一步没必要,这一步是你能否真正学会单片机的一个关键,在学完本教程之前,每一课内容都要这样做,如果每一个程序你都能够完美的完成,那么可以说,这节课的内容,百分之七八十你已经掌握了。

3)他山之石,可以攻玉

单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力就必不可少了。每一节课的例程后边,最好自己布置几个作业,在完成这个作业的过程中,都可以参考原程序思路,在这个基础上通过动脑思考去构建你自己的程序框架,最终将程序完成。

在我们工程师实际产品研发的时候,很多种情况下也是如此。比如一个产品,我们如果从零起步的话,可能会走很多弯路,遭遇很多前人已曾遭遇过的挫折,所以我们通常的做法是寻找购买几款同类产品,然后先研究他们的各自优缺点,学习他们的长处,然后在同类产品基础上再来设计我们自己的产品,这就是“他山之石,可以攻玉”。

初学者在学习的时候,往往遇到的问题很多,你应该想到,你遇到的问题,可能前辈们早就遇到过了,所以遇到问题后,不要慌张,首先利用谷歌或者百度这些搜索引擎在网上搜一下。不管是编程还是硬件设计,多多参考别人的东西,只要把别人的东西分析明白了,自己用起来了,也就成为自己的知识了。

4)理论实践结合,温故知新

当大家把所有的课程都按照前边三步完成后,这个时候不妨再把书打开,再看看书,经过了自己的实战经历,对很多知识点会有一种恍然大悟的感觉。甚至视频教程、书籍都可以反复看几遍,可能有的知识点当时学习的时候不明白,过了一段时间,回过头来再学习的时候,一下就明白了。

http://www.makeru.com.cn/course/details/2233.html?s=69821

2019-03-19 11:29:09 qq_35131793 阅读数 451

在这里插入图片描述
王云的51单片机教程全套资料,大家可以随便下载了。链接:http://www.yunlongdz.cn/1/110.htm 想学好单片机其实并不困难,单片机是一门实践性非常强的的学科,学习时要理论与实践并重量,现在网上学习单片机的资料比较多,你可到有关单片机的论坛上找找,再次就是有准备必要的学习单片机的一些基本的装备,电脑你肯定有,哪就准备一些实践用的工具器件,如:单片机、相关的电子元件,有备件时购一台单片机学习板,这样的学习板附带的例程非常多,你可以边看例程边实践,这样的学习方法入门比较快,等有了一定的基础后,可以自己动手焊的些简单的板子,检验一下自己的学习效果。学习过程中要学习一定的专业知识,比如数电和模电。单片机语言就学语言C,也可用汇编,根据自己情况而定;不管您要学什么型号的单片机51也好,AVR也好,可以先找一个小的项目例子,比如流水灯一类的做,以提高兴趣。总之学习单片机要持之以恒,不断实践,新手学习时注意以下几点:

1、学习理论知识,书的话新手建议看看__王云51单片机教程,结合书带的视频一起看好理解;
2、最好有一个开发板,在开发板上从最简单的功能开始实现,比如做一个流水灯、蜂鸣器音乐盒等;
3、实现简单的功能后,开始尝试更复杂的程序,例如LCD显示、数字时钟、串口通信、中断控制等;
4、在上述功能均可以实现之后,可以组合实现,做一个多功能的单片机系统了;
5、如果对硬件熟悉,可以自己尝试做一个单片机开发板!

2018-12-17 22:09:11 qq_42747105 阅读数 1017

                                 蓝桥杯单片机之中断

1、中断含义及过程

中断是指CPU在处理A事情时,发现B请求CPU立刻去处理(中断发生),于是CPU去处理B(中断服务), 处理完B后又再次回到A被中断的地方,继续处理A(中断返回)

2、中断源

51单片机有五个中断源,分为外部 中断源(2个),定时器/计数器 中断源(2个)、串行通信 中断(1个)

每个中断源都有固定的入口地址和中断号,学习时要注意中断源与中断号的对应关系

3、中断的处理函数

(1)中断初始化函数

(2)中断服务 函数     三个特点:<1>没有返回值也不能带参数

                                                       <2>函数后面跟一个关键字:interrupt

                                                        <3>在关键字interrupt后面跟一个中断号

4、与中断 相关的寄存器

一、TCON    低4位给外部中断请求源使用,高4位给内部中断系统寄存器

外部请求源(第四位)

<1>  IT0  :IT0 = 0时, INT0为低电平触发方式, IT0 = 1, INT0为负 跳变触发方式。总之是INT0触发方式控制位,可由软件进行置位和复位。

<2>IE0 :    INT0中断请求标志位,当有外部中断请求时,该位就置1(硬件来完成),在CPU响应中断后,硬件将IE0又清0

<3> IT1:   类似  不过是定时器1的相关位

<4>IE1:   SAME

内部 请求源(高四位)

<1>TF0:定时/计数器T0溢出中断标记。当T0产生溢出时,TF0置位,当CPU响应中断后,硬件再把TF0复位

<2>TR0 :T0的开关控制位, TR0 = 1  定时器计数器打开, TR0= 0   定时器计数器关闭

注:TF1、TR1 与TF0 和TR0相似 。只是一个是定时器0的,一个是定时器1的

二、SCON :低二位与串口中断相关

TI:串行口发送中断

RI :串行口接收中断

三、IE    中断允许寄存器

EA : 中断总控制位    EA =1 ,CPU开放所有中断   EA = 0, CPU禁止所有中断

ES:     串行口中断控制位 ES =1, 允许串行口中断, ES= 0, 屏蔽串行口中断

ET1:   定时/计数器TI中断控制位。ET1=1,允许T1中断;ET1=0,禁止T1中断

EX1:外部中断1中断控制位。EX1=1,允许外部中断1中断;EX1=0禁止外部中断1中断

ETO:定时/计数器T0中断控制位。ETO=1,允许T0中断;ETO=0,禁止T0中断

EXO:外部中断0中断控制位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0断。

四、IP  中断优先级寄存器

执行时先将高级优先级执行后才会执行低的

PS  :串行口中断优先级控制位

PT1:定时器1优先级控制位
PX1:外部中断1优先级控制位
PTO:定时器0优先级控制位
PX0:外部中断0优先级控制位

5、对于每一个外设,我们都需要写一个初始化函数和中断服务函数。

下面分别展示外部中断   定时器\计数器中断    串行借口中断的部分代码

6

6、单片机补充:

《1》三大外设:外部中断、定时/计数器、串行通信

《2》sfr P0 = 0x80    和 P0 = 0x02的区别        前者用SFR来找了P0口的地址,为0X80, 后者是把0x02赋给P0口

《3》INT0  和INT1是中断控制器里面的,称为外部中断申请输入端

在INT0 或INT1 输入一个信号(低电平或者是下降沿),就可以使单片机临时停下正在执行的事情, 转去执行B事情

《4》KEIL使用建工程:project---new uvison project---source group----add existing files to group.写完之后记得点魔术棒,生成Greate HEX Files

在断电状态下单击下载,然后再上电  程序就自动下载到芯片了

单片机的简单介绍

阅读数 382

单片机:-CPU-

阅读数 1223

51单片机之中断

阅读数 665

没有更多推荐了,返回首页