80C52、AT89C52的定时/计数器2

 
80C52、AT89C52的定时/计数器2
作者:佚名  发布时间:2009-10-30  阅读次数:1325  字体大小: 【 】 【 】【
    80C52、 AT89C52、80C51FA/FB等单片机增加了一个16位 定时/计数器 T2,可用于定时或外部事件计数。它有三种工作方式:16位自动重装初值的 定时/计数器、捕捉事件、串行口波特率发生器。与 T2有关的外部引脚是:P1。0-外部计数脉冲输入端 T2,P1。1-外部控制端 T2EX。
    8052、 AT89C52、80C51FA/FB等单片机增加了一个16位定时/ 计数器 T2,可用于定时或外部事件计数。它有三种工作方式:16位自动重装初值的定时/ 计数器、捕捉事件、串行口波特率发生器。与 T2有关的外部引脚是:P1。0-外部计数脉冲输入端 T2,P1。1-外部控制端 T2EX。

1、 T2的特殊功能寄存器

1) 控制寄存器 T2CON(C8H)

位:TF2 EXF2 RCLK TCLK EXEN2 TR2 C// T2 CP//RL2

TF2: T2溢出 中断标志,在捕捉方式和自动重装初值方式中计数溢出时置1,对应 中断入口002BH,但中断响应后,必须由软件清0。在串行口波特率发生器方式中TF2不会置1。

EXF2: T2外部中断标志。当EXEN2=1( T2外部中断允许)时,引脚 T2EX(P1。1)的负跳变使EXF2=1,CPU响应中断,入口地址002BH;EXF2也必须由软件清0。

EXEN2: T2外部中断允许标志。使EXEN2=1,当 T2工作在捕捉方式时,引脚 T2EX上出现的负跳变使EXF2=1,申请中断,同时TH2、TL2的当前值自动送入RCAP2H、RCAP2L寄存器;如果 T2工作在重载初值方式,那么 T2EX的负跳变将RCAP2H和RCAP2L的内容自动装入TH2、TL2,同时EXF2=1,申请中断。EXEN2=0时, T2EX引脚上的变化对 T2工作无影响。

RCLK、TCLK:选择串行口波特率发生器方式。RCLK=1和TCLK=1时, T2的溢出率是串行口发送和接收的时钟;当只有RCLK=1时, T2只是串口的接收时钟;只有 TCLK=1时, T2只是串口的发送时钟。此时忽略CP//RL2位。
CP//RL2:自动重装方式和捕捉方式选择(此时RCLK和TCLK应为0)。为0-自动重装方式,为1-捕捉方式。
2) TH2、TL2、RCAP2H、RCAP2L。

2、T2的工作方式

1) 初值自动重装入方式

寄存器TH2、TL2是16位加1的计数器,RCAP2H、RCAP2L是存放初值的寄存器。

此方式中,CP//RL2=0,打开了RCAP2H、RCAP2L 通向TH2、TL2的三态门,而关闭反方向的门。

当C// T2=0,TR2=1时, T2以定时器方式工作,12/fosc为计数最小单元。16位定时精度要比T0、T1高。

当C// T2=1,TR2=1时, T2以计数器方式工作,引脚P1。0上输入的脉冲为计数信号(负跳变)。

T2计数溢出时,使TF2=1,同时把RCAP2H、RCAP2L的内容自动装入TH2、TL2并开始重新计数。

在此方式中,若置EXEN2=1时,除上述功能外,引脚P1。1上的负跳变将RCAP2H、RCAP2L的内容自动装入TH2、TL2使之提前开始重新计数,同时置EXF2=1,申请中断。 

2) 捕捉方式

此方式中,CP//RL2=0,关闭了RCAP2H、RCAP2L 通向TH2、TL2的三态门,而打开反方向的门。因此不管是工作在定时器还是计数器方式,当 T2溢出时,仅使EXF2=1,但计数初值不会自动重装,而须用软件装入。此方式的主要用途是,当EXEN2=1时,引脚 T2EX(P1。1)上的电平负跳变会将TH2、TL2的当前数值锁存到RCAP2H、RCAP2L,并置EXF2=1,申请中断。这是‘捕捉方式’的含义,它可用于测试外部事件的发生时间。 

在RCLK或TCLK为1时, T2就成为波特率发生器。它可以对内部或外部时钟脉冲计数(由C// T2决定)。

寄存器TH2、TL2是16位加1的计数器,RCAP2H、RCAP2L是存放初值的寄存器。

当C// T2=0时, T2是对频率为fosc/2的时钟脉冲计数,而不是fosc/12。计数溢出时,RCAP2H、RCAP2L的内容自动装入TH2、TL2并开始重新计数,但不会使EXF2=1,即不会产生中断。它的溢出脉冲经16分频成为串行口的发送或接收脉冲(由RCLK、TCLK决定)。

既然此方式不会引起中断,而且当EXEN2=1时, T2EX(P1。1)引脚上的负跳变对 T2工作无任何影响,但又能使EXF2=1,申请中断。因此, T2EX可作为一个外部中断源使用。

在此方式工作进程中,CPU不要对TH2、TL2、RCAP2H、RCAP2L进行写的操作,否则使波特率不稳定。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络在自动驾驶中扮演着重要角色,它可以帮助车辆感知环境、做决策和控制行为。以下是一个简单的自动驾驶神经网络算法代码详解: ```python import numpy as np # 定义神经网络类 class NeuralNetwork: def __init__(self, input_size, hidden_size, output_size): # 初始化权重和偏置 self.W1 = np.random.randn(input_size, hidden_size) self.b1 = np.zeros((1, hidden_size)) self.W2 = np.random.randn(hidden_size, output_size) self.b2 = np.zeros((1, output_size)) def forward(self, X): # 前向传播计算输出 self.z1 = np.dot(X, self.W1) + self.b1 self.a1 = np.tanh(self.z1) self.z2 = np.dot(self.a1, self.W2) + self.b2 self.a2 = self.sigmoid(self.z2) return self.a2 def backward(self, X, y, learning_rate): # 反向传播更新权重和偏置 m = X.shape[0] delta2 = self.a2 - y dW2 = (1/m) * np.dot(self.a1.T, delta2) db2 = (1/m) * np.sum(delta2, axis=0) delta1 = np.dot(delta2, self.W2.T) * (1 - np.power(self.a1, 2)) dW1 = (1/m) * np.dot(X.T, delta1) db1 = (1/m) * np.sum(delta1, axis=0) self.W2 -= learning_rate * dW2 self.b2 -= learning_rate * db2 self.W1 -= learning_rate * dW1 self.b1 -= learning_rate * db1 def sigmoid(self, x): # sigmoid激活函数 return 1 / (1 + np.exp(-x)) # 样本输入和输出 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y = np.array([[0], [1], [1], [0]]) # 创建神经网络对象 nn = NeuralNetwork(2, 3, 1) # 训练神经网络 for i in range(10000): output = nn.forward(X) nn.backward(X, y, learning_rate=0.1) # 测试神经网络 test_input = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) predictions = nn.forward(test_input) print(predictions) ``` 这段代码实现了一个简单的多层感知器神经网络,用于解决XOR逻辑门问题。其中`NeuralNetwork`类定义了神经网络的结构和操作,`forward`方法用于前向传播计算输出,`backward`方法用于反向传播更新权重和偏置。最后通过训练和测试数据来验证神经网络的准确性。该代码可以作为自动驾驶神经网络算法的基础,根据具体问题进行进一步扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值