微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机一些基础问题

单片机一些基础问题

时间:05-16 来源:互联网 点击:

于JBC bitvar测试该位变量并跳转同时清除。

_chkfloat_: 测试并返回源点数状态。

使用时,必须包含#inclucle 一行。

如不说明,下面谈到的库函数均指非本征库函数。

TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)

定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。

其格式为:

工作原理

其中低四位(即D0 ~ D3)定义定时器/计数器T0,高四位(即D4 ~ D7)定义定时器/计数器T1。各位的说明:

Ⅰ,GATE——门控制。

●GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1。

当INT0引脚为高电平时TR0置位,启动定时器T0;

当INT1引脚为高电平时TR1置位,启动定时器T1。

●GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。

Ⅱ,C/T——功能选择位

C/T=0时为定时功能,C/T=1时为计数功能。

置位时选择计数功能,清零时选择定时功能。

Ⅲ,M0、M1——方式选择功能

由于有2位,因此有4种工作方式:

M1M0工作方式功能说明

00方式013位定时器/计数器

01方式116位定时器/计数器

10方式2自动重装8位定时器/计数器

11方式3T0分为2个8位独立计数器,T1停止计数

TR0,TR1:分别为T0,T1的运行控制位。1启动,0停止。

GATE:门控制位。GATE=0,由TR0或TR1启动定时器;GATE=1,只有TR0或TR1为1且INT0 或INT1 为高电平时才能启动定时器。

单片机中的TH0 TL0

TH0和TL0是控制定时/计数器T0的,TH1和TL1是针对T1的。也就是用TH0和TL0中的数来控制T0到底定时多久或计数多少再进入中断,TH1和TL1也一样。

16位定时器/计数器的高低位,TL0是低八位,TH0=是高八位,当低八位计数记满了之后,向高八位进一位,计数器,由于51单片机是8位机,所以要分成两个八位的寄存器来存储16位的计数器!

单片机 TH0=0xd8;TL0=0xf0是什么意思

这是为 T0 计数器赋初值,(高位)TH0=0xd8(0xffd8,初始地址为0xffff),(低位)TL0=0xf0(0xfff0)

换成 10 进制是:55536

那么 65536-55536=10000

表明 T0 计数器 计数 10000 个机器周期后溢出。

如果使用 12M 晶振,那么计数 10000 个机器周期使用 10ms,可以作为定时用。

由于TH0和TL0已知,那么可得T0寄存器中为:0xFF00(16)=65280(10)

X=65536-T0=65536-65280=256,,X即为定时机器周期数

如果是12MHz的话,机器周期=1us,那么定时为256us

如果是6MHz的话,机器周期=2us,那么定时时间为512us

机器周期=12*晶振周期,晶振周期=1/晶振频率

指令周期是看一条指令包含有多少个机器周期,如_nop_就一个机器周期

延时函数delay()

c语言里不是那么算的,编译的时候转汇编了用汇编才算的出,不用纠结这个的精确延时的话也都用定时器,大致的延时的话用软件去算就行了

void delay_ms(unsigned int x)

{

unsigned int i,j;

for(i=0;i

for(j=0;j125;j++);

}

AJMP

是无条件跳转指令之一,叫做绝对跳转。 主要是用来改变程序执行的路线,到需要的指令或程序去执行。 AJMP的范围为正负2K单元。使用时注意跳的目的地和当前地址的距离范围不能超过上述值,否则,就会跳过不去。

$

$代表它自己所在位置的地址

中断允许寄存器IE

中断允许控制寄存器寄存器地址A8H,位寻址AFH~A8H。

中断的允许或禁止是由片内可进行位(什么是位,大家可别到现在还说不知道哦)寻址的 8位中断允许寄存器 IE 来控制的,单片机中断系统中有两种不同类型的中断:一种称为非屏蔽中断;另一种称为屏蔽中断。对于非屏蔽中断,用户不能用软件方法加以禁止,一旦有中断申请,CPU 将根据自然优先级予以响应。这里主要讲屏蔽中断,对于屏蔽中断,我们可以通过软件的方法来予以控制(允许中断我们把它称为中断开放,不允许中断我们把它称之为中断屏蔽),如何操作,说穿了其实很简单,就是通过对 IE 的相应位的置“1”或请“0”来允许或禁止某个中断,请看下面的表格:

EA × × ES ET1 EX1 ET0 EX0

(1)EA:总中断允许开关。它是个总开关,凡是要设置中端都得先通过它。EA=1,开放所有的中断;EA=0,则所有中断都被禁止。

(2)ES:串行口中断控制位。ES=1,允许中断;ES=0,禁止中断。

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

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

(5)ET0:定时器 0 中断控制位。ET0=1,允许中断;ET0=0,禁止中断。

(6)EX0:外中断 0 中断控制位。EX0=1,允许中断;EX0=0,禁止中断。

SETB

SETB是汇编指令,意思是把其后面的那个寄存器的位置1。

DJNZ ,

功能:减1,若非0则跳转

说明:DJNE指令首先将第1个操作数所代表的变量减1,如果结果不为

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top