码迷,mamicode.com
首页 > 其他好文 > 详细

51单片机的一些知识点

时间:2015-11-29 22:45:16      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

1、单片机芯片型号:STC 89C51RC 40C—PDIP 0707

STC——STC公司,其他前缀还有AT、Winbond等

8——基于8051内核芯片

9——表示内部含有Flash E2PROM存储器

C——表示该器件为CMOS产品

5——固定不变

1——代表芯片内部存储空间,1为4KB,2为8KB,3为12KB

RC——STC单片机内部RAM(随机读写存储器)为512B,还有RD+表示内部RAM为1280B

40——表示外部晶振最高可接入40MHz,对于AT单片机数值一般在24MHz

C——产品等级,商业级(I:工业级、A:汽车用产品、M:军用级)

PDIP——封装型号,PDIP是双列直插式

0707——07年第7周

 

2、51单片机的P口

有四类,分别是P0、P1、P2、P3口。

P0口:双向8位三态I/O口,由于P0口内部没有上拉电阻,为高阻状态,所以不能正常的输出高低电平,所以该组I/O在使用时要外接上拉电阻,一般接入10KΩ的上拉电阻;

P1口、P2口、P3口:准双向I/O,内带上拉电阻,这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。该口在作为输入使用前,要先向该口进行写1操作,然后单片机内部才可以正确读出外部信号,也就是要使其先有个“准备”的过程。

 

3、TTL、CMOS电平标准

TTL电平临界值:

(1)VOHmin = 2.4V,VOLmax = 0.4V

(2)VIHmin = 2.0V,VILmax = 0.8V

CMOS电平临界值:

(1)VOHmin = 4.99V,VOLmax = 0.01V

(2)VIHmin = 3.5V,VILmax = 1.5V

CMOS电路中不使用的输入端不能悬空,否则会造成逻辑混乱。另外,CMOS集成电路的电源电压可以在较大范围内变化,因而对电源的要求不像TTL集成电路那样严格。

CMOS电平能驱动TTL电平,但TTL电平不能驱动CMOS电平,需要加上拉电阻。

 

4、sfr、sfr16、sbit说明

sfr——-声明一个8位寄存器,如:sfr SCON = 0x98;SCON是单片机的串口控制寄存器,这个寄存器在单片机内存中的地址是0x98。这样声明后,以后直接对SCON操作相当于对0x98地址处的寄存器进行操作。

sfr16——16位特殊功能寄存器声明,如:sfr16 T2 = 0xCC;声明了T2寄存器,它的起始地址是0xCC。(T2是个定时器寄存器)

sbit——定义内部寄存器的某一位(也要该寄存器可以进行位操作),如:sbit TI = SCON^1; SCON是一个8位寄存器,SCON^1是这个8位寄存器的次低位。

 

5、C51中常用的头文件

reg51.h、reg52.h、math.h、ctype.h、stdio.h、stdlib.h、absacc.h、intrins.h

一般写成:#include<reg52.h>

 

6、单片机的几个周期介绍

(1)时钟周期:顾名思义,就是晶振频率的倒数;

(2)状态周期:时钟周期的两倍;

(3)机器周期:12个时钟周期;

(4)指令周期:CPU执行一条指令需要的时间,一般是1~4个机器周期。

 

7、关于中断

52单片机的中断源有6个,以下1~6也按照中断的优先级进行了排列,(1)最高(6)最低

(1)INT0——外部中断0,由P3.2口引入

(2)INT1——外部中断1,由P3.3口引入

(3)T0——定时器/计数器0中断

(4)T1——定时器/计数器1中断

(5)TI/RI——串行口中断

(6)T2——定时器/计数器2中断

 

中断控制的相关寄存器

(1)中断允许寄存器IE

(2)中断优先级寄存器IP

(3)定时器/计数器工作方式寄存器TMOD

(4)定时器/计数器控制寄存器TCON

以上4个寄存器的相应bit位可以设置中断的方式及功能等,实际用起来没这么麻烦,举例如下:

// 中断举例
void main()
{
    TMOD  = 0x01;       // 设置定时器0的工作方式1(M1M0为01)
    TH0 = (65536-45872)/256;    //装入初值,定时50ms,晶振11.0592MHz
    TL0 = (65536-45872)%256;
    EA = 1;    // 开总开关
    ET0 = 1;  // 开定时器0中断
    TR0 = 1;  // 启动定时器0 
    while(1); // 程序停在这里等待中断发生    
}

void T0_time() interrupt 1
{
    TH0 = (65536-45872)/256;    //重装初值
    TL0 = (65536-45872)%256;
    num++;                // num自加
    if(num==20)        // 如果到了20次,说明1s到了 
    {
        num = 0;         // num清零 
        led1 = ~led1;
    }  
}

中断初值的计算

假设单片机的时钟频率是12MHz,而机器周期是12个时钟周期,此时一个机器周期的时间就是1us。计满TH0和TL0需要216-1 = 65535,当计数到65535时,计数器在下一个脉冲将会溢出,随即向CPU申请中断。因此溢出一次共需要65536us。假设我们现在要计数50ms的话,则需要先填入一个初值,在这个初值的基础上再计数50000次计数器刚好溢出产生中断请求。这就是初值的来由。

具体放入初值的方式如下:

THx = (65536-N)/256     TLx = (65536-N)%256

 

8、取出相应位的C语言写法

/*

两位数取出十位、个位        

三位数取出百位、十位、个位

四位数取出百位、十位、个位

*/

// num是相应数

//两位数

shi = num/10;

ge = num % 10;

 

// 三位数

bai = num/100;

shi = num%100/10;

ge = num%10;

 

// 四位数

qian = num/1000;

bai = num/100%10;

shi = num/10%10;

ge = num%10;

 

9、_nop_();

它相当于一个机器周期,要用这个功能,要带上头文件#include<intrins.h>

 

 

51单片机的一些知识点

标签:

原文地址:http://www.cnblogs.com/jaymyfriend/p/5005739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!