打印
[PIC®/AVR®/dsPIC®产品]

用纯寄存器写一个LED闪烁程序

[复制链接]
956|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2020-9-22 13:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gaoyang9992006 于 2020-9-22 13:19 编辑

用惯了库函数,或者图形化配置,你还经常看手册吗,还能记得多少个常用的寄存器?
接下来用这个例子怀旧一下。
在本教程中,我们将看到带PIC单片机的 LED闪烁的示例,LED闪烁是初学者的第一步。您将学习如何使用PIC微控制器的GPIO端口以及如何使用数据表访问GPIO寄存器。
所需材料
用于LED闪烁的PIC寄存器
  • OSCCON内部振荡器控制寄存器
  • TRICx寄存器
  • 使用PORTx寄存器和LATx寄存器
使用PIC单片机进行LED闪烁的编程步骤使用LATx寄存器
  • 将内部振荡器设置为8Mhz频率。
  • 使用TRISx寄存器将PORTC的方向设置为输出。
  • 在while循环中,使用LATx寄存器打开和关闭LED。

使用PORTx寄存器
  • 将内部振荡器设置为8Mhz频率。
  • 使用TRISx寄存器将PORTC的方向设置为输出。
  • 在while循环中,使用PORTx Reigister打开和关闭LED。
Using LATx Register
/*
Led blinking using PIC18F4550
*/

#include “Configurations_Header_File.h”                     //Header file for Configuration Bits
#include <pic18f4550.h>                                             //Header file PIC18f4550 definitions

void MS_delay(unsigned int);

void main()
{
OSCCON=0x72;                                                           //SET internal oscillator of 8MHz Frequency
TRISC=0x00;                                                                //Set direction of PORTC as OUTPUT to which LED is connected using TRISC register
while(1)
{
LATC = 0xFF;                                                               //Turn ON LED for 200 ms
MS_delay (200);                                                          // 200 milisecond Delay
LATC = 0x00;                                                              //Turn OFF LED for 200 ms
MS_delay (200);                                                          // 200 milisecond Delay
}
}
void MS_delay(unsigned int val)
{
unsigned int i,j;
for(i=0;i<val;i++)
for(j=0;j<165;j++);                                                      //This loop Provide delay of 1 ms
}



Using PORTx Register
/*
Led blinking using PIC18F4550
*/

#include “Configurations_Header_File.h”                     //Header file for Configuration Bits
#include <pic18f4550.h>                                             //Header file PIC18f4550 definitions

void MS_delay(unsigned int);

void main()
{
OSCCON=0x72;                                                           //SET internal oscillator of 8MHz Frequency
TRISCbits.TRISC0=0;                                                    //Set direction of PORTC as OUTPUT to which LED is connected
while(1)
{
PORTCbits.RC0=1;                                                      //Turn ON LED for 200 ms
MS_delay (200);                                                          // 200 milisecond Delay
LATC = 0x00;                                                              //Turn OFF LED for 200 ms
MS_delay (200);                                                          // 200 milisecond Delay
}
}
void MS_delay(unsigned int val)
{
unsigned int i,j;
for(i=0;i<val;i++)
for(j=0;j<165;j++);                                                      //This loop Provide Delay of 1 ms
}
使用了不同的寄存器,实现了同样的IO控制,你还知道他们的关系吗?

使用特权

评论回复
沙发
wahahaheihei| | 2020-9-22 13:27 | 只看该作者
好几年不这么做了。

使用特权

评论回复
板凳
lcczg| | 2020-9-22 16:18 | 只看该作者
数据手册要对照着看来用

使用特权

评论回复
地板
CoolSilicon| | 2020-9-23 11:28 | 只看该作者
不错..
不过 void MS_delay(unsigned int val) 这个函数看起来是delay ms单位的, 这个怎么保证精度??
建议直接用库函数__delay_ms类来用..

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2020-9-23 11:39 | 只看该作者
CoolSilicon 发表于 2020-9-23 11:28
不错..
不过 void MS_delay(unsigned int val) 这个函数看起来是delay ms单位的, 这个怎么保证精度??
建议 ...

这个精度还真保证不了,库函数那个用的定时器,这个跑空指令。

使用特权

评论回复
6
奔波儿熊| | 2020-9-23 17:22 | 只看该作者
很熟悉就自己写,不熟悉还是MCC节约时间. 而且MCC是经过测试的,自己写的还需要测试.

使用特权

评论回复
7
gaoyang9992006|  楼主 | 2020-9-23 17:34 | 只看该作者
奔波儿熊 发表于 2020-9-23 17:22
很熟悉就自己写,不熟悉还是MCC节约时间. 而且MCC是经过测试的,自己写的还需要测试. ...

言之有理,我就是随手水一贴。。确实,这个时代要学的东西太多,不能把精力放在这种低效率行为上。

使用特权

评论回复
8
renzheshengui| | 2020-10-12 10:32 | 只看该作者
长知识了谢谢

使用特权

评论回复
9
wakayi| | 2020-10-12 10:33 | 只看该作者
感谢楼主的分享

使用特权

评论回复
10
wowu| | 2020-10-12 10:34 | 只看该作者
开拓眼界了 谢谢

使用特权

评论回复
11
xiaoqizi| | 2020-10-12 10:35 | 只看该作者
非常不错的资料

使用特权

评论回复
12
木木guainv| | 2020-10-12 10:35 | 只看该作者
路过 学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

1974

主题

15994

帖子

210

粉丝