关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙
本人刚开始用PIC,要通过
30F6011往30F2020里面送数据,现在先通过6011往2020里面送一个数据,再把这个数据送给2020的占空比寄存器,改变2020
PWM2的占空比。但总是传输的数据不稳定,传送同样的一个数据每次占空比都不一样,检查了好几天,都查不出原因,实在没有办法了,请各位帮忙看一下,感激不尽。下面分别是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(SPI2STAT
bits.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
此帖出自
小平头技术问答
一周热门 更多>