| 
|  | 
【练习】PIC 编程 - LED闪灯 (功力挑战)
 [复制链接] |  
 |  | 
 
 发表于 13-6-2013 04:03 PM
|
显示全部楼层 
| pic 发表于 13-6-2013 01:01 PM  哦。。如果要闲聊或分享心得可以去
 
 【闲聊】心情故事,咖啡座~
这里可不可以问下pic18f4550的configuration bit?
 
 | 
 |  |  |  |
 
|  |  |  
|  |  | 
 |  | 
 
 
 楼主|
发表于 13-6-2013 06:31 PM
|
显示全部楼层 |  |  |  |
 
|  |  |  
|  |  | 
 |  | 
 
 发表于 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 编辑
 
 
 | 
 |  |  |  |
 
|  |  |  
|  |  | 
 |  | 
 
 发表于 12-12-2015 12:37 AM
|
显示全部楼层 
| 本帖最后由 wdx 于 21-12-2015 08:45 PM 编辑 
 ...................................................
 
 
 | 
 |  |  |  |
 
|  |  |  
|  |  | 
 |  | 
 
 发表于 26-1-2016 09:55 PM
|
显示全部楼层 |  |  |  |
 
|  |  |  
|  |  | 
 |  | 
 
 发表于 27-1-2016 02:19 PM
|
显示全部楼层 |  |  |  |
 
|  |  |  
|  |  |  |  | 
            本周最热论坛帖子 |