//*********************************************************
/* 文件名: 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();
}
}
辉芒微串口收发波特率设置
于 2024-01-26 17:49:46 首次发布