找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1941|回复: 5
收起左侧

请教通过串口发送单片机I/O口状态程序

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
ID:394056 发表于 2018-10-15 10:20 | 显示全部楼层 |阅读模式
本帖最后由 代码虾1 于 2018-10-15 10:25 编辑

通过P1.0口检测高低电平,并通过串口发送P1.0口的状态显示在串口助手上。下面是我写的程序,但是通过串口收不到数据。还请大佬们指教啊,快被这个程序搞疯了。请给出具体的程序谢谢
#include "stc12c5a60s2.h"
#include "delay.h"
#include "uart.h"
sbit relay=P3^1;
sbit   HighLow=P1^0;
sbit   status=P1^1;   
void main()
{
  InitUart();
  while(1)
{
  if(HighLow==0)
    {
  relay=1;
  }
  else if(HighLow==1)
  {
   relay=0;
  }
   send_uart1(HighLow);
}     
}
下面是子程序
#include "uart.h"
#include "stc12c5a60s2.h"

void InitUart()  
{

SCON=0X50;
PCON |= 0x80;  
S2CON = 0x50;  
AUXR |= 0x08;  
AUXR |= 0x04;  
AUXR|=0X11;  
BRT = 0xb8;  
EA =1;      
    ES =1;      
IE2 =0x01;      
TI=1;
RI=0;
}
void send_uart1(uchar ck1)
{
SBUF=ck1;
while(TI==0);
TI=0;

}
void send_uart2(uchar ck1)
{
S2BUF =ck1;
    while(!(S2CON&S2TI));
    S2CON&=~S2TI;         
}
void UartPrintASCII(unsigned char c)   
{
    TI=0;   
    SBUF=c;   
    while(TI==0);   
    TI=0;   
}
void UartPrintf(unsigned char *p)   
{
  while(*p)
  {
   SBUF=*(p++);
  while(TI==0)
  {
   ;
   ;
   ;
  };
  TI=0;
}   
}

void Uart2PrintASCII(unsigned char c)   
{
    S2BUF=c;   
    while(!(S2CON&S2TI));  
S2CON&=~S2TI;         
}
void Uart2Printf(unsigned char *p)   
{
  while(*p)
  {
   S2BUF=*(p++);
  while(!(S2CON&S2TI));  
     S2CON&=~S2TI;         
}   
}

回复

使用道具 举报

ID:387733 发表于 2018-10-15 16:41 | 显示全部楼层
主频多少?串口波特率多少?
回复

使用道具 举报

ID:394056 发表于 2018-10-17 22:13 | 显示全部楼层
帖子沉了完了
回复

使用道具 举报

ID:213173 发表于 2018-10-18 14:06 | 显示全部楼层
本帖最后由 wulin 于 2018-10-19 15:48 编辑

楼主提出问题含糊不清。不知你的程序是从哪里抄来的,根据头文件是使用的STC12C5A60S2,看串口初始化程序是使用的串口2。串口2的数据缓冲寄存器应该是S2BUF并且使用独立波特率发生器。由于你只发不收,不必开串口中断。给你写了示例程序,Keil 调试通过,未经实物验证。
#include <STC12C5A60S2.H>        
//sbit relay=P3^1;
sbit HighLow=P1^0;
//sbit status=P1^1;   
bit  a;

void UartInit(void)                //9600bps@11.0592MHz
{
        AUXR &= 0xF7;                //波特率不倍速
        S2CON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xFB;                //独立波特率发生器时钟为Fosc/12,即12T
        BRT = 0xFD;                        //设定独立波特率发生器重装值
        AUXR |= 0x10;                //启动独立波特率发生器
}
void send_uart1(unsigned char ck1)
{
        S2BUF=ck1;
        while(S2TI==0);
        S2TI=0;
}
void main()
{
        UartInit();
        HighLow=1;
        a=HighLow;
        while(1)
        {
                if(HighLow^a)//只在P1.0电平变化时发送数据
                {
                        a=~a;
                        send_uart1(HighLow);
                }
        }     
}
回复

使用道具 举报

ID:411973 发表于 2018-10-18 21:40 | 显示全部楼层
这个还是要具体问题具体分析的
回复

使用道具 举报

ID:409210 发表于 2018-10-19 15:34 | 显示全部楼层
串口率事多少呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表