佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: pic

【练习】PIC 编程 - LED闪灯 (功力挑战)

  [复制链接]
发表于 13-6-2013 04:03 PM | 显示全部楼层
pic 发表于 13-6-2013 01:01 PM
哦。。如果要闲聊或分享心得可以去

【闲聊】心情故事,咖啡座~

这里可不可以问下pic18f4550的configuration bit?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 13-6-2013 06:31 PM | 显示全部楼层
weitao 发表于 13-6-2013 04:03 PM
这里可不可以问下pic18f4550的configuration bit?

两码事,别离题吧。。

你可以去下面问
[交流] 电子技术交流区
http://cforum.cari.com.my/forum. ... age%3D1&page=24

在问pic18f4550的configuration bit之前, 先去google , 先看下datasheet, 先做下功课, 真的不明白, 才问你不明白的。。谢谢
回复

使用道具 举报

发表于 13-6-2013 07:17 PM | 显示全部楼层
pic 发表于 13-6-2013 06:31 PM
两码事,别离题吧。。

你可以去下面问

好的!!!我问是因为那时,我做led flash 时,因为好奇FOSC,一直换。但是不明白的是不一样的FOSC (configuration bits),led flash 的时间不一样。那时我用的crystal是20Mhz。请问INTOSC_HS 和 HS 有什么分别?
回复

使用道具 举报

发表于 13-6-2013 08:40 PM | 显示全部楼层
weitao 发表于 13-6-2013 07:17 PM
好的!!!我问是因为那时,我做led flash 时,因为好奇FOSC,一直换。但是不明白的是不一样的FOSC (con ...

我没有真真使用pic,估计INTOSC_HS是内部振荡器(RC Oscillator) , HS则是外部时钟(使用Cystal)。如果有错误,请更正。

使用内部振荡器时,可以根据fuse bit设置时钟速度,比如4MHz, 8MHz,16MHz等等。
外部时钟的速度就是Crystal的速度了,当然你还可以烧写fuse bit前,启动Div(比如除以8)来减低速度。

使用不同的时钟,凡是关係定时(timing)的代码都会受影响。所以你的LED闪刷时间也就不同了。

这是我根据AVR的经验而写的,如果有错误,请再更正
回复

使用道具 举报

发表于 13-6-2013 09:55 PM | 显示全部楼层
西门庆33 发表于 13-6-2013 08:40 PM
我没有真真使用pic,估计INTOSC_HS是内部振荡器(RC Oscillator) , HS则是外部时钟(使用Cyst ...

其实我也不清楚!!!只知道HS是给external clock。internal clock 的话,要set bit 的!!!(我是第一次有pic18f,之前有16f)

回复

使用道具 举报

发表于 12-6-2014 10:42 PM | 显示全部楼层
//pic18f4550
#include <p18F4550.h>
#define _XTAL_FREQ 2000000
#pragma config FOSC = HS
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config MCLRE = ON
#pragma config PBADEN = OFF
#pragma config ICPRT = OFF
#pragma config LVP = OFF
#pragma config WDT = OFF,DEBUG=OFF

void delayms(unsigned int cx);
void program1();
void program2();

void delayms(unsigned int cx)// cx - no of times of 1ms
{
    for (int i = 1;i<=cx;i++)
    {
        TMR0 = 65497;
        TMR0ON=1; //timer 1 on
        while(!TMR0IF);//wait until flag set
        TMR0IF=0;//clear flag
    }
}

void program2()//第二题
{
    int a=0;int b=0;
    RB1=~RB1;
    while(a<=2)
   {
          RB0=~RB0;
          while(b<=10)
          {
                RB2=~RB2;
                delayms(50);
                b++;
          }
          a++;
   }
}

void program1()//第一题
{
    PORTB=0x03;
    delayms(500);
    PORTB=0;
    delayms(500);
}

void main()
{
    TRISB=0x00;
    T0CON = 0b00000110;
    while(1)
    {
          //program1();//uncomment it if wan to use that function , note that please uncoment ONE function ONLY!!
          //program2();
    }
}

本帖最后由 weitao 于 12-6-2014 10:59 PM 编辑

回复

使用道具 举报

Follow Us
发表于 12-12-2015 12:37 AM | 显示全部楼层
本帖最后由 wdx 于 21-12-2015 08:45 PM 编辑

...................................................

回复

使用道具 举报

发表于 26-1-2016 09:55 PM | 显示全部楼层
wdx 发表于 12-12-2015 12:37 AM
...................................................

。。。。。代表什么?

回复

使用道具 举报


ADVERTISEMENT

发表于 27-1-2016 02:19 PM | 显示全部楼层
fritlizt 发表于 26-1-2016 09:55 PM
。。。。。代表什么?

没人理我不是删掉啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 28-3-2024 08:53 PM , Processed in 0.053359 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表