测试Ai8051芯片串口 按键控制只能发送一次
8 小时前 来自 天宁宁 发布 @ 串行口,DMA支持的4组串口,RS232,RS485,Modbus, CRC16
113097
手上有USB转串口通讯线,还有一块圈圈的51板,上面有232接口
还有8个指示灯,八个按键,于是用八个按键来分别发送8个数据,
同时送P2口显示,烧录好程序调试,发现只能一次按键有效。
第一次按其中一个按键,会发送对应的数据,P2口指示灯也点亮,
第二次就没有反应了。
程序是根据官方例程修改的.串口发送不是就检测发送结束标志TI么,
然后TI=0.
void PrintString1(u8 SSF)
{
SBUF=SSF;
while(TI!=1);
TI=0;
}
/*******************************************/
#include "..\..\comm\AI8051U.h"
#include "stdio.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 11059200L //定义主时钟(精确计算115200波特率)
//==========================================================================
#define Baudrate1 (65536-MAIN_Fosc/9600/4)
#define UART1_BUF_LENGTH 128
u8 TX1_Cnt; //发送计数
u8 RX1_Cnt; //接收计数
bit B_TX1_Busy; //发送忙标志
u8 RX1_Buffer; //接收缓冲
/************* 本地函数声明 **************/
void UART1_config(u8 brt); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
/**************** 外部函数声明和外部变量声明 *****************/
sbit OutPut0=P2^0; //
sbit OutPut1=P2^1; //
sbit OutPut2=P2^2; //
sbit OutPut3=P2^3; //
sbit InttPut0=P1^0; //
sbit InttPut1=P1^1; //
sbit InttPut2=P1^2; //
sbit InttPut3=P1^3; //
sbit InttPut4=P1^4; //
sbit InttPut5=P1^5; //
sbit InttPut6=P1^6; //
sbit InttPut7=P1^7; //
u8 kcounter,kstatus; //按键计数标志 按键状态标志
/****************按键计数器状态寄存器归零*************/
void RstKey()
{
kcounter=0; //按键计数器归零
kstatus=0; //状态寄存器归零
}
/*****************按键低电平检测函数*****************/
void LowVoltKey(void) //按键计数器状态标志加一
{
kcounter++;
kstatus++;
_nop_(); //延时
}
/*****************按键高电平检测函数*****************/
void HighVoltKey(void) //按键计数器加一 状态标志归零
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
_nop_(); //延时
}
/*****************延时*****************/
void Delay100ms(u16 x) //
{
u16 i,j;
for(i=0;i<x;i++)
for(j=0;j<11000;j++);
}
//========================================================================
// 函数: void PrintString1(u8 *puts)
// 描述: 串口1发送字符串函数。
// 参数: SSF
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 备注:
//========================================================================
void PrintString1(u8 SSF)
{
SBUF=SSF;
while(TI!=1);
TI=0;
}
//========================================================================
// 函数: SetTimer2Baudraye(u32 dat)
// 描述: 设置Timer2做波特率发生器。
// 参数: dat: Timer2的重装值.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-11-28
// 备注:
//====
免责声明:
本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;
上一篇: EHS立宏—EHS设备设施安全管理系统,LHS智能安全管理系统,EHS管理风险评估系统
下一篇: 暂无下一篇