打印
[其它应用]

sh79f3283和sh79f166a的EUART通讯

[复制链接]
1295|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zdzmonkey|  楼主 | 2017-4-8 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

通讯有问题,示波器上没有波形,不知道哪里有错误,哪位大神帮忙看看

*********************************************SH79F3283***************************************


#include "SH79F32.h"

extern uchar r_Data;                //用来接受SBUF的数据
extern uchar out_flag;            //输出标志位

void euartInital(void);            //初始化EUART

/***************************************
************   初始化串口  *************
****************************************
*/
void euartInital(void)
{
    PCON=0x00;                    //SMOD=0;波特率不加倍  SSTAT=0;SCON[7:5]工作方式为SM0,SM1,SM2
    SCON=0x40;                    //选择方式1,8位异步方式,可变波特率  
    T2CON=0x30;                    //RCLK=1;定时器2产生接受波特率  TCLK=1定时器2产生发送波特率   TR2=0; 开始定时器2
    T2MOD=0x20;                    //TCLKP2=0;选择系统时钟作为定时器2的时钟源8M  T2OE=0;设置P0.5/T2作为时钟输入或I/O端口 DCEN=0;定时器2仅作为递增计数器
    RCAP2L=0xFE;            //波特率为115200            0xFFCC    9600
    RCAP2H=0xFF;
    TL2=0XFE;
    TH2=0xFF;
    SADDR=0x00;
    SADEN=0x00;
    TR2=1;                                //启动定时器2
}

void euart_ISR(void)  interrupt 4
{
    if(TI==1)
    {
        TI=0;
    }
    else if(RI==1)
    {
        r_Data=SBUF;
        RI=0;
        out_flag=1;
    }
}

void main(void)
{
    SYSInitial();
    ADCInitial();                    //ADC初始化
    INTInitial();                    //INT初始化
    IOInitial();                    //IO初始化
    euartInital();                //EUART初始化
    while(1)
    {
        if(out_flag==1)
        {
            SBUF=8;
            out_flag=0;
        }
    }
}

void INTInitial(void)
{
       IEN0=0xF0;                //EA=1,所有中断允许位开启;EADC=1,ADC中断允许位; ET2=1,定时器中断允许位
                                         //ES0=1, EUART0中断允许位
       LPDCON=0x89;
}




********************************************************SH79F166A***************************************************
#include "SH79F166A.h"
#include <INTRINS.H>
extern uchar r_data=0;
extern uchar out_flag=0;

void main(void)
{
IOInitial();
  UARTInitial();
  TimerInitial();
  INTInitial();
  PWMInitial();

while(1)
  {
        if(r_data==8)
        {
            led();
            delay_50ms(30);
            led_OFF();
        }
    }   
}
void SYSInitial(void)
{
//    CLKCON=0x00;
CLKCON=0x08;
Delay=0xff;
while(--Delay);
CLKCON=0x0C;     //8M
}

void UARTInitial(void)
{
  PCON=0x00;           //SMOD=0,SSTAT=0;SCON[7:5]工作方式为SM0,SM1,SM2
  SCON=0x40;           //SM[1:0]=01,方式1,SM2=0,禁止停止位确认检验,停止位将置RI为1产生终端
  T2CON=0x34;         //定时器2产生接受/发送波特率,TR=1,定时器2启动
  T2MOD=0;              //系统时钟作为定时器2的时钟源,设置P0.5/T2作为时钟输入或I/O端口,禁止定时器2作为递增/递减计数器,定时器2仅作为递增计数器
  RCAP2L=0xFE;       //波特率为115200
  RCAP2H=0xFF;
  TL2=0xFE;
  TH2=0xFF;
}
void INTInitial(void)
{
  EXF0=0x00;            //外部中断4、3、2低电平触发。外部中断3、2中断请求标志位无中断挂起
  IEN0=0xF2;            //EA=1,打开中断总开关;ES0=1,允许EUART0中断;ET5=1,允许定时器5溢出中断,    ET2=1,定时器打开
  IEN1=0x02;            //ET4=1,ET3=1,允许定时器4、3溢出中断;EX4=1,允许外部中断2中断
  LPDCON=0x89;        //低电压检测控制寄存器。LPDEN=1,LPD允许位,允许低电压检测,LPDS[3:0]LPD电压允许位。1001:3.75v
}



void UART_ISR(void) interrupt 4
{
    if(TI==1)
    {
        TI=0;
    }else if(RI==1)
    {
         r_data=SBUF;
         RI=0;
         out_flag=1;
    }
}




发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

20

帖子

0

粉丝