打印
[其他ST产品]

第一次用ST7LITEU05点亮LED,请大哥指点

[复制链接]
2707|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leojiang|  楼主 | 2008-1-16 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
A5口接LED,计划是低电平亮,可是示波器看A5脚电平长期高电位不变,下面是源代码,COSMIC C和STVD7平台,各位大哥帮忙看看哪里不对,谢谢啦。。。

#include <io7flitus.h>
#include <stdlib.h>

/*----Define Bit Operation Macro---*/
#define SetBit(VAR,BIT_NUM)    ( (VAR) |= (1<<(BIT_NUM)) )
#define ClrBit(VAR,BIT_NUM)    ( (VAR) &= ((1<<(BIT_NUM))^0xFF) )
#define ValBit(VAR,BIT_NUM)    ( (VAR) & (1<<(BIT_NUM)) )
#define BitIsClear(VAR,BIT_NUM) ( 0 == ValBit(VAR,BIT_NUM) )
#define BitIsSet(VAR,BIT_NUM)   ( !BitIsClear(VAR,BIT_NUM) )

#define EnableInterrupts     {_asm ("RIM");}  
#define DisableInterrupts    {_asm ("SIM");} 
#define Nop            {_asm ("nop");} 
#define WaitforInterrupt    {_asm ("wfi");} 

#define LED_ON            ClrBit(PADR,5)
#define LED_OFF            SetBit(PADR,5)

/*---Define functions---*/
void gInitialize(void);
void gDelayms(unsigned char a);
     

/*---Main routine---*/
void main (void)
{
    gInitialize();
    while (1)
    {
    LED_ON;
    gDelayms(255);
    LED_OFF;
    gDelayms(255);
    } 
}

/*----Function: gDelayms()---*/
void gDelayms(unsigned char a)
{
    unsigned short k;
    for(k=192*a;k>0;k--);
}


/*---Function: gInitialize()---*/
void gInitialize(void)
{
    // Set internal RC clock
    RCCR = RCCRH0;
    SICSR = RCCRL0;
    AVDTHCR = 0x23;    //set the internal RC oscillator Prescaler to 4MHz.        
    // Set input/output pins:
    PADDR = 0x3F;    
    PAOR = 0x3F;    
    PADR = 0x00;    //Clear all output, }
沙发
香水城| | 2008-1-17 08:40 | 只看该作者

表面上看程序没什么问题,你的电路图呢?

使用STVD7的调试手段看看,是否每条语句都是按照你的安排正常运行,确认没有语句被优化。

使用特权

评论回复
板凳
leojiang|  楼主 | 2008-1-17 10:33 | 只看该作者

请问内部RC振荡是我那样设定吗?怎么看单片机振荡源工作了

电路图就是A5口接LED,A3外接上拉电阻和下拉电容复位电路,其他IO口都接上拉电阻10K到5V,供电5V。

请问内部RC振荡是我那样设定吗?怎么看单片机振荡源工作了?

还不是很会用STVD7,刚开始整,以前用PIC比较多。

使用特权

评论回复
地板
香水城| | 2008-1-17 10:46 | 只看该作者

A5口接LED时是否接电阻,否则可能I/O口已经被烧

我没有用过这个芯片,不太清楚具体编程,如果你能够单步调试应该没问题。

使用特权

评论回复
5
leojiang|  楼主 | 2008-1-17 11:18 | 只看该作者

A5口接了限流电阻的,390 Ohm的,A5口被灌电流

这个芯片就是ST7Lite family的,ST7LITEU05是8脚的flash芯片,
由于第一次用,所以从最简单的点一个LED开始熟悉IO口的操作,几天了还没有搞好。
版主说的单步调试是进入debug界面中吧?

使用特权

评论回复
6
香水城| | 2008-1-17 11:33 | 只看该作者

单步调试是进入debug界面中

使用特权

评论回复
7
aes_sea| | 2008-1-17 13:01 | 只看该作者

re:

option byte 选的是内时钟吗?
把delay拿掉,看有没有信号

使用特权

评论回复
8
leojiang|  楼主 | 2008-1-17 13:42 | 只看该作者

option byte 选的是内时钟

是在programmer的option byte里选了Interanal RC as startup clock.不要delay函数,想它输出高电平还是输出不了,大哥看我的内部时钟设置对不对啊?郁闷中。。。以前用PIC很好整的,这个ST咋整不出来?

使用特权

评论回复
9
香水城| | 2008-1-17 14:07 | 只看该作者

1楼与8楼的说法矛盾

1楼说“A5脚电平长期高电位不变”,5楼却说“想它输出高电平还是输出不了”,到底哪个对?

在调试器中直接改变PADR的值,看看管脚上有没有电平变化,这不受内部时钟影响,确保硬件电路没有问题。

使用特权

评论回复
10
leojiang|  楼主 | 2008-1-17 14:11 | 只看该作者

我刚换了一个新的MCU,现在不用delay函数可以工作了

aes_sea大哥,我刚换了一个新的MCU,现在不用delay函数只要
while (1)
    {
    LED_ON;
    //gDelayms(255);
    //LED_OFF;
    //gDelayms(255);
    } 
是可以看到A5脚分别高电平(如果写LED_OFF)或者低电平(LED_ON)的,加入delay函数就好像不工作了。我的这个delay函数变量数值范围是对的,我又检查了。还得继续努力。。。

使用特权

评论回复
11
leojiang|  楼主 | 2008-1-17 14:17 | 只看该作者

sorry,没有说清楚

香版主,1楼说的“A5脚电平长期高电位不变”,是指1楼那个程序运行时候的状态。
8楼说“想它输出高电平还是输出不了”,是指把1楼程序改为while (1)
    {
    LED_OFF
    //gDelayms(255);
    //LED_OFF;
    //gDelayms(255);
    } 
示波器看不是高电平,这个是单片机坏了(可能我烧录次数太多了),现在换了一个新的单片机,结果就是在10楼回复的。最新的进展是加入delay函数后本应该LED一闪一闪的,结果是长期高电平不变。

使用特权

评论回复
12
leojiang|  楼主 | 2008-1-17 21:07 | 只看该作者

软件仿真OK了,又要换个新的单片机下载程序才OK.

ST的单片机咋怎么容易坏?搞个LED亮坏了8个了。

使用特权

评论回复
13
香水城| | 2008-1-17 22:46 | 只看该作者

请仔细检查你的电路,尤其是LED限流电阻

“ST的单片机咋怎么容易坏?搞个LED亮坏了8个了。”这肯定是不正常的!

使用特权

评论回复
14
leojiang|  楼主 | 2008-1-18 10:34 | 只看该作者

用万用表测量了限流电阻阻值是对的。

就A5脚接了LED,其他脚都接上拉电阻,硬件应该没有问题。烧录器是自己按照datasheet做的一个,香版主有没有烧录器的资料,不知道烧录器是否OK?

使用特权

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

本版积分规则

15

主题

102

帖子

2

粉丝