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

2019-07-15 13:26发布

#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;       
        }

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
chenwei6991627
1楼-- · 2019-07-15 15:27
你的中断程序有问题吧
误解依旧
2楼-- · 2019-07-15 17:34
chenwei6991627 发表于 2016-7-13 11:27
你的中断程序有问题吧

中断问题出现在哪?

一周热门 更多>