彻底败给51了,程序都不知道怎么写了
学单片机的时候是51入门,现在已经N些年没碰过51了,一直在用stm32
现在突然要用51,STC12LE2052,都不知道怎么写程序了
首先因为Keil里面没有宏晶的片子,所以不知道要选哪个型号代替
我选了89C51,简单代码如下:
#include <reg51.h>
void main()
{
P3 = 0x0f;
P1 = 0x0f;
while(1);
}
ISP下载(ISP好的,下载公司现成的Hex能用),就是没动静,哎,感觉好失败啊
哪位能耐心说说,谢谢了 彻底败给楼主了,都不知道怎么说了 {:titter:} tim 发表于 2013-3-8 15:25 static/image/common/back.gif
彻底败给楼主了,都不知道怎么说了
哎...我也不知道怎么说自己了
兄弟你还是说说吧{:mad:}
我快憋死了 快憋死{:sweat:}{:sweat:}{:sweat:} 老妖的网站上有头文件 本帖最后由 adamwin2011 于 2013-3-8 15:43 编辑
LZ,我能说你基础不牢实吗
……………………………………
1、没有STC12LE2052能用其他型号代替?寄存器一样吗?
你该先找STC12LE2052的数据手册看看吧
2、keil里确实没有STC,要用怎么办?只有在Keil C中增加STC型号,
加头文件,怎么增加,宏晶网上有吧
3、ISP下载,你得用STC-ISP 呵呵,这种事情很正常。找个建好的工程吧,网上应该一大把。 不是用串口下载程序么,你的ISP是这个么 adamwin2011 发表于 2013-3-8 15:42 static/image/common/back.gif
LZ,我能说你基础不牢实吗
……………………………………
1、没有STC12LE2052能用其他型号代替?寄存器一样 ...
嗯,基础确实不牢
1、大部分寄存器一样的,有一些功能寄存器可以从2052的头文件里找到,自己定义
2、这个我已经找过了,他网站上面有两个.cdb文件,按网上的方法添加,发现里面也没有这个型号,貌似这个型号比较老了
3、ISP下载我用的是这个,下载没问题,因为我吧现成的hex下进去能运行
所以....问题是不知道代码要怎么写 wikicd 发表于 2013-3-8 15:43 static/image/common/back.gif
呵呵,这种事情很正常。找个建好的工程吧,网上应该一大把。
嗯,是串口的{:lol:} wikicd 发表于 2013-3-8 15:43 static/image/common/back.gif
呵呵,这种事情很正常。找个建好的工程吧,网上应该一大把。
兄弟能给一个我看一眼吗,网上我真心没找到
谢谢了 tim 发表于 2013-3-8 15:41 static/image/common/back.gif
老妖的网站上有头文件
头文件之前就下好了,主要问题还是工程框架,以为添加了他官网上那个文件,里面也找不到STC12le2052这个型号(估计被抛弃了,官网说用5201代替2052)
吐槽一下老妖的网站,真心蛋疼的网站,太乱了{:sweat:} 苦行僧 发表于 2013-3-8 15:57 static/image/common/back.gif
嗯,基础确实不牢
1、大部分寄存器一样的,有一些功能寄存器可以从2052的头文件里找到,自己定义
2、这个 ...
坛子里找的:
http://www.amobbs.com/thread-4374614-1-1.html
苦行僧 发表于 2013-3-8 16:01 static/image/common/back.gif
兄弟能给一个我看一眼吗,网上我真心没找到
谢谢了
这个。。。不好意思,也没有。只是我一般用新编译工具+新片子都要找现有工程,否则遇到问题被搞死。 adamwin2011 发表于 2013-3-8 16:06 static/image/common/back.gif
坛子里找的:
http://www.amobbs.com/thread-4374614-1-1.html
谢谢,自己刚刚把IO给摸索通了,原来也{:sweat:} 要配置 STC的新下载软件有很多东西可值得撸主看的! 看了LZ的程序偶惊呆了,你让单片机什么都不干,它怎么会有反应呢 czzhouyun 发表于 2013-3-8 16:44 static/image/common/back.gif
看了LZ的程序偶惊呆了,你让单片机什么都不干,它怎么会有反应呢
呵呵,我只是试一下,IO输出高低电平,不知道原来这个片子的IO也要配置
好像记得之前的89C51不用配置IO口就能用来着.....{:lol:} 我没看出什么问题来
keil里没有stc单片机型号,可以用89C51代替,我从来没添加过,这个是没问题的。
include使用reg51.h,只要不用到stc专有的寄存器,是可以的。通用的部分是能正常使用的。老妖给的头文件只是比reg51.h多了stc所带的外设的sfr地址
下载用stc官网提供的串口下载工具,注意他的使用要求,先点“下载”按钮,再上电源。
IO不配置就是普通的51模式,P0-P3均带上拉的“准双向口模式” 路过.学习一下 zhujinliang2124 发表于 2013-3-8 17:51 static/image/common/back.gif
我没看出什么问题来
keil里没有stc单片机型号,可以用89C51代替,我从来没添加过,这个是没问题的。
嗯,我应该没把问题说明白,我是说keil里找不到stc的型号,然后忘记了51程序的一般格式,比如sbit定义之类
下载这些都没问题的
谢谢回复,现在这些我都搞明白了,呵呵 老师傅碰到新问题, 我也遇到了,折腾了很久,发现没有把C文件加入工程!!!!! 来一个51的红外线解码列子供参考
------------------------------------------------------------
名称:遥控器红外解码,PO口接LED,显示功能码以供查看
编写:mhjerry
日期:20011.7
内容:按遥控器上的按键,会在PO口LED上显示
-*------------------------------------------------------------*/
#include "reg52.h" //头文件,STC的片子通用,除了特殊寄存器之外可以通用
//定义 此口为红外信号输入MCU口
sbit IR_Out = P3^2;
// 主程序运行标志位,运行主程序时LED灭,运行中断程序时LED亮
sbit IR_Flag = P3^1;
// LED显示口
#define LED_Port P1
// 用于存放按键码值,初始化为0000 0000这样接受数据时可以只考虑1了
unsigned char dat = {0,0,0,0};
/*............................................................*/
void main()
{
IR_Out = 1; // 此口为MCU输入口,故需要置1
IR_Flag = 1; // 灭LED灯
TMOD = 0x01; // 定时器0,方式1
IT0 = 1; // 外部中断0,下降沿触发
EX0 = 1; // 准许外部中断
EA = 1; // CPU准许中断
while(1)
{
IR_Flag = 1;// 执行主程序时,LED灯灭
}
}
/*------------------------------------------------------------*-
函数名称:Int0()
函数输入:无(容许中断时,外部触发)
函数输出:无
函数说明:外部中断0中断处理
-*------------------------------------------------------------*/
void Int0() interrupt 0
{
unsigned char i,j;
EX0 = 0; // 关闭外部中断0
IR_Flag = 0; // 执行中断程序时,LED灯亮
i = 10; // 0.793ms延时,运行10次
while( --i )
{
// 定时0.793ms,延时0.793ms*10=7.93ms
TH0 = 0xfc;
TL0 = 0xe7;
TR0 = 1;
while( !TF0 );
TF0 = 0;
TR0 = 0;
// 这7.93ms期间只要IR_Out变高电平,就非合法的红外信号,跳出
if( IR_Out )
{
EX0 = 1; // 准许中断
return ;
}
}
// 程序进行到这里,表明是合法的红外信号(利用9ms判断)
while( !IR_Out ); // 等待9ms低电平过去
// 程序进行到这里,表明经过9ms低电平
TH0 = 0xf6;
TL0 = 0xff;
TR0 = 1;
while( !TF0 );
TF0 = 0;
TR0 = 0; // 延时2.305ms
// IR_Out 为低表明是连发码,不予理睬,跳出
if( !IR_Out )
{
EX0=1;
return;
}
// 程序进行到这里,表明是引导码,等待4.5ms高电平的过去
while( IR_Out );
// 开始接收用户码
for(i=0; i<4; i++)
{
for(j=0; j<8; j++)
{
while( !IR_Out ); // 等待低电平过去
dat >>= 1; // 把上次的数据位右移一位
TH0 = 0xfc;
TL0 = 0xe7;
TR0 = 1;
while( !TF0 );
TR0=0;
TF0=0; //延时0.793ms
// 若为数据"1",则延时后IR_Out为高电平
if( IR_Out )
{
dat |= 0x80; // 所有数据位1放最高位
while( IR_Out ); // 等待高电平过去
}
}
}
LED_Port = dat;
EX0=1; // 开中断
return;
}
/*------------------------------------------------------------*-
---- END OF FILE -------------------------------------------
-*------------------------------------------------------------*/ 楼主的程序,简洁、工整,没有语法上的错误,应该是可以运行的。 xpxp 发表于 2013-3-12 10:54 static/image/common/back.gif
楼主的程序,简洁、工整,没有语法上的错误,应该是可以运行的。
呵呵,见笑了,我只是试试代码是不是这么写的
忘记配置IO了,所以没输出,还以为哪里出问题呢 lengshuicha 发表于 2013-3-12 09:28 static/image/common/back.gif
来一个51的红外线解码列子供参考
------------------------------------------------------------
谢谢,红外已经用捕获方式搞定 硬件对不对? 承浩2012 发表于 2013-3-12 18:40 static/image/common/back.gif
硬件对不对?
对的,已经解决了,呵呵
页:
[1]