标签:
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>
标签:
原文地址:http://www.cnblogs.com/jaymyfriend/p/5005739.html