注册会员
- 积分
- 40
- 威望
- 24
- 贡献
- 12
- 兑换币
- 11
- 注册时间
- 2017-2-20
- 在线时间
- 2 小时
- 毕业学校
- 哈尔滨工业大学
|
小弟新手,在运行sci程序时,SCI1DRL寄存器的值一直是0,电脑接收到数据不对。为这个问题困惑好久了,已经试了n个网上例程了 ,下面是我现在正在测试的一很简单的程序,还是不行#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include<mc9s12xs128.h>
#define RD PTS_PTS7
#define RD_dir DDRS_DDRS7
#define BUS_CLOCK 32000000 //总线频率
#define OSC_CLOCK 16000000 //晶振频率
#define BAUD 9600 //串口波特率
unsigned char k;
unsigned char dat_send[8]={'F','R','E','E','F','L','Y','\r'};
void INIT_PLL(void)
{
CRGINT = 0; //关中断
CLKSEL_PLLSEL = 0; //在未初始化PLL前不使用PLL的输出作为CPU时钟
#if(BUS_CLOCK == 40000000)
SYNR = 4;
#elif(BUS_CLOCK == 32000000)
SYNR = 3;
#elif(BUS_CLOCK == 24000000)
SYNR = 2;
#endif
REFDV = 1; //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
PLLCTL_PLLON = 1; //开PLL
while (CRGFLG_LOCK == 0); //等待PLL锁定频率
CLKSEL_PLLSEL = 1; //选择系统时钟由PLL产生
}
void INIT_SCI1(void)
{
SCI1BD = BUS_CLOCK/16/BAUD; //设置SCI1波特率为9600
SCI1CR1 = 0x00; //设置SCI1为正常模式,八位数据位,无奇偶校验
SCI1CR2 = 0x0c; //允许接收和发送数据,允许接收中断功能
}
void INIT_485(void)
{
RD_dir=1;
RD=0; //用的隔离485芯片,控制引脚为0时,发送状态
}
void delay1ms(long n)
{
long i,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
}
}
}
void main(void) {
DisableInterrupts;
INIT_PLL();
INIT_SCI1();
INIT_485();
EnableInterrupts;
for(;;)
{
delay1ms(1000);
for(k=0;k<8;k++)
SCI1_send(dat_send[k]);
_FEED_COP();
}
}
|
|