单片机中常用函数

  • 格式:docx
  • 大小:734.64 KB
  • 文档页数:9

注释方法
延时函数
使用前在主函数外面进行声明
声明方法void delay(uint z)
Void Delay(uint z)
{
Uint a,b;
For (a=z;a>0;a--)
For(b=110;b>0;b--);
}一般z=1000可以延时500ms;
如何正确使用表格
例子:让数码管依次显示0 1 2 3 。

先定义一个uchar code tab[这里面可以不写表格中有多少数据默认和等号后面的数据多少一致]={数据1,数据2,数据3,………}
调用表格中的数据
共阴极数码管编码
unsigned char code table[]={//共阴极0~f数码管编码
0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x77,0x7c, //8~b
0x39,0x5e,0x79,0x71 //c~f
共阳极数码管编码
由0到f的编码为:
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
中断(很有用的一个应用)
51单片机有5个中断源可以中断嵌套
EA=1 是将内部中断允许EX=1是外部中断允许
中断函数的格式
括号内的函数即为中断程序,和一般程序写法一样。

中断函数在调用时不用声明。

开启跳变沿
IT0=1;(总线操作)就相当于TCON=0x01;(对位进行操作)
定时器
TMOD定时器工作模式寄存器
Ⅰ,GATE——门控制。

●GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。

当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;
当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

●GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。

当TR0=1,启动定时器T0。

当TR1=1,启动定时器T1。

Ⅱ,C/T——功能选择位
C/T=0时为定时功能: 加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;
C/T=1时为计数功能: 加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;
Ⅲ,M0、M1——方式选择功能
MCS-51的定时器T0有4种工作方式:方式0,方式1,方式2,方式3。

MCS-51的定时器T1有3种工作方式:方式0,方式1,方式2。

M1 M0 工作方式功能说明
0 0 方式0 13位定时器/计数器
0 1 方式1 16位定时器/计数器
1 0 方式
2 自动重载8位定时器/计数器
1 1 方式3 T0分为2个8位独立计数器,T1停止计数
怎么样定时50ms
定时器每个机器周期计数一次每个机器周期1μs,那么计数50000次刚好为50ms;那么就要将50000分到定时器(16位)的高八位TH0和低八位TL0中去计数8位需要时间2^8=256次,因此按下面分法:计数时定时器必须要从一个数的基础上往上加要赋初值即从15535(65535-50000)往上加加到65535刚好50000次就是50ms
TH0=(65535-50000)/256(15535中有多少个完整的256)
TL0=(65535-50000)%256(15535除以256的余数并付给定时器的低八位)
【解释:因为低八位的最大值为256,因此将余数(不足256的)放在低八位。

高八位都是大于256的数,将模存放在高八位。

这样刚好

15535存
放在TH0和TL0中了】
定时计时器初始化
定时器0函数
或者
平移函数
移动函数需要调用intrin.h 库函数 _crol_(变量名,移动位数);
计数500000次用时50μs
EA=1;总中断打开;ET0=1;定时器0中断; TR0=1定时器置位1;启动定时器。

二极管流水灯程序
#include<reg51.h> #include<intrin.h>
#define uint unsigned int; #define uchar unsigned char; Uchar temp;
P1=0xef;
Void delay (uint z) { uint x,y; For(x=z;x>0;x--)
For(y=110;y>0;y--); }
Void main() {
Temp=0xef ; P1=temp ;
While (1) {
Delay (1000);
P1=temp; }; }。