作者beminaru (赏你个痛快)
看板ASM
标题Re: [问题] keilc uVision的问题
时间Thu Mar 13 22:03:39 2008
硬体方面我用的晶片是89s52
我是刚练习单晶片的新手
买了一本单晶片的书作练习
因为刚买了一台烧录机做练习用
所以就接了一个霹雳灯的电路
来测试是否可以进行烧录
在keil c的输出模拟中
可以成功的模拟出动作
但是一旦烧录晶片中
就一点动作也没有了
请大家帮我看一下程式
让我了解是程式的问题还是因为我keil c版本的问题导致的错误
/* ch03_3.c - 霹雳灯实验程式 */
//==宣告区================================================================
#include <reg51.h> // 定义8051暂存器之标头档,P2-17~19
#define LED P2 // 定义LED接至Port 2
void delay(int); // 宣告延迟函数
//==主程式================================================================
main() // 主程式开始
{ unsigned char i ; // 宣告无号数字元变数i(占1Bytes)
LED=0xfe; // 初值=1111 1110,只有最右1灯亮
while(1) // 无穷回圈,程式一直跑
{ for(i=0;i<7;i++) // 左移7次
{ delay(100); // 延迟100*5m=0.5s
LED=(LED<<1)|0x01; // 左移1位,并设定最低位元为1
} // 左移结束,只有最左1灯亮
for(i=0;i<7;i++) // 右移7次
{ delay(100); // 延迟100*5m=0.5s
LED=(LED>>1)|0x80; // 右移1位,并设定最高位元为1
} // 结束右移,只有最右1灯亮
} // while回圈结束
} // 主程式结束
//==副程式================================================================
/* 延迟函数,延迟约x*5ms */
void delay(int x) // 延迟函数开始
{ int i,j; // 宣告整数变数i,j
for (i=0;i<x;i++) // 计数x次,延迟x*5ms
for (j=1;j<=600;j++); // 计数600次,延迟5ms
} // 延迟函数结束
後来我改用一行一行的去作控制的方式烧入晶片
电路又可以动作了
以下是程式
LCM1_8=0xfd;
delay(100);
LCM1_8=0xfb;
delay(100);
LCM1_8=0xf7;
delay(100);
LCM1_8=0xef;
delay(100);
LCM1_8=0xdf;
delay(100);
LCM1_8=0xbf;
delay(100);
LCM1_8=0x7f;
delay(100);
我猜测电路应该没错
因为我用第二种方式的时候烧录进晶片
电路可以正常的动作
所以想请教有可能是什麽问题
keil c的硬体设定如下
1.Device 内的CPU的种类 选择AT89s52 (ATMEL)
2.Target 内
a.石英振荡器的频率有设定 12
b.Memory Model 我是选 small
以上
※ 引述《beminaru (赏你个痛快)》之铭言:
: 想请问
: 我使用的是Keil uVision2并且以c语言方式进行撰写
: 但是有些程式组译完後烧进去晶片,
: 以实际电路来看结果
: 却没办法完成我要的动作
: (但以Keil uVision2内的软体模拟来看我的输出,输出的方式仍为我想要达成的
: 方式在进行,所以程式应该没有错)
: 後来我改用简易的写法去组译
: 载入晶片後,就可以动作了
: 是否是因为我的程式Keil uVision2版本问题?
--
静静的等人追的话顶多只能有两三个选择
但是主动出击去追人的话你的选择将会是无限喔~共勉之
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.250.16
※ 编辑: beminaru 来自: 60.248.250.16 (03/13 22:09)