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

📄 uart.c

📁 TMS320LF2407 urt.rar
💻 C
字号:
/*	|			Description                        */
/*-------------------------------------------------------------------------*/
/*This is  The Tms320lf2407A  C source Program including  SCI   OCTO. 20, 2004	| Created  by liyp
  Copyright 2004--  liyp ltd cmp. All rights reserved.
/*-------------------------------------------------------------------------*/

#include "lf2407regs.h"//系统头文件
#include 	"stdlib.h" 
unsigned char a,receive[2],i,j;
unsigned char lcd_data[64];
int pData[4];
#define MS_TIME_LOOP   0x0385
void initsys()//ok
{ 
  asm(" setc SXM ");
  asm(" clrc OVM ");
  asm(" CLRC CNF ");
  asm(" setc INTM ");
  *SCSR1=0x83FE;          //设定系统工作频率
  *WDCR =0x0e8;
  *IMR  =0x0010;		//使能中断INT5
  *IFR  =0xffff;
 // *MCRA =0x33;
 	*MCRA=0x0003;             /*IOPA2~7,IOPB配置为一般I/O功能*/  
	*PADATDIR=0x0F700;/*IOPA3配置为输入方式,其余配置为输出方式.*/
	*PBDATDIR=0x0FFFF;/*IOPB配置为输出方式*/
 }  

void inline disable(){
asm(" setc INTM ");
}

void inline enable(){
asm(" clrc INTM ");
}

void interrupt nothing()
{
 return;
}
/*延时子程序*/ 
void Delay(int count)
{   
	int ii;
	int jj;
  for (ii=0;ii<=50;ii++) 
  {    
  jj=count;
  while(jj > 0) 
  jj--; 
  }
}
/*发送数据子程序*/
void SendData()
{

	Delay(50);/*等待数据稳定*//*本句必须有*/ 
	*PADATDIR=(*PADATDIR | 0x0010);/*发送请求*/
	loop:
		/*检测BUSY位是否为1,即数据是否处理完*/
  	if(!(*PADATDIR & 0x0008))
	goto loop;
        *PADATDIR=(*PADATDIR & 0x0FFEF);/*撤消请求*/
	Delay(50);/*等待模块内部处理完成*/
/*本句也必须有,否则虽然能够正常显示汉字,但会不时的有闪烁*/

	
}
/*液晶复位清屏子程序*/	
void ResetLCD(void) 
{   
	*PBDATDIR=0x0FFF4;
	SendData(); /*以上两句为清屏,向数据口送清屏指令#F4H*/
}  

/*汉字显示*/
void hanzi(int comd,int x,int y,int QQ,int WW)
{
	
	pData[0]=comd;
	pData[1]=x;
	pData[2]=y;
	pData[3]=(QQ-0x0A0)|0x0FF00;
	pData[4]=(WW-0x0A0)|0x0FF00;
for(i=0;i<=4;i++)
	{ 
		*PBDATDIR=pData[i];
		SendData();
	/*	Delay(10); /*必须延时,才能正常显示*/
	}
}  

//固定界面显示
void hanzi1()
{
	int comd;int adres_x;int adres_y;unsigned char_qu;unsigned char_wei;
	unsigned i;
	unsigned j;
	unsigned m;

	strcpy(lcd_data,"    闻亭科技      串口调试实验                    汉字显示      ");
	comd=0x0fff0;
	for(i=0;i<4;i++)
	{	for(j=2;j<10;j++)
		{	adres_x=j;
			adres_y=i;
			char_qu=lcd_data[i*16+(j-2)*2]-0x0a0;
			char_wei=lcd_data[i*16+(j-2)*2+1]-0x0a0;
	
			pData[0]=comd;
			pData[1]=adres_x|0x0ff00;
			pData[2]=adres_y|0x0ff00;
			pData[3]=char_qu|0x0ff00;
			pData[4]=char_wei|0x0ff00;
			for(m=0;m<5;m++)
		    {*PBDATDIR=pData[m];SendData();}
		 }
		 
	}
		    
}


 unsigned int wait_ms( volatile unsigned int delay_val )
{
    unsigned int i;
    unsigned int ms_ctr;
    for ( i = 0; i < delay_val; i++ )
    {
	ms_ctr = MS_TIME_LOOP;

	while ( ms_ctr )
	{
	    ms_ctr--;
	}
    }

    return( delay_val );
}
void uartrec() //232口接收子程序
 {
   if(a>2) a=0;
   receive[a++]=*SCIRXBUF;
   *IFR=0X0010;
   enable();
 } 
 
 void uartsent(unsigned char sci_dat) //232口发送程序
 {
  unsigned int var[7];
  *SCITXBUF=sci_dat;
  *IFR=0x0010;
  enable();
  }
  void sciinit()     //232初始化,波特率为9600kb/s,8个数据位,1停止位,无校验
 {
  *SCICCR=0x07;
  *SCICTL1=0x13;
  *SCICTL2=0x3;
  *SCIHBAUD=0x01;
  *SCILBAUD=0x85; //THE SYSTEM BAUD IS 30MHZ, COMMUNICATION BAUD IS 9600KBIT/S
  *SCICTL1=0x33;  
  *SCIPRI=0x60;
  *MCRA=0x3;
  *PADATDIR=0X0f700; 
  *IMR=0x10;
  enable();
 } 
 
 
void main()
{  
  int a1,a2;
   disable(); 
   initsys();
   sciinit();
   enable();
   ResetLCD();//清屏
   ResetLCD();
   ResetLCD();
   Delay(100);
   
   hanzi1();
   Delay(100);
  
do{
   
  	a1=receive[0];
	a2=receive[1];

//  Delay(50);
  hanzi(0x0FFF0,0x0FF08,0X0FF03,a1,a2);//汉字显示
//  Delay(50);

   for(i=0;i<9;i++)  //延时50ms,发送0到9
   {
  uartsent(i);
   wait_ms(1000);
   }

 	
     } while(1);
 }

void interrupt uart() //232接收中断
{
  switch (*PIVR)
   {
   case 6:uartrec();
 
   default:break;
    }
}

⌨️ 快捷键说明

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