单片机中毒了?

[复制链接]
3718|18
 楼主| 望宙风舟 发表于 2011-5-14 13:56 | 显示全部楼层 |阅读模式
刚才给STC12C2052的单片机烧写了个用定时器T0和T1来分别控制两个LED的周期闪烁。实现了。但现在给它写其他的程序时却写不进去了?而且这个定时的程序也似乎被擦掉了。这是问什么啊?单片机是不是中毒,坏了?

评分

参与人数 1威望 +1 收起 理由
djt2677 + 1

查看全部评分

lyjian 发表于 2011-5-14 14:21 | 显示全部楼层
是把里面的ISP程序也擦掉了吧
 楼主| 望宙风舟 发表于 2011-5-14 14:29 | 显示全部楼层
那该怎么办啊?
老鱼探戈 发表于 2011-5-14 15:25 | 显示全部楼层
ISP的下载程序没那么容易被你擦除的,楼主还是看看是不是你烧录方法有问题,或者烧录过程中突然的问题导致原来的程序被损坏。
chunyang 发表于 2011-5-14 23:22 | 显示全部楼层
应该是楼主的操作问题,另外注意2052只有2K的程序存储空间,如果你的代码量大于2K自然无法写入。
 楼主| 望宙风舟 发表于 2011-5-15 19:11 | 显示全部楼层
我的操作没有问题吧,代码不大,才270字节。换了两块下载这个程序的时候,也出现问题了。而最后我用第三块下载以前的程序时,是可以的。真的很郁闷的哦
chunyang 发表于 2011-5-15 23:45 | 显示全部楼层
那就看看本振选择是否正确,该型号可以选择内置RC振荡器或外置晶体振荡器,不要搞错,再有就是复位要可靠。
hbeslzy 发表于 2011-5-16 09:42 | 显示全部楼层
呵呵,学到了一些东西。
 楼主| 望宙风舟 发表于 2011-5-16 22:32 | 显示全部楼层
7# chunyang

晶振应该没问题。那就可能是复位的问题了,等明天考完试,我再去调试下,希望真的是这个问题啊?
那么该怎么让它可靠呢
chunyang 发表于 2011-5-17 01:44 | 显示全部楼层
2052带片内复位,如果本振频率在12M以下,将复位端直接接地即可,如果本振频率较高,最好使用一片复位IC。
yewuyi 发表于 2011-5-17 14:15 | 显示全部楼层
LZ实在很牛X,请问,什么叫中毒?
清风致影 发表于 2011-5-17 17:56 | 显示全部楼层
程序问题吧 最好把程序贴上来分析
chunyang 发表于 2011-5-18 00:31 | 显示全部楼层
中毒当然绝对不会。
 楼主| 望宙风舟 发表于 2011-5-18 13:39 | 显示全部楼层
谢谢各位。复位端我直接接地也还是不行。
   说是中毒,我原本以为是感染病毒了嘛,所以这样说咯。
这个程序是
//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//
#include <REG51.h> //通用89C51头文件
sbit LED1 = P1 ^ 0; //定义闪烁LED
sbit LED2 = P1 ^ 1; //定义闪烁LED

//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//
//函数名:定时/计数器初始化函数
void T_C_init (void){
        TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
        EA = 1;        //中断总开关

        TH1 = 0xFE; //16位计数寄存器T1高8位(写入初值)
        TL1 = 0xFE; //16位计数寄存器T1低8位
        ET1 = 1; //T/C1中断开关
        TR1 = 1; //T/C1启动开关

        TH0 = 0x13; //16位计数寄存器T0高8位
        TL0 = 0x13; //16位计数寄存器T0低8位(0x3CB0 = 50mS延时)
        ET0 = 1; //T/C0中断开关
        TR0 = 1; //T/C0启动开关
}
//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//

//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//
//函数名:定时/计数器1中断处理函数
void T_C1 (void) interrupt 3  using 3{ //切换寄存器组到3
        TH1 = 0xFE; //16位计数寄存器T1高8位(重新写入初值)
        TL1 = 0xFE; //16位计数寄存器T1低8位
       
        LED2 = ~LED2;                //取LED相反状态
}

//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//
//函数名:定时/计数器0中断处理函数
/void T_C0 (void) interrupt 1  using 1{ //切换寄存器组到1
        TH0 = 0x13; //16位计数寄存器T0高8位(重新写入初值)
        TL0 = 0x13; //16位计数寄存器T0低8位
       
        LED1 = ~LED1;                //取LED相反状态
}

//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+/
//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//

void main (void){ //主程序
        T_C_init(); //初始化
        while(1){

        }
}

//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//+_+//
清风致影 发表于 2011-5-19 11:54 | 显示全部楼层
单片机的头文件是REG51.h吗????
顺便再说下 程序编程的风格不要太花俏
 楼主| 望宙风舟 发表于 2011-6-3 22:22 | 显示全部楼层
我现在又发现个问题了:这个中毒可能是我把晶振接错了,我把晶振接在第8跟第9脚,也就是P3.4/TO/ECI跟P3.5/T1/PCA1/PWM1这两脚上,然后导致以后的下载不行了。但是不知是不是真的,因为有几片我是用内部时钟的。求大虾之解。。。还有是不是质量问题啊?
boby136 发表于 2011-6-6 12:43 | 显示全部楼层
可以用内部时钟哇?  内部时钟跑起来 也要靠晶振吧     多半晶振接错的问题
zjswuyunbo 发表于 2011-6-7 16:16 | 显示全部楼层
晶振配置错了?
dqyubsh 发表于 2011-6-7 20:22 | 显示全部楼层
看起来一团糟,难道设计之前不仔仔细细看看手册吗?如果看了,哪会有这样乱七八糟的事情,即便能跑了,也是糊弄的,无语。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

32

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部