新手求助PIC单片机流水灯问题!

牛奶里的跳蚤 2014-02-15 10:20:32
型号是PIC18F452,用proteus仿真的。流水灯延时是用T0实现的。代码:
#include<p18f452.h>

unsigned int num=0;

void init();
void high_isr();
void low_isr();

#pragma code high_vector_section=0x08
void high_vector()
{
_asm goto high_isr _endasm
}

#pragma code low_vector_section=0x18
void low_vector()
{
_asm goto low_isr _endasm
}
#pragma code

#pragma interrupt high_isr
void high_isr()
{
num++;
TMR0L=56;
if(num==50000)
{
num=0;
LATD=LATD<<1;
}
}

#pragma interruptlow low_isr
void low_isr()
{
}



int main(void)
{
init();
while(1)
{

}
}

void init()
{
INTCONbits.GIE=0;

RCONbits.IPEN=1; //使能中断优先级


T0CON=0x42; //TMR0设置:停止运行、8位定时,预分频1:8
TMR0L=56; // 0.4ms 晶振频率16MHZ
INTCONbits.TMR0IF=0;
INTCONbits.TMR0IE=1;
INTCON2bits.TMR0IP=1;
T0CONbits.TMR0ON=1; //启动TMR0

INTCONbits.GIE=1; //开全局中断


TRISD=0x00; //亮第一盏灯
PORTD=0x01;
}

疑问:
if(num==50000)
{
num=0;
LATD=LATD<<1;
}
这里,1. 如果写num==50000的话,总共有8个灯,亮到第5个灯的时候就会重新从第1个灯亮起来
如果写num==25000的话,能8个灯轮流亮,但是不稳定,有时候会跳过1个灯亮

2. 要是在if语句结束后加上INTCONbits.TMR0IF=0,那就灯只永远亮着第1个灯

3.要是在if语句结束后加上 if(LATD==0)
{
LATD=0x01;
}
流水灯还是会不稳定的流水1轮半就重新开始。

4.写LAT和PORT到底有什么区别啊?为什么推荐写LAT?

请问下这些问题都是为什么啊? INTCONbits.TMR0IF=0,标志位清0不是一定要加的吗?
...全文
330 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mangoalx 2014-02-18
  • 打赏
  • 举报
回复
哦,没注意。那中断频率这么高也没意义啊,减到每次变灯一次中断不好么?
牛奶里的跳蚤 2014-02-18
  • 打赏
  • 举报
回复
引用 6 楼 u012586257 的回复:
既然只有8个灯,num 计数到50000有什么特别意义吗? 建议试一下: if(num == 8) num = 0; LATD = 1<<num;
晶振频率很高啊,已经1/8分频了,如果是num==8的话 效果应该是所有的灯一起亮着吧?
牛奶里的跳蚤 2014-02-17
  • 打赏
  • 举报
回复
引用 3 楼 PALLEE 的回复:
unsigned int num=0; num=50000,超过32167了 关于LAT和PORT,好好看datasheet吧,英文的有点别扭,个人也不是很的很懂,听同事讲的大概意思是LAT写进去什么读就是什么,PORT你写了之后,如果这个口接有上拉或者下拉什么的,你写进去的值会受到影响, 仅供参考
unsigned int的范围是0到65535啊。。。
mangoalx 2014-02-17
  • 打赏
  • 举报
回复
既然只有8个灯,num 计数到50000有什么特别意义吗? 建议试一下: if(num == 8) num = 0; LATD = 1<<num;
palleexu 2014-02-17
  • 打赏
  • 举报
回复
哦,脑子迷糊说错了,不好意思啊
palleexu 2014-02-16
  • 打赏
  • 举报
回复
unsigned int num=0; num=50000,超过32167了 关于LAT和PORT,好好看datasheet吧,英文的有点别扭,个人也不是很的很懂,听同事讲的大概意思是LAT写进去什么读就是什么,PORT你写了之后,如果这个口接有上拉或者下拉什么的,你写进去的值会受到影响, 仅供参考
vc8fans 2014-02-16
  • 打赏
  • 举报
回复
强大的STC咋就不用呢,

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧