你好,我能向你询问一下合泰单片机的问题么?
#include "HT66F2390.h"
#include "ht_sr04.h"
#include "HX711.h"
typedef unsigned long u32;
typedef unsigned short u16;
#define fH 8000000
#define BR 38400 //波特率
#define fH1 8000000
#define BR1 38400
void Delayms(u16 del)
{ u16 i;
for(i=0;i<del;i++) GCC_DELAY(2000);
}
void send_char(char s)//发送一个单字符
{
_txr_rxr0=s;
while(!_txif0);
}
void send_char1(char s)//发送一个单字符
{
_txr_rxr1=s;
while(!_txif1);
}
//发送一个字符串,注意如果发送的是字符数组,末尾必须加上'\0',否则将会出错
void send_buff(char *s)
{
while(*s)
{
send_char(*s);
s++;
}
}
void send_buff1(char *s)
{
while(*s)
{
send_char1(*s);
s++;
}
}
void inituart()
{
/*_wdtc=0b10101111; //关闭看门狗
_pas1=0b11000000; //PA7为TX0功能、PA6为RX0功能
_u0cr1=0b10000000; //使能UART0,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
_u0cr2=0b11100100; //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功 能,使能接收器中断功能,关闭发送器空闲中断,关闭发送器已空中断
_brg0=fH/((u32)16*BR)-1; //配置波特率
_ur0e = 1; //开启中断标志位
_pds0=0b00101000;//PD2为TX1功能、PD1为RX1功能
_u1cr1=0b10000000; //使能UART1,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
_u1cr2=0b11100100; //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功能,使能接收器中断功能,关闭发送器空闲中断,关闭发送器已空中断
_brg1=fH1/((u32)16*BR1)-1; //配置波特率19200
_ur1e = 1; //开启中断标志位
_mf5e=1;
_emi=1;*/
_wdtc=0b10101111; //关闭看门狗
_pas1=0b11000000; //PA7为TX0功能、PA6为RX0功能
_u0cr1=0b10000000; //使能UART0,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
_u0cr2=0b11100100; //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功 能,使能接收器中断功能,关闭发送器空闲中断,关闭发送器已空中断
_brg0=fH/((u32)16*BR)-1; //配置波特率
_ur0e = 1; //开启中断标志位
_mf5e=1;
_emi=1;
}
void inituart2()
{
_wdtc=0b10101111; //关闭看门狗
_pds0=0b00101000;//PD2为TX1功能、PD1为RX1功能
_u1cr1=0b10000000; //使能UART1,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
_u1cr2=0b11100100; //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功能,使能接收器中断功
_brg1=fH1/((u32)16*BR1)-1; //配置波特率19200
_ur1e = 1; //开启中断标志位
_mf5e=1;
_emi=1;
}
int get_buff(char *rbuff,char c){
int data_count=0;
char rdata;
while(1){
while(!_rxif0);
rdata =_txr_rxr0;
if(rdata==c)
{
rbuff[data_count]='\0';
return data_count;
}
rbuff[data_count]=rdata;
data_count++;
}
}
int get_buff1(char *rbuff,char c){
int data_count=0;
char rdata;
while(1){
while(!_rxif1);
rdata =_txr_rxr1;
if(rdata==c)
{
rbuff[data_count]='\0';
return data_count;
}
rbuff[data_count]=rdata;
data_count++;
}
}
void ht_sr()
{
echo_t=1; //输入模式
trig_t=0; //输出模式
char B[3]={'c','m','\0'};
char A[4]={'\0'};
fabo();
while(!echo); //当echo为零时等待
_pt2on=1; //开始计数
while(echo); //当echo为1计数并等待
_pt2on=0; //关闭计数器
conut(); //计算
lltos(A,S); //转字节
send_buff(A);
send_buff(B);
}
void hx(){
ADSKc=0; //HX711
ADDOc=1; //HX711
unsigned char take1[8]={'\0'};
AdVal=ReadCount();
weight=AdVal/1000-FullScale/1000;
take1[0]=weight/1000+48;
take1[1] =weight%1000/100+48;
take1[2]='.';
take1[3] =weight%100/10+48;
take1[4] =weight%10+48;//体重
take1[5]='k';
take1[6]='g';
send_buff(take1);
}
void main()
{
//inituart();
inituart2();
char B[3]={'c','m','\0'};
while(1)
{
//ht_sr();
//hx();
Delayms(1000);
send_buff1(B);
// send_buff(B);
}
}
//串口中断,当有数据发送给串口时,单片机收到这个数据,并通过串口再发回去
DEFINE_ISR(UART0,0x3C)
{
char buff[50]={'\0'};
char buff1[50]={'\0'};
if(_ur0f==1)
{
get_buff(buff,'\n');
send_buff(buff);
}
if(_ur1f==1)
{
get_buff1(buff1,'\n');
send_buff1(buff1);
}
_mf5f=0;
_ur0f=0;
_ur1f=0;
_emi=0;
}
//DEFINE_ISR(UART0,0x3C)
//{
//
// char buff[100]={'\0'};
// get_buff(buff,'\n');//获取一串字符串(该字符串要有换行符号)
// send_buff(buff);//把接收到的字符串再发送出去
// _ur0f = 0;
这是我的代码,我在测试串口时串口二一直都没有反应,请问是我写了什么问题吗?
大boss请求拯救