查看: 3695|回复: 0

[S12] s12xep100一个简单串口程序,无法独立运行!!!

[复制链接]

该用户从未签到

2

主题

25

帖子

0

新手上路

Rank: 1

积分
36
最后登录
1970-1-1
发表于 2011-5-10 23:00:49 | 显示全部楼层 |阅读模式
 程序代码如下,照着网上的程序修改的,用BDM在线调试可以运行,但是电源供电情况下拿掉BDM,程序无法运行,哪位能帮忙解决下,谢谢了。
#include       /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
/****************
         初始化时钟
         ************/
void MCUInit(void){
      asm sei
      SYNR    = 0x0b;    //时钟合成寄存器
      REFDV   = 0x01;    //时钟分频寄存器
// 锁相环产生的时钟频率 f=2*foscclk*(SYNR+1)/(REFDV+1)
                     //对于S12xep100 4MHz外部晶体振荡器,总线时钟为24MHz
                        //片内系统时钟为48MHz
                       
     while((CRGFLG & 0x08) !=0x08); /*等待锁相环频率锁定*/
     CLKSEL |= 0x80;    //时钟选择寄存器
     asm cli
}
/****************
         初始化串口
         ************/
void SCI_Init(void)
{   unsigned char t;
    //定义波特率Bt=9600,SCI6BD=fBUS/(16*Bt)
    SCI6BDL = 0x9c;    //须先给低8位赋值
    SCI6BDH = 0x00;    //再给高8位赋值
    SCI6CR1 = 0x00;    //设置允许SCI,正常码输出,8位数据,无校验
    t = SCI6DRL;       //读数据寄存器(清0)
    t = SCI6SR1;       //读状态寄存器(清0)
    SCI6CR2 = 0x0C;    //允许SCI6接收和发送 查询方式
   }   
 
 
void put_char (char c) {//发送数据是通过判断状态寄存器SCI6SR1的第7位(TDRE)
                   //接收数据是通过判断状态寄存器SCI6SR1的第5位(RDRF)
while((SCI6SR1 & 0X80)==0);//SCI6SR1的loops置0,正常模式,即当SCI6SR1.7=0时,等待
  SCI6DRL=c;// SCI6SR1.7=1时,发送数据将c一字节输入数据缓冲区SCI6DRL(先低后   //高)
  
}
void main(void) {
   char temp;
    MCUInit();           //初始化时钟
    SCI_Init();   //初始化串口
   asm cli
    for(;;) {
    while((SCI6SR1 & 0X20)==0);
    temp=SCI6DRL;
    put_char(temp);
    }
}
 
我知道答案 目前已有0人回答
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-25 06:39 , Processed in 0.079429 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表