辉芒微串口收发波特率设置

本文详细描述了FT61F145TSSOP-20芯片的UART功能,包括上电发送10个字符并接收数据的过程,以及相关的中断处理、系统初始化和主函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//********************************************************* 
/* 文件名: TEST_61F14x_UART.c
* 功能:  FT61F14x-UART功能演示
* IC:     FT61F145 TSSOP-20
* 内部:  16M/2T                             
* 说明:  串口上电发送10个字符,然后等待接收10个字节数据(通过串口助手发送接收)
*		   
*                FT61F145  TSSOP-20 
*              ---------------------
* NC----------|1(PA5)   	(PA4)20|-----------NC     
* TXIO--------|2(PA6)   	(PA3)19|-----------NC
* RXIO--------|3(PA7)   	(PA2)18|-----------NC
* NC----------|4(PC0)   	(PA1)17|-----------NC
* NC----------|5(PC1)		(PA0)16|-----------NC	
* NC----------|6(PB7)		(PB0)15|-----------NC
* GND---------|7(GND)		(PB1)14|-----------NC
* NC----------|8(PB6)	    (PB2)13|-----------NC
* VDD-------- |9(VDD)	    (PB3)12|-----------NC
* NC----------|10(PB5)      (PB4)11|-----------NC
*			   ----------------------
*/
 //*********************************************************
#include "SYSCFG.h"
//***********************宏定义****************************
#define  unchar     unsigned char 

volatile  unchar	receivedata[10] = 0;
volatile  unchar	senddata = 0;

volatile  unchar    toSend[11]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa};
unchar    i=0;
unchar    mmm=0;
/*-------------------------------------------------
* 函数名:interrupt ISR
* 功能: 中断处理
* 输入:  无
* 输出:  无
          --------------------------------------------------*/
void interrupt ISR(void)            
{ 
if(URRXNE && RXNEF)       //接收中断         	
{
	receivedata[mmm++] =URDATAL; 
    
    if(mmm>=10)
    {
    	mmm=0;
    } 
    NOP();
} 

//----------------------------
if(TCEN && TCF)          //发送中断
{	
    TCF=1;       //写1清0
    
	if(i<10)
    {
		URDATAL =toSend[i++];
    }
    else
    {
      i=0;
    }
	NOP();
 }
 }  

//
/*-------------------------------------------------
* 函数名:POWER_INITIAL
* 功能:  上电系统初始化
* 输入:  无
* 输出:  无
--------------------------------------------------*/	
void POWER_INITIAL (void) 
{
OSCCON = 0B01110001;	//16MHz 1:1
INTCON = 0;  			//暂禁止所有中断

PORTA = 0B00000000;		
TRISA = 0B00000100;		//PA输入输出 0-输出 1-输入 PA6-输出 PA7-输入
PORTB = 0B00000000;		
TRISB = 0B00000000;		//PB输入输出 0-输出 1-输入							
PORTC = 0B00000000; 	
TRISC = 0B00000000;		//PC输入输出 0-输出 1-输入  	

WPUA = 0B00000000;     	//PA端口上拉控制 1-开上拉 0-关上拉
WPUB = 0B00000000;     	//PB端口上拉控制 1-开上拉 0-关上拉
WPUC = 0B00000000;     	//PC端口上拉控制 1-开上拉 0-关上拉

WPDA = 0B00000100;     	//PA端口下拉控制 1-开下拉 0-关下拉 PA7上拉
WPDB = 0B00000000;     	//PB端口下拉控制 1-开下拉 0-关下拉
WPDC = 0B00000000;     	//PC端口下拉控制 1-开下拉 0-关下拉

PSRC0  = 0B11111111;  	//PORTA,PORTB源电流设置最大
PSRC1  = 0B11111111;    //PORTC,PORTD源电流设置最大    

PSINK0 = 0B11111111;  	//PORTA灌电流设置最大 0:最小,1:最大
PSINK1 = 0B11111111; 	//PORTB灌电流设置最大 0:最小,1:最大
PSINK2 = 0B11111111;	//PORTC灌电流设置最大 0:最小,1:最大

ANSELA = 0B00000000;    //全为数字管脚
}
/*------------------------------------------------- 
* 函数名称:DelayUs
* 功能:    短延时函数 --16M-2T--大概快1%左右.
* 输入参数:Time延时时间长度 延时时长Time Us
* 返回参数:无 
 -------------------------------------------------*/
void DelayUs(unsigned char Time)
{
unsigned char a;
for(a=0;a<Time;a++)
{
	NOP();
}
}                  
/*-------------------------------------------------
* 函数名称:DelayMs
* 功能:    短延时函数 快1%
* 输入参数:Time延时时间长度 延时时长Time ms
* 返回参数:无 
 -------------------------------------------------*/
void DelayMs(unsigned char Time)
{
unsigned char a,b;
for(a=0;a<Time;a++)
{
	for(b=0;b<5;b++)
	{
	 	DelayUs(197);
	}
}
}

      
           /*-------------------------------------------------
        
                    
                    * 函数名: UART_INITIAL
* 功能:  主函数
* 输入:  无
* 输出:  无
 --------------------------------------------------*/
 void UART_INITIAL(void)
{
PCKEN |=0B00100000;	//打开UART时钟

URIER =0B00100001;  //使能发送接收完成中断
URLCR =0B00000001;  //8位数据,停止位1,无奇偶校验
URMCR =0B00011000;

//AFP1[5:4] USART_TX
//00 = PA6 10 = PA7
//01 = PB7 11 = PA2
//AFP1[5:4] 

//AFP1[3:2] USART_RX
//00 = PA7 10 = PA6
//01 = PA2 11 = PB6                                                                                                                                                                                    
//AFP1[3:2]
//PA2 RX PIN
AFP1 = 0B00000010;    
//16000000
//计算参数 8 实际参数系 9
URDLL =9;         //115200波特率 = Fosc/16*   [URDLH:URDLL]
URDLH =0;
TCF=1;
INTCON=0B11000000;

//TCF: 发送完成标志
//TXEF:1发送寄存器为空
//RXNEF:1按收寄存器非空
}

/*-------------------------------------------------
* 函数名: main 
* 功能:  主函数
* 输入:  无
* 输出:  无
 --------------------------------------------------*/
void main(void)
{
POWER_INITIAL();		//系统初始化
UART_INITIAL();
DelayMs(100);

if(TXEF)                //上电发送10+1个数据
{
  URDATAL =0xaa;        
}

while(1)
{
	NOP();
}		

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值