- 打卡等级:初来乍到
- 打卡总天数:4
- 最近打卡:2024-12-02 16:32:35
注册会员
- 积分
- 111
|
发表于 2024-11-27 21:59:17
|
显示全部楼层
void PrintString4(u8 *puts)
{
for (; *puts != 0; puts++) //遇到停止符0结束
{
S4BUF = *puts;
B_TX4_Busy = 1;
while(B_TX4_Busy);
}
}
//========================================================================
// 函数: SetTimer2Baudraye(u32 dat)
// 描述: 设置Timer2做波特率发生器。
// 参数: dat: Timer2的重装值.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 备注:
//========================================================================
void SetTimer2Baudraye(u32 dat) // 使用Timer2做波特率.
{
T2R = 0; //Timer stop
T2_CT = 0; //Timer2 set As Timer
T2x12 = 1; //Timer2 set as 1T mode
T2H = (u8)(dat / 256);
T2L = (u8)(dat % 256);
ET2 = 0; //禁止中断
T2R = 1; //Timer run enable
}
//========================================================================
// 函数: void UART4_config(u8 brt)
// 描述: UART4初始化函数。
// 参数: brt: 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer4做波特率.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 备注:
//========================================================================
void UART4_config(u8 brt) // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer4做波特率.
{
if(brt == 2)
{
SetTimer2Baudraye(Baudrate4);
S4CON = 0x10; //8位数据, 使用Timer2做波特率发生器, 允许接收
}
else
{
T4R = 0; //Timer stop
S4CON = 0x50; //8位数据, 使用Timer4做波特率发生器, 允许接收
T4H = (u8)(Baudrate4 / 256);
T4L = (u8)(Baudrate4 % 256);
T4_CT = 0; //Timer3 set As Timer
T4x12 = 1; //Timer3 set as 1T mode
T4R = 1; //Timer run enable
ET4 = 1; //使能定时器中断
}
ES4 = 1; //允许UART4中断
S4_S = 1; //UART4 switch bit2 to: 0: P0.2 P0.3, 1: P5.2 P5.3
B_TX4_Busy = 0;
TX4_Cnt = 0;
RX4_Cnt = 0;
}
void Uart_Start(void)
{
T4L=(u8)(Baudrate4 % 256);
T4H= (u8)(Baudrate4 / 256);
T4R=1;
}
void Uart_Stop(void)
{
T4R=0;
T4L=(u8)(Baudrate4 % 256);
T4H= (u8)(Baudrate4 / 256);
RX4_Cnt=0;
memset(RX4_Buffer,0x00,sizeof RX4_Buffer);
}
//========================================================================
// 函数: void UART4_int (void) interrupt UART4_VECTOR
// 描述: UART4中断函数。
// 参数: nine.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 备注:
//========================================================================
void UART4_int (void) interrupt 18
{
if(S4RI)
{
S4RI = 0; //Clear Rx flag
Uart_Start();
RX4_Buffer[RX4_Cnt] = S4BUF;
if(++RX4_Cnt >= UART4_BUF_LENGTH) RX4_Cnt = 0;
}
if(S4TI)
{
S4TI = 0; //Clear Tx flag
B_TX4_Busy = 0;
}
}
void TM4_Isr() interrupt 20
{
Uart_Stop();
}
hello 按照中断接收你的方式改了一下,读取还是不行,读不到了 |
|