微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序移植 通不过 睡不着

程序移植 通不过 睡不着

时间:10-02 整理:3721RD 点击:
STC89C52RC上正常运行  移植到STC12C2052AD上就是不行  求助(电路图就不上了  看了代码应该都明白)
//头文件:
#include "reg51.h"
//IO引脚定义:
sbit hwx=P3^3;//红外接收数据引脚,
sbit jdqa=P2^0;
sbit jdqb=P2^1;//继电器控制引脚(换成led)
sbit jdqc=P2^2;
sbit jdqd=P2^3;
/********数据定义*************************************************************/
unsigned char ly_lhj[4];//保存NEC的四个字节数据
unsigned char ly_ct=0;//计数时间量
bit ly_flag=0;//成功接收标志
//函数声明:
void delay100us(void);
/***********主函数开始********************************************************/
void main(void)
{
EA=1;//首先开启总中断
EX1=1;//开启外部中断1,红外接收数据引脚
IT1=1;//设置成下降沿触发方式
while(1){
if(ly_flag){//接收成功处理按键功能,这里只控制继电器,其它可自行加入
ly_flag=0;
if((ly_lhj[2]==0x10)&&(ly_lhj[3]=0xff))//按键1的控制码
jdqa=~jdqa;//启动或关闭继电器a
if((ly_lhj[2]==0x11)&&(ly_lhj[3]=0xff))//按键2键的控制码
jdqb=~jdqb;//启动或关闭继电器b,
if((ly_lhj[2]==0x12)&&(ly_lhj[3]=0xff))//按键3键的控制码
jdqc=~jdqc;//启动或关闭继电器c,
if((ly_lhj[2]==0x14)&&(ly_lhj[3]=0xff))//按键4键的控制码
jdqd=~jdqd;//启动或关闭继电器d

}
}
}
/***********外中断1入口函数,P13引脚,红外线接收IC数据脚**************************/
void hongwai(void) interrupt 2
{
unsigned char i,ia;
/**************开始判断是否为NEC波形引导码的前9MS和后4.5MS******************************/
ly_ct=0;//计数时间清0
while(!hwx)
delay100us();//调用0.1MS延时计数,ly_ct每调用一次加1
if(ly_ct<80||ly_ct>100)//NEC引导码前9MS,ly_ct约等于90,给个误差值,用80-100之间来判断
return;
ly_ct=0;
while(hwx){
delay100us();
if(ly_ct>50)//NEC引导码引导码的后4。5MS,ly_ct约45
return;
}
if(ly_ct<40)//NEC引导码引导码的后4。5MS,ly_ct约45
return;
                        /***********开始接收四个字节内容**************************************/       
        for(i=0;i<4;i++){
                for(ia=0;ia<8;ia++){
                        while(!hwx);                //低电平开始,不处理只等待高电平接收               
                       
                        ly_ct=0;
                        while(hwx){                        //高电平开始,
                                delay100us();
                                if(ly_ct>20)               
                                        return;               
                        }
                        //高电平结束,判断数据1或0向变量移入
                        ly_lhj[i]>>=1;                        //数据由高位移入低位
                        if(ly_ct>10)                                //时间量TH1高于10,即高于1MS判断为1
                                ly_lhj[i]|=0x80;
                }
        }
        ly_flag=1;        //接收成功
        TF1=0;
}
void delay100us(void)
{
        unsigned char i=15;
        while(i--);
        ly_ct++;
}

这两种单片机速度差别很大的

stc12c2052没有P2口,只有八个P1口和七个P3口,io口设置的不对

建议小编还是先了解清楚这两种单片机不同后再移植吧,不要以为STC的单片机真的就那么随便可替换。

有没有谁给点建设性的意见!?那io移过去的改了。

还不明白吗?两种单片机的执行速度不一样,你得重写延时函数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top