微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么进不了串口,SBUF0始终为168呢

为什么进不了串口,SBUF0始终为168呢

时间:10-02 整理:3721RD 点击:
#include<c8051f020.h>
#include <STRING.H>
#include <stdlib.h>
#include <stdio.h>
sbit UARTRX=P0^1;
sbit UARTTX=P0^0;
unsigned char MM,flag;
void SYS_INIT()
{
        unsigned char i;
        WDTCN=0XDE;
        WDTCN=0XAD;                                                //禁止看门狗
                                                                                                                                                 
        OSCXCN=0X67;                                        //开启外部晶体,22.184MHZ
        OSCICN=0X9C;                                        //时钟丢失允许0x84,选择内部时钟2MHZ
        for(i=0;i<200;i++);
        while(((OSCXCN&0X80)!=0X80));        //查询外部晶振是否稳定
        OSCICN=0X88;                                        //选择外部时钟
        EMI0CF=0XF0;                                        //只使用内部RAM,总线非复用,P4-P7
        PCON=0X80;                                                //UART设置SMOD=1
        EA=1;

}
void PORT_INIT()
{
        XBR0=0X05;                                                //UART0允许,SMBUS(IIC)允许
        XBR1=0;
        XBR2=0XC0;                                                //弱上拉全局禁止,交叉开关允许
        P1MDIN=0XFF;                                        //设置P1端口输 入方式为数字
        P0MDOUT=0;
        P1MDOUT=0;
        P2MDOUT=0;
        P3MDOUT=0;                                                //0为漏极开路输出,1为弱上拉
        P74OUT=0X00;                                        /*P5为键盘,漏极开路
                                                                           7   6   5   4   3   2   1   0
                                                                          P7H P7L P6H P6L P5H P5L P4H P4L */
        P0=0XFF;P1=0XFF;P2=0XFE;P3=0X9F;//RGB灯熄灭
        P4=0XFF;P5=0XFF;P6=0XFF;P7=0XFF;
}


void UART_INIT()                                        //工作方式1,SMOD=1
{

        CKCON=0X68;                                                //定时器均使用系统时钟,不分频,0110 1000 T1用于波特率发声器需12分频
        TMOD=0X20;                                                //8位重装定时器1,为串口提供波特率
        TCON=0X00;                                                //T1、T0,外部中断屏蔽
        TL1=0XF4;
        TH1=0XF4;                                                //22.1184MHz,波特率默认9600
                                                                        //9600        TH1=0XF4
                                                                        //4800        TH1=0XE8
        ES0=1;                                                                //2400        TH1=0XD0
        //IE=0X90;                                                                //1200        TH1=0XA0
        SCON0=0X50;                                                //接收禁止,允许接收为0X50   0100 0000
        SADEN0=0X00;                                        //UART0从地址无关
        TR1=1;                                                        //打开波特率发生器
}

void UART_Send_Byte(unsigned char mydata)
{
         
         
         SBUF0=mydata;
         while(!TI0);
         TI0=0;
}

/*void UART_Send_Str(unsigned char s[])
{
         unsigned char i;
         for(i=0;i<strlen(s)-1;i++)
                 UART_Send_Byte(s[i]);
}*/
void main()
{
        SYS_INIT();                                                                                                //系统初始化
        PORT_INIT();                                                                                        //端口初始化
        UART_INIT();
        while(1)
        {
                if(flag==1)
                {
                        UART_Send_Byte(0X12);
                }
        }
}
void UART0_ISR() interrupt 4                        //定时器0
{
        if(!RI0)     //接收
        {
                flag=1;
        }
        else
        {
                MM=SBUF0;
                while(!RI0)
                RI0=0;       
        }
}

你的中断程序有问题吧

中断问题出现在哪?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top