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

📄 sci.c

📁 2407例程.rar
💻 C
字号:
#include 	"register.h"
//禁止总中断子程序       
void  inline  disable() 
{
   asm(" setc INTM");
   asm(" setc SXM");
}
//使能总中断子程序
void 	inline 	enable() 
{
   asm(" clrc INTM");
}
main( ) 
{
   disable();      		    	//禁止所有中断 
   *IFR=0xFFFF;			// 清除中断标志   
   *SCSR1=0x82FF;         	        //CLKIN=6M,CLKOUT=24M
   *WDCR=0xE8;           		        //不使能看门狗
   *SCICCR=0x17;           		//1个停止位,不使能奇偶校验,空闲线多处理器模式,8位字符
   *SCICTL1=0x13;         	        //#0013H 使能接收和发送,SLEEP=0 禁止休眠
                                        //方式 , 禁止接收错误中断,TXWAKE=0 即没有选定的发送特征
   *SCICTL2=0x3;         	        //使能接收和发送中断                     
   *SCIHBAUD=0X1;                                                                  
   *SCILBAUD=0Xa0;        	        //波特率=9600B/S                         
   *SCICTL1=0x33;          	        //使SCI脱离复位状态                      
   *SCIPRI=0x60;         	        //SCI中断(接收和发送中断)为低优先级中断  
   *MCRA=0x3;
   *PADATDIR=0x100;                                        	
   *IMR=0x10;		        //使能UART中断-INT5      	
   enable();			    	//使能总中断 	
   *SCITXBUF='';                                          	
   while(1);                                               	
}
void   UartSent( )          	        //发送服务程序
{
    const  char*  var="F2407 Uart is fine!";//定义一段需要发送的字符串                                	
    static  int  i=0;                 	                                                                        
    if(i>strlen(var))  return;           //如果需要发送的字符都已经发送完,则中断直接返回                     
    *SCITXBUF=var[i++];	                //依次发送定义的字符串中的各个字符                                           
    *IFR=0x0010;			//清除IFR中相应的中断标志                                    
    enable();		                //开总中断,因为一进入中断服务程序总中断就自动关闭了         
}   
void   UartRec()          		//接收服务程序
{                        
    static  int  receive[10],j=0;    
    receive[j++] = *SCIRXBUF;              //依次接收字符 
    if(j>9) j = 0;                   
   //IFR= 0x0010;		     /清除IFR中相应的中断标志 
    enable();			//开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void  interrupt  uarttr( )    		//中断服务程序
{
    switch (*PIVR)			//根据中断向量寄存器PVIR的值区别是接收还是发送中断
    {
      case 6: UartRec( );	                //如果PIVR=6,则发生了接收中断,执行接收服务程序
      case 7: UartSent( );	//如果PIVR=7,则发生了发送中断,执行发送服务程序
    }
}
//当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
void  interrupt  nothing() 
{
    return;
}

⌨️ 快捷键说明

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