嵌入式作业(七)

作业要求

1、2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。

2、在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。

3、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?

作业实现

1、2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。

线路连接:

实验代码:

设置ID,自身的ID为0x0AU,对方的ID为0x0BU

//1.3)给主函数使用的局部变量赋初值

    mMainLoopCount=0;    //主循环次数变量

        mFlag='A';           //灯的状态标志

        mLightCount=0;       //灯的闪烁次数

        localMsgID = 0x0AU;

        txMsgID = 0x0BU;

        BitRate = 36;

if (mFlag=='L')                    //判断灯的状态标志

                 {

                         mLightCount++;

                         mFlag='A';                       //灯的状态标志

                         gpio_set(LIGHT_RED,LIGHT_ON);  //

                         //***CAN模块发送一帧数据***

                         if(can_send(CAN_1, txMsgID, 8, (uint8_t*)"I am LJW") != 0) printf("failed\r\n");

运行结果:
己方PC收到:

对方PC收到:

2、在ADC实验中,结合热敏电阻,分别通过触摸芯片表面和热敏电阻,引起A/D值变化,显示芯片内部温度和当前温度。

实验代码:

for(;;)   //for(;;)(开头)

    {

        //2.1)主循环次数变量+1

        mMainLoopCount++;

        //2.2)未达到主循环次数设定值,继续循环

        //延时1

        if (mMainLoopCount<=3000000)  continue;

        //2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理

        //2.3.1)清除循环次数变量

        mMainLoopCount=0;

        //2.3.2)如灯状态标志mFlag'L',灯的闪烁次数+1并显示,改变灯状态及标志

                 if (mFlag=='L')                    //判断灯的状态标志

                 {

                         mLightCount++; 

                         mFlag='A';                       //灯的状态标志

                         gpio_set(LIGHT_BLUE,LIGHT_ON);  //

                         Delay_ms(1000);

                 }

        //2.3.3)如灯状态标志mFlag'A',改变灯状态及标志

                 else

                 {

                         mFlag='L';                       //灯的状态标志

                         gpio_set(LIGHT_BLUE,LIGHT_OFF); //

                         Delay_ms(1000);

                 }

        num_AD1 = adc_ave(ADC_CHANNEL_1,8);

        num_AD2 = adc_ave(ADC_CHANNEL_15,8);

        num_AD3 = adc_ave(ADC_CHANNEL_TEMPSENSOR,8);

        printf("通道1(GEC4746)A/D值: %d\r\n",num_AD1);

        printf("通道15(GEC1211)的A/D值:%d\r\n",num_AD2);

        printf("内部温度传感器的A/D值:%d\r\n\n",num_AD3);

        mCount++;     

    }  //for(;;)结尾

运行结果:

3、用实验验证,对于有数据的某扇区,如果没有擦除(Flash_erase),可否写入新数据?

在第二次写入时,不要擦除第一次写入的内容

实验代码:

//擦除第50扇区

        flash_erase(50);  

    //50扇区第0偏移地址开始写32个字节数据

    flash_write(50,0,32,(uint8_t *) "My name is LJW");

        flash_read_logic(mK1,50,0,32); //50扇区读取32个字节到mK1

        printf("逻辑读方式读取50扇区的32字节的内容:  %s\n",mK1);

       

        flash_write(50,0,32,(uint8_t *) "My name is LLL");

        flash_read_logic(mK2,50,0,32); //50扇区读取32个字节到mK2

        printf("逻辑读方式读取50扇区的32字节的内容:  %s\n",mK2);

运行结果:

没有擦除,也可以写入新数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值