先前关于PIC16F84A的文章解释了如何控制IC的GPIO(通用I/O)引脚。先前铺设的电路仅解释了如何打开或关闭LED。您只需将所需引脚设置为输出,然后发送高/低信号以打开/关闭LED。现在,在这篇文章中,让我们实现LED闪烁——“嵌入式电子的hello world程序”。那么,如何使LED闪烁?只需在无限循环中打开和关闭即可是的,这是对的,但在我们的情况下,这是行不通的。由于PIC以非常高的速度运行,尽管LED闪烁,但您将无法看到LED闪烁,并且它将显示为持续亮起。
延迟程序:
那么,我们如何解决这个问题呢?这很简单,添加一个延迟程序,让pic忙碌一段时间,这样你就可以看到LED闪烁。那么,如何添加延迟循环呢?
- 在通用寄存器中存储一个数字,比如255
- 将数字减1,直到它达到0。
我知道这听起来很愚蠢,这是浪费时间,耽误了PIC的运行。但是在适当的时候你会知道延迟惯例是非常重要的。那么,如何在程序中实现上述步骤呢?现在,是时候玩延时程序了。
MOVLW 255
MOVWF 0 ch
延迟DECFZ 0C,1
转到延迟
这里有代码吗…。
现在,上面的程序可以很好地让PIC忙着处理大约255条指令。对上述程序进行解码时,我们首先将值255(不允许大于255的值,因为16F84A的寄存器大小为8位)移动到指定通用寄存器的地址位置0CH。下一行引入一条新指令DECFZ,它执行两个任务。此指令DECFZ将寄存器递减指定的量。这里,它将寄存器递减1,并检查寄存器0CH(在我们的例子中)的内容是否变为零。如果寄存器的内容变为零,则跳过下一行,然后程序继续。因此,在连续循环中,寄存器递减至零。还有另一条指令:eq–它执行赋值操作。例如,REG EQU 0CH意味着oCH被分配给变量REG,在0CH的位置,您可以使用REG。这是一个方便的指令,使程序更具可读性。
上述延迟程序对于我们的PIC!是不够的!。它在以惊人的速度执行指令方面非常聪明。因此,您需要引入另一个延迟例程–延迟中的延迟。
延迟DECFZ 0C,1
转到延迟
DECFZ 0D,1
转到延迟
嗯……耽搁了不少时间。这里,控制器减少255到0 255次。这足以让我们的眼睛眨眼。
闪烁的LED:
这里是一个完整的程序,使LED连接到引脚13 (PORTB,0)闪烁。(注意此处使用的EQU指令)
0 ch NUM1装备
NUM2当量0DH
巴斯夫的地位,05年h
MOVLW B ' 00000000 '
MOVWF-TRISB
供应量的地位,05年h
净水器PORTB, 0开始
延迟decfz num1,1;延迟程序1
转到延迟
DECFZ NUM2 1
转到延迟
BCF端口B,0
DELAY DECFZ NUM1,1
转到延迟
DECFZ DECFZ NUM2,1
转到延迟
开始
注:除标签外的其他指令(如START和DELAY)应以空格开头,因为oshon编译器将任何没有空格的指令解释为标签。
上述代码的电路图:
如果LED灯闪烁,说明您完成了出色的工作!。尝试使用不同的延迟例程,如一个例程、两个例程等。。在不同的晶体频率(4,10,16,20 MHz)下,观察结果。
2.评论
感谢您发布PIC16F84A简介和编程。
我想尝试编程PIC16F84A教程。现在我的问题是,我要为我的Windows XP下载什么汇编程序,我需要什么程序员。你能给我提供这个编程器的电路图和给控制器写“汇编程序”的实用软件吗。
问候,
罗杰西
嗨,罗杰,
您可以使用micro JDM程序员对PIC进行编程。Google micro JDM程序员和软件,oshon PIC模拟器将有助于编写和组装程序,并使用ponyprog或ICPROG烧录PIC