| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:求大虾们给看看这个单片机C语言的程序 错在哪了
只看楼主 加入收藏
q673604934
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-13
结帖率:0
收藏
已结贴  问题点数:5 回复次数:3 
求大虾们给看看这个单片机C语言的程序 错在哪了
程序代码:
#include    "reg52.h"
#include    "uart.h"

sbit        sdi=    P1^0;
sbit        sck=    P1^1;
sbit        nsel=    P1^2;
sbit        sdo=    P1^3;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit l4=P2^7;
sbit l1=P2^4;
sbit l2=P2^5;
sbit l3=P2^6;  

unsigned char workflag;
unsigned char rxdata[16];    //16,接收数据存储器组
unsigned char txdata[16];    //16,发送数据存储器组


bit revframe;

unsigned char spirevbyte();
unsigned int spirevtwobyte();
void spisendbyte(unsigned char x);
void spisendcommand(unsigned int x);
void txregframe();
void fiforxframe();
void ia442xinit();
void delayms(unsigned int n);

unsigned char  num=0;
unsigned char comdata[16];
bit flag=0;
unsigned uchar code table[]=
{   
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
}   
void display(uchar d_num)
{
    P0=table[d_num];
    
}
void anjian()
{
    uchar a,b,num;
    if(key1==0)
    {
        delay(10);
        if(key1==0)
        {
            num++;
            if(num==9)
                num=0;
            b=num;
            a=num;
            display(b);
           
            while(!key1);
            send(a);
        }
    }

    if(key2==0)
    {
        delay(10);
        if(key2==0)
        {
            if(num==0)
                num=8;
            else
                num--;
            b=num;
            a=num;
            display(b);
           
            while(!key2);
            send(a);
        }
    }
    if(key4==0)
    {
        if(key4==0)
        {
            b=0;
            num=0;
            a=10;
            display(b);
           
            while(!key4);
            send(a);
        }
    }
    if(key3==0)
    {
        if(key3==0)
        {       
            send(a);
            while(!key3);
        }
    }
         
}

 void init()
{
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;
    REN=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
    d=1;
}
void main()
{
    unsigned char b;
    UART_Init();
    P1=0xcf;
    txdata[0]=0x2d;
    txdata[1]=0xd4;
    txdata[2]=0xfa;
    txdata[3]=0x01;
    txdata[4]=0x55;
    ia442xinit();
    spirevtwobyte();
    spisendcommand(0x8288);            //;电源管理
    while(1)
    {
        spisendcommand(0xca83);        //;FIFO COMMAND
        while(1)
        {
            sdi=0;
            nsel=0;
          
            init();     
            l4=1;
            l1=0,l2=1,l3=1;
            P0=table[0];
            while(1)                                                   
            {
                anjian();                                                                           
            }            
            if(sdo)
            {
                fiforxframe();
                if(!revframe)    break;
                revframe=0;
                send(rxdata[2]);
                break;
            }
            if(flag)
            {
                ES=0;
                txregframe(); //发送一帧数据
                flag=0;
                RI=0;           
                ES=1;
                break;
            }
        }
    }
}

void serial() interrupt 4     //串口中断
{
    if(RI)
    {
      txdata[4]=SBUF;
      flag=1;
      RI=0;
    }
}

void ia442xinit()                    //;ia442x初始化
{
    spisendcommand(0x80dd);        //;配置命令,fd-915M,dd-433M
    spisendcommand(0x820c);        //;电源管理
    spisendcommand(0xa080);        //;频率设置
    spisendcommand(0xc623);        //;波特率设置
    spisendcommand(0x9483);        //;接收控制
    spisendcommand(0xc2ec);        //;数据滤波
    spisendcommand(0xca81);        //;FIFO COMMAND
    spisendcommand(0xc4e7);        //;AFC COMMAND
    spisendcommand(0x9840);        //;TXCTRL
    spisendcommand(0xffff);        //;WAKEUP
    spisendcommand(0xc80e);        //;间歇工作
    spisendcommand(0xc060);        //;时钟输出
}

void fiforxframe()                //;ia442x接收一帧数据
{
    unsigned char i,n;
    spirevbyte();
    spirevbyte();
    rxdata[0]=spirevbyte();
    nsel=1;
    if(rxdata[0]==0xfa)
    {
        sdi=0;
        nsel=0;
        while(!sdo);
        spirevbyte();
        spirevbyte();
        rxdata[1]=spirevbyte();
        nsel=1;
        n=rxdata[1]&0x0f;
        for(i=0;i<n;i++)
        {
            sdi=0;
            nsel=0;
            while(!sdo);
            spirevbyte();
            spirevbyte();
            rxdata[i+2]=spirevbyte();
            nsel=1;
        }
        revframe=1;
    }
    spisendcommand(0xca81);   
}

void txregframe()                    //;ia442x发送一帧数据
{
    unsigned char i,n;
    unsigned int u;
    spisendcommand(0x8228);
    n=txdata[3]+4;
    for(i=0;i<n;i++)
    {
        nsel=0;
        while(!sdo);
        u=0xb8;
        u<<=8;
        u+=txdata[i];
        spisendcommand(u);
    }
        nsel=0;
        while(!sdo);
        spisendcommand(0xb8aa);
        nsel=0;
        while(!sdo);
        spisendcommand(0x8288);
        spirevtwobyte();
}

void spisendcommand(unsigned int x)    //;写指令
{
    unsigned char comdata1,comdata2;
    unsigned int a;
    a=x;
    nsel=0;
    comdata2=a;
    comdata1=a>>8;
    spisendbyte(comdata1);
    spisendbyte(comdata2);
    nsel=1;
}

void spisendbyte(unsigned char x)    //;写8位数据
{
    unsigned char i,bytedata;
    display();
    x=P0;
    bytedata=x;
    for(i=0;i<8;i++)
    {
        sck=0;
        sdi=bytedata&0x80;
        bytedata=bytedata<<1;
        sck=1;
    }
    sck=0;
    sdi=0;
}

unsigned int spirevtwobyte()            //;读状态
{
    unsigned int u;
    nsel=0;
    u=spirevbyte();
    u<<=8;
    u+=spirevbyte();
    nsel=1;
    return(u);
}

unsigned char spirevbyte()                //;读8位数据
{
    unsigned char i,bytedata;
    sdi=0;
    sck=0;
    bytedata=0;
    for(i=0;i<8;i++)
    {
        sck=1;
        bytedata=bytedata<<1;
        if(sdo)    bytedata+=1;
        sck=0;
    }
    return(bytedata);
}

void delayms(unsigned int n)     //延时
{
    unsigned int i,j;
    for(j=0;j<n;j++)
    {
        for(i=0;i<112;i++)    ;
    }
}
搜索更多相关主题的帖子: 单片机 C语言 
2011-09-13 09:58
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:5 
没有任何硬件说明,程序不好解释。从程序名称来看,是关于SPI总线的,你去查关于单片机实现软件SPI的方法。也有自带SPI总线的单片机。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-13 20:37
q673604934
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-13
收藏
得分:0 
不好意思啊  我是新手,我用的是AT89S52单片机和IA4421无线模块实现无线双向通信并实现数码显示
 就有1处错误


[ 本帖最后由 q673604934 于 2011-9-14 09:18 编辑 ]
2011-09-14 08:31
lyh320218
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2012-1-31
收藏
得分:0 
错误信息是怎么样的呀?
2012-01-31 10:08
快速回复:求大虾们给看看这个单片机C语言的程序 错在哪了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034660 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved