⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sci_test.c

📁 用c语言编写实现的基于2407的串口扩展和收发数据程序
💻 C
字号:

#include "main.h"
#include "LF2407regs.h"

volatile unsigned char sci_buf[2]={'b','g'};
volatile unsigned char rec_flag;
volatile unsigned char sent_flag = 0;

volatile unsigned char temp;
void sys_init(void)                        /*系统初始化*/
{ 
  asm(" clrc SXM");                         //抑制符号扩展
  asm(" clrc OVM");                         //溢出正常
  asm(" clrc CNF");                         //B0映射到数据空间
  asm(" setc XF");                          //禁止ROM引导

  *WDCR=0x00E8;             /*禁止看门狗*/
  
  *SCSR1 = 0x814E;          /*SCI时钟使能*/  /*设置PLL时钟  40MHZ*/

  // set_wait();               //设置等待状态产生器
 
  *MCRA = 0X00003;
  *MCRB = 0X0FF00;
  *MCRC = 0X00000;

  *IMR=0x00000;              /*允许优先级中断1*/
  *IFR=0x0ffff;             /*中断标志寄存器清0*/
}

#define MS_TIME_LOOP   0x500
void wait_ms( volatile unsigned int delay_val )       /*延时函数wait_ms()*/  
{
    unsigned int i;
    int ms_ctr;
    for ( i = 0; i < delay_val; i++ )
    {
	ms_ctr = MS_TIME_LOOP;

	while ( ms_ctr )
	{
	    ms_ctr--;
	}
    }

    return;
}
void c554a_init(void)					/*TL16C554A初始化*/
{
	volatile unsigned int  *temp_d;
	temp_d=(volatile unsigned int*)PFDATDIR;
	*temp_d |=(B14_MSK|B6_MSK);			/*IOPF6输出高电平,复位TL16C554A*/
	wait_ms(10);
	*temp_d &=(~B6_MSK);

        /*初始化TL16C554A寄存器*/
	temp=0x80;					/*使能波特率因子寄存器访问*/
	OUTMAC((_BASE_ADD_A+3h),temp);
	OUTMAC((_BASE_ADD_B+3h),temp);
	OUTMAC((_BASE_ADD_C+3h),temp);
	OUTMAC((_BASE_ADD_D+3h),temp);
	temp=0x06;					/*设置波特率为19200*/
	OUTMAC(_BASE_ADD_A,temp);
	OUTMAC(_BASE_ADD_B,temp);
	OUTMAC(_BASE_ADD_C,temp);
	OUTMAC(_BASE_ADD_D,temp);
	temp=0x00;				
	OUTMAC((_BASE_ADD_A+1h),temp);
	OUTMAC((_BASE_ADD_B+1h),temp);
	OUTMAC((_BASE_ADD_C+1h),temp);
	OUTMAC((_BASE_ADD_D+1h),temp);
	temp=0x03;					/*8位数据位,1位停止位,无奇偶校验,禁止波特率因子寄存器访问*/	
	OUTMAC((_BASE_ADD_A+3h),temp);
	OUTMAC((_BASE_ADD_B+3h),temp);
	OUTMAC((_BASE_ADD_C+3h),temp);
	OUTMAC((_BASE_ADD_D+3h),temp);				
	temp=0x07;					/*使能FIFO,1个字符触发接收中断*/	
	OUTMAC((_BASE_ADD_A+2h),temp);
	OUTMAC((_BASE_ADD_B+2h),temp);
	OUTMAC((_BASE_ADD_C+2h),temp);
	OUTMAC((_BASE_ADD_D+2h),temp);				
	temp=0x01;					/*使能接收中断*/	
	OUTMAC((_BASE_ADD_A+1h),temp);
	OUTMAC((_BASE_ADD_B+1h),temp);
	OUTMAC((_BASE_ADD_C+1h),temp);
	OUTMAC((_BASE_ADD_D+1h),temp);
				
	INMAC(_BASE_ADD_A,temp);			/*将串口干扰读走*/
	INMAC(_BASE_ADD_B,temp);
	INMAC(_BASE_ADD_C,temp);
	INMAC(_BASE_ADD_D,temp);					
	
}


void c554a_a_sent(unsigned char data)			/*A模块数据发送*/
{
	temp=data;
	OUTMAC(_BASE_ADD_A,temp);
}


void c554a_b_sent(unsigned int data)			/*B模块数据发送*/
{
	temp=data;
	OUTMAC(_BASE_ADD_B,temp);
}


void c554a_c_sent(unsigned int data)			/*C模块数据发送*/
{
	temp=data;
	OUTMAC(_BASE_ADD_C,temp);
}

void c554a_d_sent(unsigned int data)			/*D模块数据发送*/
{
	temp=data;
	OUTMAC(_BASE_ADD_D,temp);
}


void c554a_a_rec()					/*A模块数据的接收处理*/
{
 volatile unsigned int ad;	
 INMAC(_BASE_ADD_A,temp);
 ad=temp;
 c554a_a_sent(ad);							
}



void c554a_b_rec()					/*B模块数据的接收处理*/
{
 volatile unsigned int bd;	
 INMAC(_BASE_ADD_B,temp);
 bd=temp;
 c554a_b_sent(bd);							
}

void c554a_c_rec()					/*C模块数据的接收处理*/
{
 volatile unsigned int cd;	
 INMAC(_BASE_ADD_C,temp);
 cd=temp;
 c554a_c_sent(cd);							
}



void c554a_d_rec()					/*D模块数据的接收处理*/
{
 volatile unsigned int dd;	
 INMAC(_BASE_ADD_D,temp);
 dd=temp;
 c554a_b_sent(dd);							
}

void sci_init(void)                        /*SCI初始化*/
{
	*SCICTRL1 =0x0000;             //复位SCI  禁止接收错误中断 没有选定发送特征 禁止休眠 禁止发送 禁止接收
	*SCICCR   =0x0007;             //设置1个停止位,不使能奇偶检验,空闲线多处理器模式,8位字符  
	*SCICTRL2 =0x00C0;             //禁止RXRDY/TXRDY

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -