打印
[51单片机]

求教下大神!这个程序如何移植到C8051F系列单片机!

[复制链接]
1981|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
面包所长|  楼主 | 2016-6-2 14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这是官网给的控制一个芯片的参考程序,就是把数据通过单片机发送到芯片中的三个寄存器当中,官网参考程序用的是ADUC841单片机,我想改成C8051F300这个封装很小的单片机,想用P0^0,P0^1,P0^2,P0^3四个引脚,数字交叉开关和端口配置什么的,我试了很多次,实在没办法了,来这里求教了!学生党表示需要学习求教的东西很多,希望大家多多帮助,真心谢谢了!
#include <stdio.h>
#include <ADuC841.h>
sbit DATA=P3^3;       
sbit SCLOCK=P3^4;
sbit LATCH=P3^5;
sbit CE=P3^7;

void delay(int);

void main()
{
        unsigned long int registe0,registe1,registe2,temp1;
        int i;

        registe0=0x300029;                        //R Register
        registe1=0x0ff100;                        //C Latch       
        registe2=0x007802;                        //N Register
       
        temp1=0x800000;

        CE=1;                                        //Update R Latch        the order of writing the registers should be R,C,N
        SCLOCK=1;
        DATA=0;
        LATCH=0;
          for(i=0;i<24;i++)               
        {
                if((temp1&registe0)==0x0)               
                        DATA=0;
                else
                        DATA=1;
                SCLOCK=0;
                SCLOCK=1;

                temp1=temp1>>1;
        }
        temp1=0x800000;
        LATCH=1;
        LATCH=0;

        for(i=0;i<24;i++)                        //Update C Latch       
        {
                if((temp1&registe1)==0x0)               
                        DATA=0;
                else
                        DATA=1;
                SCLOCK=0;
                SCLOCK=1;

                temp1=temp1>>1;
        }
        temp1=0x800000;
        LATCH=1;       
        LATCH=0;       

        delay(5000);                                //interval between programming C and N register needs to be at least 15ms

                       
        for(i=0;i<24;i++)                        //Update N Register               
        {
                if((temp1&registe2)==0x0)               
                        DATA=0;
                else
                        DATA=1;
                SCLOCK=0;
                SCLOCK=1;

                temp1=temp1>>1;
        }
        temp1=0x800000;
        LATCH=1;
        while(1);
}

void delay(int length)
{
while (length >=0)
    length--;
}

相关帖子

沙发
xuyaqi| | 2016-6-2 15:24 | 只看该作者
根据你说的情况你想用C8051F300来用ADUC841的例程,关键你要看清楚所控制芯片时序要求,会使用C8051F300。先学会使用C8051F300再学习控制芯片一步步来才能有所提高。

使用特权

评论回复
板凳
面包所长|  楼主 | 2016-6-2 15:39 | 只看该作者
xuyaqi 发表于 2016-6-2 15:24
根据你说的情况你想用C8051F300来用ADUC841的例程,关键你要看清楚所控制芯片时序要求,会使用C8051F300。 ...

时序要求那个芯片的数据手册有,主程序应该可以直接用,现在就是端口的配置和程序的初始化怎么搞

使用特权

评论回复
地板
xuyaqi| | 2016-6-2 15:41 | 只看该作者
C8051F300应该有例程的

使用特权

评论回复
5
xuyaqi| | 2016-6-2 15:46 | 只看该作者
C8051F300-led例程.rar (16.43 KB) 参考例程

使用特权

评论回复
6
xuyaqi| | 2016-6-2 15:48 | 只看该作者
应该结合例程看C8051F300数据手册慢慢就会明白。

使用特权

评论回复
7
面包所长|  楼主 | 2016-6-2 15:49 | 只看该作者

谢谢 这个我看了 也能点灯了 但是这个发送数据的 不会

使用特权

评论回复
8
xuyaqi| | 2016-6-2 15:56 | 只看该作者
点灯是IO口高低电平,发送数据也是IO口高低电平。你的官网参考程序不就是IO口高低电平发送数据。

使用特权

评论回复
9
面包所长|  楼主 | 2016-6-2 18:41 | 只看该作者
xuyaqi 发表于 2016-6-2 15:56
点灯是IO口高低电平,发送数据也是IO口高低电平。你的官网参考程序不就是IO口高低电平发送数据。 ...

我按照点灯的初始化程序和端口配置 都搞过了 可是端口没有反应

使用特权

评论回复
10
linqing171| | 2016-6-5 11:22 | 只看该作者
找代理,替你几分钟做这个程序到移植。
或者打赏几块钱,肯定有师兄帮你全部解决的。

使用特权

评论回复
11
szliuht| | 2016-6-5 20:53 | 只看该作者
少了上拉电阻吧,记得51的P0口是开漏输出的,P3是推挽输出可以不加上拉,不知你用的那个型号是不是这样

使用特权

评论回复
12
menfiss| | 2016-6-6 07:04 | 只看该作者
貌似交叉开关配置还是没有,端口配置也是没有。

使用特权

评论回复
13
面包所长|  楼主 | 2016-6-6 16:58 | 只看该作者
linqing171 发表于 2016-6-5 11:22
找代理,替你几分钟做这个程序到移植。
或者打赏几块钱,肯定有师兄帮你全部解决的。 ...

哪里有代理啊?

使用特权

评论回复
14
面包所长|  楼主 | 2016-6-8 15:31 | 只看该作者

使用特权

评论回复
15
面包所长|  楼主 | 2016-6-14 14:37 | 只看该作者
我自己解决了 自己动手丰衣足食

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

32

帖子

0

粉丝