怎么将代码结合

本文介绍了如何将发送端的胎压数据(230kPa至250kPa)以随机数形式通过CAN总线发送,并在接收端接收。若数据超出范围,发送端会触发蜂鸣器警报。文章详细展示了初始化锁相环、ECT模块以及蜂鸣器的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发送端代码

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "CAN.h"      

#define BUZZ PORTK_PK5
#define BUZZ_dir DDRK_DDRK5
#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define  BUS_CLOCK           32000000       //总线频率
#define  OSC_CLOCK           16000000       //晶振频率

#define ID                  0x0001       //发送标识符
#define data_len_TX          7           //发送数据长度

unsigned char k;

unsigned char senddata[8] = {'F','R','E','E','F','L','Y',0};     //发送的数据

struct can_msg msg_send, msg_get;
unsigned char datain=0;

/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void) 
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
    
    #if(BUS_CLOCK == 40000000) 
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif 

    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}

/************************************************************/
/*                    初始化ECT模块                         */
/************************************************************/
void initialize_ect(void){
  ECT_TSCR1_TFFCA = 1;  // 定时器标志位快速清除
  ECT_TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  ECT_TIOS  = 0xff;      //指定所有通道为输出比较方式
  ECT_TCTL1 = 0x00;        // 后四个通道设置为定时器与输出引脚断开
  ECT_TCTL2 = 0x00;     // 前四个通道设置为定时器与输出引脚断开
  ECT_DLYCT = 0x00;        // 延迟控制功能禁止
  ECT_ICOVW = 0x00;        // 对应的寄存器允许被覆盖;  NOVWx = 1, 对应的寄存器不允许覆盖
  ECT_ICSYS = 0x00;        // 禁止IC及PAC的保持寄存器
  ECT_TIE   = 0x00;     // 禁止所有通道定时中断
  ECT

接收端代码

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "CAN.h"      
#include "LCD.h"      

#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define  BUS_CLOCK           32000000       //总线频率
#define  OSC_CLOCK           16000000       //晶振频率

char *xianshi[3] = {
"飞翔科技开发板",
"检测到胎压数据为:",
};

#define ID                  0x0001       //发送标识符
#define data_len_TX          7           //发送数据长度

unsigned char k;

unsigned char senddata[8] = {'F','R','E','E','F','L','Y',0};     //发送的数据

struct can_msg msg_send, msg_get;
unsigned char datain=0;

/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void) 
{
    CLKSEL &= 0x7f;       //set OSCCLK as sysclk
    PLLCTL &= 0x8F;       //Disable PLL circuit
    CRGINT &= 0xDF;
    
    #if(BUS_CLOCK == 40000000) 
      SYNR = 0x44;
    #elif(BUS_CLOCK == 32000000)
      SYNR = 0x43;     
    #elif(BUS_CLOCK == 24000000)
      SYNR = 0x42;
    #endif 

    REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNDIV+1)/(REFDIV+1)=64MHz ,fbus=32M
    PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
    asm NOP;
    asm NOP;
    while(!(CRGFLG&0x08)); //PLLCLK is Locked already
    CLKSEL |= 0x80;        //set PLLCLK as sysclk
}

/************************************************************/
/*                    初始化ECT模块                         */
/************************************************************/
void initialize_ect(void){
  ECT_TSCR1_TFFCA = 1;  // 定时器标志位快速清除
  ECT_TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  ECT_TIOS  = 0xff;      //指定所有通道为输出比较方式
  ECT_TCTL1 = 0x00;        // 后四个通道设置为定时器与输出引脚断开
  ECT_TCTL2 = 0x00;     // 前四个通道设置为定时器与输出引脚断开
  ECT_DLYCT = 0x00;        // 延迟控制功能禁止
  ECT_ICOVW = 0x00;        // 对应的寄存器允许被覆盖;  NOVWx = 1, 对应的寄存器不允许覆盖
  ECT_ICSYS = 0x00;        // 禁止IC及PAC的保持寄存器
  ECT_TIE   = 0x00; 

蜂鸣器代码

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define BUZZ PORTK_PK5
#define BUZZ_dir DDRK_DDRK5

#define BUZZ_ON 1
#define BUZZ_OFF 0

/*************************************************************/
/*                      初始化蜂鸣器                         */
/*************************************************************/
void INIT_BUZZ(void) 
{
  BUZZ_dir = 1;
  LEDCPU_dir = 1;
}

/*************************************************************/
/*                        延时函数                           */
/*************************************************************/
void delay(void) 
{
  unsigned int i,j;
  for(j=0;j<2;j++)
  for(i=0;i<60000;i++)
  ;
}


/*************************************************************/
/*                          主函数                           */
/*************************************************************/
void main(void) {
  DisableInterrupts;   //禁止中断
  INIT_BUZZ();
  EnableInterrupts;    //允许中断
  LEDCPU = 0;

  for(;;) 
  {
   BUZZ = BUZZ_ON;     //蜂鸣器响
   delay();
   BUZZ = BUZZ_OFF;    //蜂鸣器不响
   delay();
  } 
}

求助要想使发送端代码生成随机数发送到接收端代码,随机数正常范围在230kpa到250kpa,不在这个范围内蜂鸣器发出警报,应该怎么修改,把这三个代码结合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值