关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙

2019-03-25 19:26发布

关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙

本人刚开始用PIC,要通过30F6011往30F2020里面送数据,现在先通过6011往2020里面送一个数据,再把这个数据送给2020的占空比寄存器,改变2020PWM2的占空比。但总是传输的数据不稳定,传送同样的一个数据每次占空比都不一样,检查了好几天,都查不出原因,实在没有办法了,请各位帮忙看一下,感激不尽。下面分别是6011的程序和2020的程序
6011的程序:
#include"p30f6011A.h"
_FOSC(0x0c302);                  //HS晶振,Failsafe 时钟关闭
_FWDT(WDT_OFF);                  //关闭看门狗定时器
_FBORPOR(PBOR_OFF & MCLR_EN);    //掉电复位禁止,MCLR复位使能。
_FGS(CODE_PROT_OFF);             //代码保护禁止

void initspi();
void spi();
void main()
{
    initspi();
    SPI2BUF=0x8800;
    while(SPI2STATbits.SPITBF==1);
    IFS1bits.SPI2IF=0;
    SPI2STATbits.SPIROV=0;
   
   
}

void initspi()
{
SPI2CON=0x047b;
SPI2STATbits.SPIROV=0;
SPI2STATbits.SPIEN=1;  
}



2020的程序:
.global __reset;
.global __SPI1Interrupt;
.include "p30f2020.inc"
__reset:                    ;软件器件复位
    nop

;PWM2
   mov   #0x0001, w1     ;PWM2控制寄存器设置  0X0411;  
   mov   w1, PWMCON2
   mov   #0xc800, w1   ;PWM2引脚设置0xc800
   mov   w1, IOCON2  
   mov   #2000, w1      ;定义死区时间
   mov   w1, DTR2
   mov   w1, ALTDTR2
   mov   #0, w1
   mov   w1, PHASE2
     
   mov   #24000, w1   ;PWM2周期设置
   mov   w1, PTPER              

   mov   #0x8000, w1         ;PWM控制寄存器
   mov   w1, PTCON                 
   clr   LATE
   mov   #0XFF00, w1
   mov   w1, TRISE
   mov   #20000,w0
   mov   w0,PDC2
   
   

;spi
  clr SPI1BUF
  bclr IFS0,#SPI1IF
  bset IEC0,#SPI1IE
    mov  #0x0007,w1
    mov  w1,IPC2
  mov  #0x0c59,w0      
  mov  w0,SPI1CON1     ;从模式,
  bclr SPI1STAT,#SPIROV
  bset SPI1STAT,#SPIEN
  
  loop:
    nop  
bra    End_Loop
End_Loop:
  bra    loop
      
/*****SPI Interrupt Service Routine*********/
__SPI1Interrupt:
disi #7
push.s
bclr IFS0 #SPI1IF,
bclr SPI1STAT, #SPIROV
mov SPI1BUF, w0
nop
mov w0,PDC2
bset IEC0,#SPI1IE
nop
pop.s
retfie 此帖出自小平头技术问答
0条回答

一周热门 更多>