|
【练习】PIC 编程 - LED闪灯 (功力挑战)
[复制链接]
|
|
楼主 |
发表于 22-5-2009 09:03 AM
|
显示全部楼层
原帖由 Yapl 于 20-5-2009 07:52 PM 发表
问个问题,如果我在picc 里
TRISA=0xFF; //port a = input
PORTA=0x00;
我的porta是接去+5v ,和resistor串联(logic high,从头到尾都接着)
这时PORTA=0x00还是0xFF呢?
就算我打了PORTA=0x00;他还是会变成0xFF吗?
当你读Port A, 你是得到0xFF。
但是当你把TRISA=0x00; 时, PortA 有可能变成0x00。 |
|
|
|
|
|
|
|
发表于 24-5-2009 07:00 PM
|
显示全部楼层
int savertc;
int currentrtc;
currentrtc=(rtc&0x0FF)-((savertc>>8)&0x0FF);
为什么要&0x0FF? AND了不是一样吗?
看书里面的 |
|
|
|
|
|
|
|
发表于 25-5-2009 08:40 AM
|
显示全部楼层
原帖由 Yapl 于 24-5-2009 07:00 PM 发表
int savertc;
int currentrtc;
currentrtc=(rtc&0x0FF)-((savertc>>8)&0x0FF);
为什么要&0x0FF? AND了不是一样吗?
看书里面的
AND 了未必一样。 这个&只是masking.拿最后八个bits.
比如说savertc = 0x1234
savertc&0xFF = 0x34.
明白吗? |
|
|
|
|
|
|
|
发表于 25-5-2009 08:42 AM
|
显示全部楼层
原帖由 Yapl 于 20-5-2009 07:52 PM 发表
问个问题,如果我在picc 里
TRISA=0xFF; //port a = input
PORTA=0x00;
我的porta是接去+5v ,和resistor串联(logic high,从头到尾都接着)
这时PORTA=0x00还是0xFF呢?
就算我打了PORTA=0x00;他还是会变成0x ...
writtin to output port的时候, 最好是用latch,不用port. |
|
|
|
|
|
|
|
发表于 25-5-2009 08:54 AM
|
显示全部楼层
原帖由 fritlizt 于 25-5-2009 08:40 AM 发表
AND 了未必一样。 这个&只是masking.拿最后八个bits.
比如说savertc = 0x1234
savertc&0xFF = 0x34.
明白吗?
嗯明白了,但是它直接declare成 8bits 的unsigned char不就好了吗?为什么还要declare成16bits 的int =.=" |
|
|
|
|
|
|
|
发表于 25-5-2009 08:59 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-5-2009 09:42 AM
|
显示全部楼层
原帖由 Yapl 于 25-5-2009 08:54 AM 发表
嗯明白了,但是它直接declare成 8bits 的unsigned char不就好了吗?为什么还要declare成16bits 的int =.="
某些情况下你会需要到。
可能你的rtc return你hh:mm:ss。
不过你只需要compare ss, 但是其他情况你还是需要hh:mm,你就需要&,让yy:mm变成0.
明白吗? |
|
|
|
|
|
|
|
发表于 25-5-2009 09:50 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-5-2009 07:08 PM
|
显示全部楼层
但是 base line 和 mid range 的 PIC 都不能 write to latch 的。 |
|
|
|
|
|
|
|
发表于 25-5-2009 07:31 PM
|
显示全部楼层
原帖由 waiweng83 于 25-5-2009 07:08 PM 发表
但是 base line 和 mid range 的 PIC 都不能 write to latch 的。
所以是时候换去pic18鸟。 |
|
|
|
|
|
|
|
发表于 25-5-2009 11:23 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 12-7-2009 05:44 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 18-7-2009 11:26 AM
|
显示全部楼层
原帖由 wilson16 于 12-7-2009 05:44 PM 发表
#fuses NOWDT,HS,NOPUT, NOPROTECT,NOLVP
这部分我还是不明白,虽然已经看过它的datasheet。请帮帮忙下。。。。 原帖由 wilson16 于 12-7-2009 05:44 PM 发表
#fuses NOWDT,HS,NOPUT, NOPROTECT,NOLVP
这部分我还是不明白,虽然已经看过它的datasheet。请帮帮忙下。。。。
NOWDT, - No Watch Dog, 关闭看门狗。
HS- high Speed, >4Mhz 的Crystal
NOPUT - No Power Up Reset
NOPROTECT, - No Protect
NOLVP - No Low Voltage Programming
那一个你不明白? |
|
|
|
|
|
|
|
发表于 18-7-2009 08:37 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 18-7-2009 11:46 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 19-7-2009 01:20 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 27-3-2010 03:26 AM
|
显示全部楼层
对不起,吃了一年才教上来, 希望搂主验收
Q2:
#include <16f648a.h>
#include <stdio.h>
#use delay(clock=4000000)
#fuses NOWDT, INTRC, NOPUT, NOPROTECT, NOLVP
#use fast_io(B)
#use fast_io(A)
struct pin_map
{
int unused:8;
boolean rb0;
boolean rb1;
boolean rb2;
};
struct pin_map port;
struct pin_map direction;
#byte port=0x05
#byte direction=0x85
int16 n,n1,n2;
#INT_RTCC
void timer0_isr()
{
n++;
n1++;
n2++;
if(n==5000)
{
port.rb0=!port.rb0;
n=0;
}
if(n1==10000)
{
port.rb1=!port.rb1;
n1=0;
}
if(n2==500)
{
port.rb2=!port.rb2;
n2=0;
}
else
{
;
}
}
main()
{
enable_interrupts ( GLOBAL );
enable_interrupts (INT_RTCC);
setup_timer_0 ( RTCC_DIV_1 | RTCC_INTERNAL );
set_timer0 ( 155 );
direction.rb0=0;
direction.rb1=0;
direction.rb2=0;
port.rb0=1;
port.rb1=1;
port.rb2=1;
while(1)
{
}
} |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 27-3-2010 03:27 AM
|
显示全部楼层
Q3:
#include <16f648a.h>
#include <stdio.h>
#use delay(clock=4000000)
#fuses NOWDT, INTRC, NOPUT, NOPROTECT, NOLVP
#use fast_io(B)
#use fast_io(A)
struct pin_map
{
int unused:8;
boolean rb0;
boolean rb1;
boolean rb2;
};
struct pin_map port;
struct pin_map direction;
#byte port=0x05
#byte direction=0x85
int16 n,n1,n2,n00,n11,n22;
#INT_RTCC
void timer0_isr()
{
n++;
n00++;
n1++;
n11++;
n2++;
n22++;
if(n==500)
{
port.rb0=0;
n00=0;
}
if(n00==9500)
{
port.rb0=1;
n=0;
}
if(n1==3000)
{
port.rb1=0;
n11=0;
}
if(n11==17000)
{
port.rb1=1;
n1=0;
}
if(n2==100)
{
port.rb2=!port.rb2;
n22=0;
}
if(n22==900)
{
port.rb2=!port.rb2;
n2=0;
}
else
{
;
}
}
main()
{
enable_interrupts ( GLOBAL );
enable_interrupts (INT_RTCC);
setup_timer_0 ( RTCC_DIV_1 | RTCC_INTERNAL );
set_timer0 ( 155 );
direction.rb0=0;
direction.rb1=0;
direction.rb2=0;
port.rb0=1;
port.rb1=1;
port.rb2=1;
while(1)
{
}
} |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 27-3-2010 03:28 AM
|
显示全部楼层
对不起,忘了改
#include <16f648a.h> -〉#include <16f628a.h> |
|
|
|
|
|
|
|
楼主 |
发表于 31-3-2010 09:32 AM
|
显示全部楼层
对不起,忘了改
#include -〉#include
热爱音乐 发表于 27-3-2010 03:28 AM
很好, 早上模拟了, 只是看波形Ok, 我懒惰测量, 算你通过了。。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|