打印

51程序如何改成PIC24F程序

[复制链接]
1218|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzz3535|  楼主 | 2014-6-6 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为PIC24F是16位单片机,除了必要的一些寄存器设置、管脚定义、延时等需要更改,还应该改些什么呢?
例如一个SPI的读程序,以下是51单片机写的:
unsigned long        SPI_Read(unsigned char address)
{
        char i;                                       
        unsigned long temp_data;
        temp_data = 0;                       
        SPI_CLK = 0;        //CLK初始状态是0
        Delay(50);                //Delay(200); h1101 yangbiao
        Delay(50);       
        SPI_CS = 1;       

        Delay(50);               
        SPI_CS = 0;               
        Delay(50);               
                                       
        SPI_CLK = 1;        //启动数据传输       
        Delay(50);       
        SPI_DIN = 0;        //0表示主机向从机读数据
        Delay(50);       
        SPI_CLK = 0;        //从机需要在下降沿取数据
        Delay(50);       
                               
        for(i=6; i>=0; i--)
        {
                SPI_CLK = 1;        //启动数据传输       
                SPI_DIN = (address & (0x01<<i))>>i;        //address 地址从0x00到0x7F
            Delay(50);       
                SPI_CLK = 0;        //从机需要在下降沿取数据
            Delay(50);       
        }
        //从机接收到命令后,开始送出数据,上升沿送数据
        //SPI_DIN = 0;
        SPI_DIN = 1;
        Delay(50);       
        SPI_CLK = 1;       
        Delay(50);       
        SPI_CLK = 0;
        temp_data = temp_data | SPI_DOUT;       
        Delay(50);               
        for(i=0; i<23; i++)
        {
                SPI_CLK = 1;       
            Delay(50);       
                SPI_CLK = 0;
                temp_data = (temp_data<<1) | SPI_DOUT;
            Delay(50);       
        }
        SPI_CS = 1;
        return temp_data;

}
地址读取的地方怎么改呢?谢谢!
沙发
lanmp| | 2014-6-6 11:26 | 只看该作者
你这段程序里面除了必要的一些寄存器设置、管脚定义、延时等也没什么别的东西了。

使用特权

评论回复
板凳
perry_peng| | 2014-6-6 12:40 | 只看该作者
PIC有硬件SPI,如果非要用软件模拟要配置下GPIO的输入输出方向。

使用特权

评论回复
地板
zzz3535|  楼主 | 2014-6-6 13:07 | 只看该作者
那调用时直接传递一个unsigned char address就行吗?PIC24F的数据线不是16位的吗?谢谢!

使用特权

评论回复
5
yewuyi| | 2014-6-6 15:13 | 只看该作者
数据线是多少位,这在C编译器中自己帮你处理了,你只要按照C语言规则写代码即可。

你难道什么时候听说过针对8和16位,有不同的C语言规则吗?

使用特权

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

本版积分规则

62

主题

151

帖子

2

粉丝