单片机一些基础问题
于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,如果结果不为
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)