一、程序流程图 二、 功能描述:AD 数据采集,AD 采集 20 组数据,每组数据 50 个采样值,然后将采样值经过 计算平均值并转换为十进制数据后发送到 CAN,在 PC 机上用 CANTools 软件调试 主函数流程图 中断函数流程图 三、程序源码 /* **************************************************************** *************************************************************** */ #include "pic18f4680.h" /* PIC18 系列的头文件 */ char CAN_TX_Adress_H,CAN_TX_Adress_L; /* CAN 发送邮箱标识符高低字节 */ char CAN_RX_Adress_H,CAN_RX_Adress_L; /* CAN 接收邮箱标识符高低字节 */ #define CHANNEL7 0X1D //选择模拟通道 7 采集正输出电压 #define CHANNEL6 0X19//选择模拟通道 6 采集正输出电流 #define CHANNEL3 0X0D//选择模拟通道 3 采集正输出电压 #define CHANNEL2 0X09//选择模拟通道 2 采集正输出电流 #define CHANNEL1 0X05//选择模拟通道 1 采集负输出电流 启动程序系统初始化开始采样命令为真?否1000次采样完毕?计算均值选择通道CAN发送数据采样命令清零所有通道采样完毕?AD采样是否等待CAN接收中断是否发送成功?是是否中断入口CAN接收中断产生?接收是否匹配?是中断返回否否修改采样命令是#define CHANNEL0 0X01//选择模拟通道0 采集负输出电压 #define LN 50 //采集50 次进行平均 #define LAN 20 //采集20 个平均值 bank2 uint AD[LN];//存放50 次采样值 uint RES[LAN]; //存放20 个平均值 uint RESVP=0x0000; //存放正输出电压采样值,供CAN 上传数据 uint RESIP=0X0000;//存放正输出电流电压采样值,供CAN 上传数据 uint RESVN=0X0000;//存放负输出电压采样值,供CAN 上传数据 uint RESIN=0X0000;//存放负输出电流正电压采样值,供CAN 上传数据 uchar WAIT_FLAG; //等待中断标志位 uint count; //100 次计数 /* **************************************************************** ** 函 数 名: initial() ** 功能描述: 系统初始化子程序,放在程序首部 *************************************************************** */ void initial() { count=0; INTCON=0x00; /* bit7-bit0:关总中断 */ PIE1=0; /* PIE1 的中断不使能 */ PIE2=0; /* PIE2 的中断不使能 */ PIE3=0; /* PIE...