NY8A054E 串口单字节通信功能(接收部分)实现

本文详细介绍了如何使用NY8A054E单片机进行串口通信的GPIO初始化和中断接收设置。在中断服务程序中,实现了数据的接收,通过检测下降沿触发并根据波特率9600进行数据位的读取。同时,解释了延时52us和104us的作用,分别用于滤除杂波和匹配波特率时钟周期。
摘要由CSDN通过智能技术生成

单片机型号:NY8A054E

读取脚(RX):PB0

时钟:16MHz , 2T

一、GPIO初始化:

        a) IOSTB =   C_PB0_Input;     // 先设置 PB0 为输入脚;

        b) INTEDG = C_INT0_En | C_INT0_FallingEdge ;// 打开中断0,并设置中断0为下降沿触方式,这个很重要,因为TTL是由高电平到低电平的变换作为开头;

        c) INTE = C_INT_EXT0 | C_INT_PABKey;        //C_INT_PABKey对串口没有实际帮助的;

        d) INTF = 0x00;                            // Clear all interrupt flags;

二、数据接收业务实现代码:

char rbuf ;        //先定义一个字节变量,用来接收数据
//! interrupt service routine
void isr(void) __interrupt(0)
{
    if(INTFbits.INT0IF)
    { 

                delay_52us(); 
                if(0 == RX){
                            rbuf = 0;
                            for( i = 0;  i < 8;  i++){
                                        rbuf >>= 1;
                                        delay_104us(); 
                                        if(1 == RX)
                                                    rbuf |= 0x80;
                            }
                }

                //清除中断0标志,等待下次数据到来
                INTF = (unsigned char)~(C_INT_EXT0);    // Clear INT0IF(External interrupt 0 flag bit)  

        }

}

三、延时解析:

        1、52us是用来过滤一些杂波的;

        2、104us 是【波特率9600】的时钟宽度,计算公式如下:

                1s/9600 = 0.000104S = 0.104ms = 104us;

                1 000 000us /9600 = 104us;

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值