论坛风格切换切换到宽版
  • 4275阅读
  • 7回复

请教C51的程序移植到89C2051上应该注意什么, [复制链接]

上一主题 下一主题
离线bg2gc
 
发帖
971
只看楼主 倒序阅读 0楼 发表于: 2008-01-02
俺是个单片机新手,问题多多
请教各位玩单片机的老师们,89c51的c语言程序移植到89c2051上应该注意什么,怎样移植?
离线bd4vc
发帖
172
只看该作者 1楼 发表于: 2008-01-02
如果程序没有操作总线,程序小于2k,把管脚的定义调整一下,程序基本不需要改动
离线bg2gc
发帖
971
只看该作者 2楼 发表于: 2008-01-03
别人给做的程序,原单片机用的是stc89c55rd,原来输出的rs485语句正常,我想缩小体积,改用stc12c2052后,输出的变成了乱码,不明白 晕。

电路元件很少,输入74ls122,输出max485,晶振11.0592,加上单片机
我附上电路图,和抓的两个图片

帮帮忙,
离线BG4UVR
发帖
11288
只看该作者 3楼 发表于: 2008-01-03
12系列和89系列,速度差别很大,需要重新计算串口波特率发生器定时器的重装值
离线bg2gc
发帖
971
只看该作者 4楼 发表于: 2008-01-03
谢谢您的答复
离线bg2gc
发帖
971
只看该作者 5楼 发表于: 2008-01-05
stc12c2052反复试过重装置,只有th1=0xf9;时,能正常出2400的波特率,怎么也试出不来4800的波特率,晕
  stc89c55,/*set baud,0xe8:1200,0xf4:2400,0xfa:4800,0xfd:9600*/都可以正常出来
  晶振是11.0592m
  我把这段程序上来:
void main()
{      
     delay(5);
     speed_counter=0;/*速度计数值*/
     send_time=0;/*数据发送计数器*/
     speed=0;/*速度*/
     speedre=0;//071104
     
     speed_begin=0;
           
     /*初始化串行通讯端口*/
     scon=0x40;/*串行传输模式1,禁止接收*/
     tmod=0x20;/*定时器1工作在模式2,自动重新载入计数值,定时器0工作在模式0,定时初值为5ms*/
     th1=0xf9;    
/*set baud,0xe8:1200,0xf4:2400,0xfa:4800,0xfd:9600这是89c55的重装置*/
//071104
     
  tr1=1;/*rime1 run*/
     tr0=1;
     th0=0x19;/*8ms,11.0592mhz,8192-92*/
     tl0=0x13;
/*      tr0=1;/*启动定时器0.改在中断中执行*/
     
     ea=1;
     et0=1;/*允许定时器0中断*/
     ex0=1;/*允许外中断0*/
     it0=1;/*外部中断0为下降沿产生中断*/
     i=0;
     for(;;)
           {
                 for(i=0;i<20;i++)
                 {
                 wdt_contr=0x34;/*喂狗*/      
                 delay(100);
                 }

请大侠们帮帮忙,拜托了
离线bg2gc
发帖
971
只看该作者 6楼 发表于: 2008-01-10
问题已经解决
stc12c系列和54系列,设置波特率和89c52是一样的,0xfa波特率4800,只是往单片机里写程序时要注意,步骤4,要选择外部晶体和时钟,另外要看下面的图里的时钟频率,是否和你用的晶振频率一致或接近,不一致就要重写
这是stc12c系列和54系列独有的,stc89系列就不是这样,写频软件界面里的步骤4,是不一样的

希望对大家使用stc单片机能有所帮助
离线hui1011
发帖
18
只看该作者 7楼 发表于: 2008-02-03
2051 p1^0;p1^1为比较器正反相输入端,当一般输出口用要上拉1k以上的电阻