智能车制作
标题:
XS128的SCI程序怎么和CAN程序融合起来???
[打印本页]
作者:
易寒
时间:
2014-3-25 19:25
标题:
XS128的SCI程序怎么和CAN程序融合起来???
各位大神,这确实是个很基本的问题,但真的不会,刚刚接触这个玩意,希望串口发送一个数据后,通过CAN口传输到另外一个板子的显示屏上显示,(两块板子间的通信)。希望有具体点操作。
作者:
易寒
时间:
2014-3-25 19:26
#include "derivative.h"
#include "LQprintp.h"
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 20 SCI0_ISR(void) // 中断程序
{
SCI0CR2_RIE=0;
//此处为串口中断需要处理的事情
uart_putchar(uart_getkey());
PORTB_PB2=~PORTB_PB2;
SCI0CR2_RIE = 1; //接收器完全中断使能位,等于1时,可以产生中断
}
//-----------------------------------------------------
void setbusclock(void)
{
CLKSEL=0X00; // disengage PLL to system
PLLCTL_PLLON=1; // turn on PLL(PLL通过REFDV(CRG参考分频寄存器? 和SYNR(CRG合成寄存器)来设置)
SYNR=0x40 | 0x09; // VCOFRQ[7:6];SYNDIV[5:0]
// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)
// fPLL= fVCO/(2 × POSTDIV)
// fBUS= fPLL/2
// VCOCLK Frequency Ranges VCOFRQ[7:6]
// 32MHz <= fVCO <= 48MHz 00
// 48MHz < fVCO <= 80MHz 01
// Reserved 10
// 80MHz < fVCO <= 120MHz 11
REFDV=0x40 | 0x00; // REFFRQ[7:6];REFDIV[5:0]
// fREF=fOSC/(REFDIV + 1)
// REFCLK Frequency Ranges REFFRQ[7:6]
// 1MHz <= fREF <= 2MHz 00
// 2MHz < fREF <= 6MHz 01
// 6MHz < fREF <= 12MHz 10
// fREF > 12MHz 11
// pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV)
// If POSTDIV = $00 then fPLL is identical to fVCO (divide by one).
_asm(nop); // BUS CLOCK=16M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;(时钟校正同步)
CLKSEL_PLLSEL =1; //engage PLL to system;
}
//-----------------------------------------------------
static void SCI_Init(void)
{
SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enable
SCI0BDH=0x01; //出口波特率为9600
SCI0BDL=0x04; //SCI0BDL=busclk/(16*SCI0BDL)
//busclk 8MHz, 9600bps,SCI0BDL=0x34(3*16+4=52) 8*1000000/(16*52)=9600
//busclk 16MHz, 9600bps,SCI0BDL=0x68
//busclk 24MHz, 9600bps,SCI0BDL=0x9C
} //busclk 32MHz, 9600bps,SCI0BDL=0xD0
//-----------------------------------------------------
void Dly_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<2670;jj++); //busclk:16MHz--1ms主要是为了延时1ms
}
void main(void){
byte LedCnt=0;
setbusclock();
SCI_Init();
DDRB=0xFF;
PUCR_PUPBE=1; // 使能B端口上拉电阻
EnableInterrupts;
for(;;)
{
LedCnt=(LedCnt>0XFE?0:++LedCnt);
Dly_ms(1000); //修改延时以修改数据发送频率
//低电平灯亮用这句,注释掉下面那句
PORTB=~LedCnt;
//高电平灯亮用这句,注释掉上面那句
//PORTB=LedCnt;
putstr("\n http:/ /shop36265907.taobao.com");
printp("\n Minute elapsed: %03ds",LedCnt);
}
}这个是SCI部分
作者:
易寒
时间:
2014-3-26 09:08
有么有大神飘过的 啊??
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2