- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:PIC 16F684
好的,我有一个简单的 3 LED 二进制时钟,从 0 到 7 计数,并且希望在每个灯打开之间添加大约 1 秒的延迟。
我发现每个灯都需要处于某种循环中,并且我必须使用计数来测量滴答声和翻转等。
我认为时钟是4MHz,这是手册的屏幕截图:/image/3A3sJ.png
以下是我的代码的相关摘录:
COUNT1 EQU 20h ; Delay counter #1
COUNT2 EQU 21h ; Delay counter #2
...
LOOP0
MOVLW TRIS_D0_D1 ; Move value defined in Constants to TRISA, to switch on LED 0.
TRIS PORTA ;
CLRF PORTA ; Clear all outputs.
MOVLW D0 ; Set the accumulator to the value of D0.
MOVWF PORTA ; Move the accumulator to PORTA, to switch on LED 0.
; Using COUNTs to add a delay
decfsz COUNT1,1 ; Decrease COUNT1 by 1, and skip the next line if the result is 0.
goto LOOP0 ; If COUNT1 is 0, carry on. If not, go to LOOP0.
decfsz COUNT2,1 ; Decrease COUNT2 by 1, and skip the next line if the result is 0.
goto LOOP0 ; If COUNT1 is 0, carry on. If not, go to LOOP0.
但是,我相当确定我搞砸了时间,有人可以帮我吗?
最佳答案
假设:LOOP0
处的代码是您希望每次延迟执行一次的代码,而不是在延迟期间执行尽可能多次的代码。我还假设您将 COUNT1
和 COUNT2
设置为某项 - 您发布的代码声明了两个“变量”,但没有分配它们。
您现在的代码将重复执行 LOOP0
COUNT1
+ COUNT2
次代码。这是因为每个循环都是独立的。这为您提供了 510 个周期的最大延迟。正如其他评论者所说,PIC16 每个周期大约执行一条指令,因此您需要延迟 1,000,000 个周期才能在 4MHz 下等待一秒钟。
如果我们考虑要等待 196392
周期的情况,我们本质上需要实现一个 16 位计数器。我们通过在循环中递减一个计数器来实现这一点。每次循环退出时,我们都会减少另一个计数器。当两个计数器都为零时,循环返回。这是一个例子:
COUNT1 EQU 20h
COUNT2 EQU 21h
LOOP0
;do some stuff here
...
;delay loop starts here:
;assume COUNT1=0 and COUNT2=0
Delay_0
decfsz COUNT1
goto Delay_0
decfsz COUNT2 ;COUNT1 = 0 so 0xff cycles have passed
goto Delay_0
goto LOOP0 ;both COUNT1 and COUNT2 = 0 - 196392 cycles have now passed
分支指令如果不跳过则花费 1 个周期,如果跳过则花费 2 个周期。 goto
始终需要 2 个周期,这意味着完成一次完整计数所需的实际时间是 767 个周期 (255 * 3 + 2)。我们可以将两者所花费的时间计算为 ((255 * 3 + 2) + 3) * 255 + 2。
有一个很棒的 explanation of delay routines结束于 Dos4Ever。这将介绍延迟例程如何工作以及如何计算延迟例程的计数器值和成本。
最后,如果您只想剪切和粘贴延迟例程,Delay routine generator在 PIClist 上已经非常完美了。
关于assembly - 在 20 MHz(?) 时钟上添加 1 秒延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10375034/
是否可以通过Java编程方式知道CPU的最大速度(MHZ)? 在谷歌上进行了大量搜索后,我没有找到获取它的方法。 我找到了一种在 Android 中有效的方法,但我不是为 Android 开发这个方法
所以我刚刚注意到我的中文 Arduino Uno 有一个 12 MHz 的晶体而不是原来的 16Mhz。 我进行了计算,结果发现相差了四分之一毫秒。 我的问题: 这会影响伺服系统或音调 () 或任何其
我想创建一个应用程序,以 MHz 为单位监控并向用户显示系统处理器中每个内核的频率。我见过其他应用程序这样做,例如 Piriform's Speccy , 所以我知道这一定是可能的。 我曾尝试在 St
我正在为 FRDM-KL46Z 平台开发 IAR 编译器。我想使用内部时钟并将其设置为 48 MHz(或尽可能最大值)。到目前为止,我已经在提供的示例 sysinit.c 文件和函数 sysinit(
如何获得 Android 设备的处理器速度(以 MHz 为单位)?我能够根据 BogoMips 获得速度通过读取 \proc\cpuinfo 文件。如何将 BogoMips 转换为 MHz,或者是否有
我正在准备一个单位测验,有两种转换让我很难过。 类型一: XXX 计算机上一个周期的长度(以 ns 为单位)是多少? - 在这种情况下,XXX 可以是一些 MHz 或 Ghz,随机。我在转换 cyle
编辑:PIC 16F684 好的,我有一个简单的 3 LED 二进制时钟,从 0 到 7 计数,并且希望在每个灯打开之间添加大约 1 秒的延迟。 我发现每个灯都需要处于某种循环中,并且我必须使用计数来
我想制作一个 android 应用程序,它将接收从 RF 链路发射器(https://www.sparkfun.com/products/10535?)传输的基本数据。我想首先知道是否有可能以某种方式
我有这个脚本来获取 RPi 的当前 CPU 速度 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq | awk '{if($NF+0>
今天我得到了一些很酷的 radio 接收器和发射器,问题是当我输入我想发送的消息时,它会在另一个 arduino 上吐出乱码。 //transmitter #include void setup()
首先,我是 Arduino 的初学者。我有一个电路,包括:一个 Arduino Uno、一个 RFID RC522 读卡器和一个 RF 433 MHz 模块的发送器。 我正在尝试使用 RF 433MH
我在各种操作系统上运行一些计时代码。我注意到 QueryPerformanceCounter 的结果有以下模式 标准 Windows XP 使用处理器频率,这意味着它在后台使用 RDTSC。 Vist
开始之前:是的,我知道答案是 architecture dependent - 我只对大致数字感兴趣,就数量级而言。 linux内核对中断频率有上限吗? 背景:我想在 Linux 中连接相机模块。该模
我有一个评估套件,它具有 ARM Cortex-A8 内核的实现。处理器数据表指出它具有 ARM Cortex A8™ core, which operates at speeds as high a
最近新买了一个USB示波器,想测avr timer0的频率。有一个 12 MHz 晶体振荡器连接到 atmega,timer0 设置为没有预分频器的快速 PWM 模式。这是代码: #include
我正在使用 Jupyter Notebook 和 Tensorflow GPU 后端运行 Keras。我使用各种虚拟模型进行了一些测试,同时使用 MSI Afterburner、GPU-Z、nvidi
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
目前,我已经为我的一个嵌入式板(Galileo Gen 2)制作了一个嵌入式 GUI 应用程序。该应用程序可以执行 I²C、SPI、GPIO、ADC、UART 和 PWM 的测试事件,包括它们的 Pi
我正在使用 Arduino Mega 2560 进行一个项目,LCD Keypad Shield ,以及 RFID 13.56 MHz MF522 模块。 问题是 LCD 键盘屏蔽和 RFID MF5
我是一名优秀的程序员,十分优秀!